ffmpeg解码中碰到的问题

来源:互联网 发布:access数据库 工具 编辑:程序博客网 时间:2024/06/06 03:36

最近在做摄像机实时流采集的项目,其中用到了H264解码;

项目是通过DirectShow来实现的,其中通过SampleGrabber接口提供的BuffeCB方法来获得每一帧数据;

按常理来说BufferCB中应该是完整一帧数据,但是但是在有些电脑上出现的情况却让我意外;

使用ffmpeg解码后渲染发现只要有运动物体时就会出现花屏;

同时如果降低显示器分辨率或者缩小窗口这时花屏现象就会消失;

这个问题一直困扰着我,甚至一度认为是摄像机输出的实时流存在问题。

通过下述代码可以实现不是一帧的数据的解码:

<pre name="code" class="cpp">void  decodeFrame(BYTE* buffer , int bufferLen){av_init_packet(&pkt);pkt.data = buffer;pkt.size = bufferLen;av_decode_video2(pCodecCtx, pFrame, &got_picture_ptr, &pkt);    //获取解码后的数据}void decode(BYTE* buffer, int bufferLen){int pos = 0;do{BYTE* pOut;int pOut_size;int len = 0;len = av_parser_parse2(m_parser, pCodecCtx, &pOut, &pOut_size,buffer + pos, bufferLen + pos, pts, dts, 0);      // 这是一个很关键的方法pos += len;if(pOut_size > 0 ){decodeFrame(pOut, pOut_size);   //开始解码}}while(pos < bufferLen)if(bufferLen <= 0){decodeFrame(NULL, 0);}}




0 0
原创粉丝点击