ndk中使用ffmpeg进行视频编码问题

lucasli 发布于 2012/06/25 16:16
阅读 7K+
收藏 0

我在android中使用ffmpeg进行视频编码,需要把yuv420p编码成mpeg4, 但是在执行avcodec_encode_video()函数是异常,请教高手如何解决,代码如下:

#define MAX_OUTBUF 100*1000

static vbyte8_ptr * _outbuf = malloc(MAX_OUTBUF);

int VCodec::yuv420p_to_mpeg4(vbyte8_ptr srcdata,
        vint32_t srclen,
        vbyte8_ptr *dest,
        vint32_t *destlen)
{

    uint8_t srcbytes = 0;
    struct AVCodec * av_codec;
    struct AVCodecContext* av_codec_ctx;
    struct SwsContext * dest_cxt;
    AVFrame * picture = NULL;
    struct AVPacket avpkt;
    uint32_t size, out_size, x, y;

    av_codec = avcodec_find_decoder(CODEC_ID_MPEG4);
    if(!av_codec) {
        LOG_TRACE(ERROR_TYPE, "Not found decoder for CODEC_ID_MPEG4");
        return V_NOT_FOUND;
    }
     av_codec_ctx = avcodec_alloc_context();
    picture = avcodec_alloc_frame();
    av_codec_ctx->bit_rate = _video_param->_bitrate;
    av_codec_ctx->width = _video_param->_width;
    av_codec_ctx->height = _video_param->_height;
    av_codec_ctx->time_base = (AVRational){1, _video_param->_frame_rate};
    av_codec_ctx->gop_size = 10;
    av_codec_ctx->max_b_frames = 1;
    av_codec_ctx->pix_fmt = PIX_FMT_YUV420P;

    //open it
    if(avcodec_open(av_codec_ctx, av_codec) < 0) {
        LOG_TRACE(ERROR_TYPE, "Cann't open codec using avcodec_open()");
        return V_NOT_FOUND;
    }
     size = av_codec_ctx->width * av_codec_ctx->height;
    picture->data[0] = srcdata;
    picture->data[1] = picture->data[0] + size;
    picture->data[2] = picture->data[1] + size / 4;
    picture->linesize[0] = av_codec_ctx->width;
    picture->linesize[1] = av_codec_ctx->width / 2;
    picture->linesize[2] = av_codec_ctx->width / 2;
    out_size = avcodec_encode_video(av_codec_ctx, _outbuf, MAX_OUTBUF, picture);

    *dest = _outbuf;

    *destlen = out_size;
    avcodec_close(av_codec_ctx);
    av_free(av_codec_ctx);
    av_free(picture);
加载中
0
无名码农
无名码农
你这代码在PC上可以跑?
毛毛虫啊毛毛虫
毛毛虫啊毛毛虫
回复 @lucasli : 单独的用webview播放网络视频,能够通过库的方式解码么,标准的mediaplayer是不支持flv格式的视频的
lucasli
lucasli
@婷儿 代码方法基本没啥错误,主要是调整参数
无名码农
无名码农
回复 @lucasli : 可以说下是什么原因?
lucasli
lucasli
搞定了
0
lucasli
lucasli
在PC上没测试
0
lucasli
lucasli
原来是avcodec_find_decoder()写错了,但是改为 avcodec_find_encoder()后, avcodec_encode_video()不异常,但是返回值out_size依然是0. 这个是什么原因
0
小小街
小小街

LZ会硬解码吗?比如stagefright

0
lucasli
lucasli

引用来自“JThink”的答案

LZ会硬解码吗?比如stagefright

stagefright 是android媒体框架,现在我们正在做底层的视频相关驱动,增加视频处理性能。
0
小小街
小小街

引用来自“lucasli”的答案

引用来自“JThink”的答案

LZ会硬解码吗?比如stagefright

stagefright 是android媒体框架,现在我们正在做底层的视频相关驱动,增加视频处理性能。
您可以告诉我stagefright怎么修改么   我想在播放视频的时候对每一帧的图片进行一些操作
0
cut
cut

arm有ffmpeg硬解码??求教,貌似哥还没见几个ARM里面加了类似的DSP的

0
猿分的天空
猿分的天空
我也是在搞android的视频压缩啊,不过是h.264,Lz能请教一下你问题吗?
0
lucasli
lucasli

引用来自“BEILUTE00”的答案

我也是在搞android的视频压缩啊,不过是h.264,Lz能请教一下你问题吗?
好的,请讲
猿分的天空
猿分的天空
帮也不帮好歹说一声啊
0
猿分的天空
猿分的天空

引用来自“lucasli”的答案

引用来自“BEILUTE00”的答案

我也是在搞android的视频压缩啊,不过是h.264,Lz能请教一下你问题吗?
好的,请讲
能不能跟我讲一下android下利用camera API进行视频编码这方面应用的编写框架和流程?我是最近才开始涉足android的,所以对于流程有点模糊,麻烦你了。当然,最好能够加Q详聊,我Q 841783247
返回顶部
顶部