首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > 多媒体 >

利用ffmpeg解码H264,花屏解决思路

2014-01-08 
利用ffmpeg解码H264,花屏UINT CMP4File::VideoCap_Thread_Fun(void* pParam){CMP4File*pMP4File(CMP4File

利用ffmpeg解码H264,花屏


UINT CMP4File::VideoCap_Thread_Fun(void* pParam)
{
    CMP4File  *pMP4File=(CMP4File*)pParam;

    //初始化AVPacket
    av_init_packet(&pMP4File->m_AVPacket);

   int nFrameFinished = 0;

      while(true)
   {
       

              if(av_read_frame(pMP4File->m_pFormatCtx, &(pMP4File->m_AVPacket)) >=0)     {
      int    nDecodeResult=avcodec_decode_video2(pMP4File->m_pCodecContext, pMP4File->m_pFrame,
                                                                      &nFrameFinished, &(pMP4File->m_AVPacket));

   
               
    if(nDecodeResult>0)
   {
   if(nFrameFinished>0)
   {
   
   int  iReturn=sws_scale(pMP4File->m_pSwsContext, pMP4File->m_pFrame->data,
                      pMP4File->m_pFrame->linesize, 0, pMP4File->m_nFrameHeight,
  pMP4File->m_pRGBFrame.data, pMP4File->m_pRGBFrame.linesize);

   
      AVFRAME_INFO      pFrame;
                       memset(&pFrame, 0, sizeof(AVFRAME_INFO));

   int  m=1980, n=1080;
   pFrame.uWidth=pMP4File->m_nFrameWidth;
   pFrame.uHeight=pMP4File->m_nFrameHeight;



                       //显示
  unsigned char*   outStream = (unsigned char*)(pMP4File->m_pRGBFrame.data[0]);

   pMP4File->Drawer(&pFrame, outStream);

   av_free_packet(&pMP4File->m_AVPacket);
   
   }
   }//if
     

      }

    return  0;

}


1 花屏的原因
2 视频的类型,如H264、MPEG,视频流的长度,在那个函数获得?
3 其实是播放MP4文件,提供解码MP4文件类似的代码吗?
谢谢! ffmpeg
[解决办法]
avcodec_decode_video2返回的是处理的字节数,这个要去ffmpeg的头文件里面找。
意思:
avcodec_decode_video2(AVCodecContext,解码后AVFrame,是否成功?,解码前AVPacket)

热点排行