利用ffmpeg解码H264,花屏

ashleycoder 2013-09-18 07:55:27

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文件类似的代码吗?
谢谢!
...全文
2369 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
fernandowei 2016-05-04
  • 打赏
  • 举报
回复
我遇到了跟11楼相同的问题,有木有大神解决呢?
BunnyC254 2016-04-07
  • 打赏
  • 举报
回复
请问楼主是在怎么拼帧的呢
道亦无名 2015-11-30
  • 打赏
  • 举报
回复
大神们,我的界面也出现花屏的现象。不知道怎么解决
解码的过程出现的结果是
wangzongze1015 2013-12-20
  • 打赏
  • 举报
回复
引用 6 楼 max_min_ 的回复:
花屏的原因主要可能是解码不对吧!~ 看看解码部分代码吧! 如果有音频和视频的 要分开解码的吧! 两个都不一样的!只有一个肯定不行的!
我测出来确实是解码的问题 解码完了保存的数据就出现花屏了 怎么解决呀 大神呢 求帮助
wangzongze1015 2013-12-19
  • 打赏
  • 举报
回复
我的也是花屏,解码后的数据保存文件播出来不花屏,播实时流到最后显示的时候就会出现,这是什么问题?我解码的格式什么的都对呢
wangzongze1015 2013-12-19
  • 打赏
  • 举报
回复
我的播1080p的时候花屏 播720p的时候就好着,跟分辨率有关 可我怎样让它播1080p的时候不花屏?
sunnyrainab 2013-11-27
  • 打赏
  • 举报
回复
我解码也遇到花屏了,用opencv采集的图片,编码的h264文件可以用VLC软件打开正常播放,但是解码的YUV视频是花屏的
ashleycoder 2013-09-24
  • 打赏
  • 举报
回复
会不会是FFMPEG库的问题?
ashleycoder 2013-09-24
  • 打赏
  • 举报
回复
但现在问题是,为什么,编译没问题,但运行有问题?
max_min_ 2013-09-22
  • 打赏
  • 举报
回复
花屏的原因主要可能是解码不对吧!~ 看看解码部分代码吧! 如果有音频和视频的 要分开解码的吧! 两个都不一样的!只有一个肯定不行的!
雷霄骅 2013-09-21
  • 打赏
  • 举报
回复 1
avcodec_decode_video2返回的是处理的字节数,这个要去ffmpeg的头文件里面找。 意思: avcodec_decode_video2(AVCodecContext,解码后AVFrame,是否成功?,解码前AVPacket)
雷霄骅 2013-09-21
  • 打赏
  • 举报
回复 1
花屏很多是分辨率设置不对之类的问题。 我倒是有一个FFMPEG+SDL播放器,你可以试试 http://blog.csdn.net/leixiaohua1020/article/details/8652605
ashleycoder 2013-09-21
  • 打赏
  • 举报
回复
我知道,花屏的原因了,解码格式不对,PIX_FMT_YUV420P。 但现在有,另一个问题:播放几分钟后就运行不了。 MP4文件,有音频,视频,我只解视频显示。这有影响吗?
ashleycoder 2013-09-20
  • 打赏
  • 举报
回复
测试foreman.264, nDecodeResult=11369, nFrameFinished=0 nDecodeResult=1898, nFrameFinished=0 nDecodeResult=633, nFrameFinished=232 nDecodeResult=2341, nFrameFinished=232 我没百度到,avcodec_decode_video2返回什么?从大到小,递增? 参3,后面就一直固定是某值,是什么意思?
ashleycoder 2013-09-20
  • 打赏
  • 举报
回复
没有人吗?中秋节都放假了?

2,543

社区成员

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

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