利用ffmpeg解码H264,花屏

时间:2021-09-21 04:35:24

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文件类似的代码吗?
谢谢!

16 个解决方案

#1


没有人吗?中秋节都放假了?

#2


测试foreman.264,
nDecodeResult=11369, nFrameFinished=0
nDecodeResult=1898, nFrameFinished=0
nDecodeResult=633, nFrameFinished=232
nDecodeResult=2341, nFrameFinished=232

我没百度到,avcodec_decode_video2返回什么?从大到小,递增?
参3,后面就一直固定是某值,是什么意思?

#3


花屏很多是分辨率设置不对之类的问题。
我倒是有一个FFMPEG+SDL播放器,你可以试试
http://blog.csdn.net/leixiaohua1020/article/details/8652605

#4


avcodec_decode_video2返回的是处理的字节数,这个要去ffmpeg的头文件里面找。
意思:
avcodec_decode_video2(AVCodecContext,解码后AVFrame,是否成功?,解码前AVPacket)

#5


我知道,花屏的原因了,解码格式不对,PIX_FMT_YUV420P。
但现在有,另一个问题:播放几分钟后就运行不了。
MP4文件,有音频,视频,我只解视频显示。这有影响吗?

#6


花屏的原因主要可能是解码不对吧!~

看看解码部分代码吧!

如果有音频和视频的 要分开解码的吧!
两个都不一样的!只有一个肯定不行的!

#7


但现在问题是,为什么,编译没问题,但运行有问题?

#8


会不会是FFMPEG库的问题?

#9


该回复于2015-03-20 15:19:55被管理员删除

#10


我解码也遇到花屏了,用opencv采集的图片,编码的h264文件可以用VLC软件打开正常播放,但是解码的YUV视频是花屏的

#11


我的也是花屏,解码后的数据保存文件播出来不花屏,播实时流到最后显示的时候就会出现,这是什么问题?我解码的格式什么的都对呢

#12


我的播1080p的时候花屏 播720p的时候就好着,跟分辨率有关 可我怎样让它播1080p的时候不花屏?

#13


引用 6 楼 max_min_ 的回复:
花屏的原因主要可能是解码不对吧!~

看看解码部分代码吧!

如果有音频和视频的 要分开解码的吧!
两个都不一样的!只有一个肯定不行的!
我测出来确实是解码的问题 解码完了保存的数据就出现花屏了 怎么解决呀 大神呢 求帮助

#14


大神们,我的界面也出现花屏的现象。不知道怎么解决 利用ffmpeg解码H264,花屏
解码的过程出现的结果是 利用ffmpeg解码H264,花屏

#15


请问楼主是在怎么拼帧的呢

#16


我遇到了跟11楼相同的问题,有木有大神解决呢?

#1


没有人吗?中秋节都放假了?

#2


测试foreman.264,
nDecodeResult=11369, nFrameFinished=0
nDecodeResult=1898, nFrameFinished=0
nDecodeResult=633, nFrameFinished=232
nDecodeResult=2341, nFrameFinished=232

我没百度到,avcodec_decode_video2返回什么?从大到小,递增?
参3,后面就一直固定是某值,是什么意思?

#3


花屏很多是分辨率设置不对之类的问题。
我倒是有一个FFMPEG+SDL播放器,你可以试试
http://blog.csdn.net/leixiaohua1020/article/details/8652605

#4


avcodec_decode_video2返回的是处理的字节数,这个要去ffmpeg的头文件里面找。
意思:
avcodec_decode_video2(AVCodecContext,解码后AVFrame,是否成功?,解码前AVPacket)

#5


我知道,花屏的原因了,解码格式不对,PIX_FMT_YUV420P。
但现在有,另一个问题:播放几分钟后就运行不了。
MP4文件,有音频,视频,我只解视频显示。这有影响吗?

#6


花屏的原因主要可能是解码不对吧!~

看看解码部分代码吧!

如果有音频和视频的 要分开解码的吧!
两个都不一样的!只有一个肯定不行的!

#7


但现在问题是,为什么,编译没问题,但运行有问题?

#8


会不会是FFMPEG库的问题?

#9


该回复于2015-03-20 15:19:55被管理员删除

#10


我解码也遇到花屏了,用opencv采集的图片,编码的h264文件可以用VLC软件打开正常播放,但是解码的YUV视频是花屏的

#11


我的也是花屏,解码后的数据保存文件播出来不花屏,播实时流到最后显示的时候就会出现,这是什么问题?我解码的格式什么的都对呢

#12


我的播1080p的时候花屏 播720p的时候就好着,跟分辨率有关 可我怎样让它播1080p的时候不花屏?

#13


引用 6 楼 max_min_ 的回复:
花屏的原因主要可能是解码不对吧!~

看看解码部分代码吧!

如果有音频和视频的 要分开解码的吧!
两个都不一样的!只有一个肯定不行的!
我测出来确实是解码的问题 解码完了保存的数据就出现花屏了 怎么解决呀 大神呢 求帮助

#14


大神们,我的界面也出现花屏的现象。不知道怎么解决 利用ffmpeg解码H264,花屏
解码的过程出现的结果是 利用ffmpeg解码H264,花屏

#15


请问楼主是在怎么拼帧的呢

#16


我遇到了跟11楼相同的问题,有木有大神解决呢?