ffmpeg解码H.264流,odec_decode_video解码后,数据为空?

hanshy 2010-10-25 02:19:39
在进行初始化等工作之后调用avcodec_decode_video,返回值是正确的整型数据,填入的buff和size都是正确的,而第二个参数AVFrame*指向的data和linesize都是空(错误的指针)?求指教。
...全文
383 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
asgaobiao 2010-11-30
  • 打赏
  • 举报
回复
如果输入的文件,可以进行open,读到formatcontext的话,应该就可以解码的,步骤就是那么一步步来的,你找找ffmpeg的outputexample看看你少了哪一步,小问题!
chilli211 2010-11-29
  • 打赏
  • 举报
回复
你没有给AVCodecContext *c赋值。
在c= avcodec_alloc_context();后面赋值,否则解码失败。
njupt_baitao 2010-11-28
  • 打赏
  • 举报
回复
memset(pBuffer+nBufferSize,0,8);
这句话什么意思没看懂。

有可能是你传入的数据太少,不足以解码,造成GOT_picture为0.
hanshy 2010-10-26
  • 打赏
  • 举报
回复
再次顶起,求高手解答疑惑,谢谢。
hanshy 2010-10-25
  • 打赏
  • 举报
回复
贴上代码,帮我分析下。
------------------------------------------------------------------------------------------------------------------
bool DecodeStream(BYTE* pBuffer, int nBufferSize)
{
avcodec_init(); //初始化
av_register_all(); //挂载所有解码器
AVCodec *codec;
AVCodecContext *c= NULL;
int got_picture, len;
AVFrame *picture;
uint8_t *inbuf_ptr;
codec = avcodec_find_decoder(CODEC_ID_H264);//找到H264的解码器
if (!codec)
{
return false;
}
c= avcodec_alloc_context();
picture = avcodec_alloc_frame();

if(codec->capabilities&CODEC_CAP_TRUNCATED)
{
c->flags|= CODEC_FLAG_TRUNCATED;
}
if (avcodec_open(c, codec) < 0) /* open it */
{
return false;
}
inbuf_ptr = pBuffer;
while (nBufferSize > 0)
{
memset(pBuffer+nBufferSize,0,8);
len = avcodec_decode_video(c, picture, &got_picture,inbuf_ptr, nBufferSize);
TRACE("data[0] = %d\n",picture->data[0]);
if (len < 0)
{
return false;
}
nBufferSize -= len;
inbuf_ptr += len;

}
len = avcodec_decode_video(c, picture, &got_picture,NULL, 0);
avcodec_close(c);
av_free(c);
av_free(picture);
return true;
}

传进来的数据流是一帧的数据,调试到红色语句部分返回的len等于nBufferSize。picture里面data[0]~data[3]和及linesize全空,got_picture等于0;

2,554

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧