专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > C++

ffmpeg的H264编码有关问题,视频逐渐模糊

发布时间:2011-06-28 13:52:54 文章来源:www.iduyao.cn 采编人员:星星草
ffmpeg的H264编码问题,视频逐渐模糊
最近在看ffmpeg里的H264编码,然后试着去做了一下。但是目前发现一个问题,就是编码写入的.264文件,用播放器(VLC,暴风都试过)播放后,发现编码后的视频,开始很清晰,后面慢慢模糊,如下面三个图。
不知道为什么,可能是参数设置错误,希望大神给解决一下,谢谢!
下面是代码
memcpy(rgb_buff,frame->imageData,nDataLen);

avpicture_fill((AVPicture*)m_pRGBFrame, (uint8_t*)rgb_buff, PIX_FMT_RGB24, nWidth, nHeight);
  
//将YUV buffer 填充YUV Frame
avpicture_fill((AVPicture*)m_pYUVFrame, (uint8_t*)yuv_buff, PIX_FMT_YUV420P, nWidth, nHeight);
sws_scale(scxt,m_pRGBFrame->data,m_pRGBFrame->linesize,0,c->height,m_pYUVFrame->data,m_pYUVFrame->linesize);
  
int got_packet_ptr = 0;
av_init_packet(&avpkt);
avpkt.data = outbuf;
avpkt.size = outbuf_size;
u_size = avcodec_encode_video2(c, &avpkt, m_pYUVFrame, &got_packet_ptr);
if (u_size == 0)
{
fwrite(avpkt.data, 1, avpkt.size, f);
}else{
printf("errorn");
}


下面是图片




------解决方案--------------------
问下LZ,我使用libvlc里的wxwidgets的例子,播放完全没问题,但在播放的过程中退出程序就会直接僵死。
我用的代码就是这个网址里的
http://git.videolan.org/?p=vlc.git;a=blob;f=doc/libvlc/wx_player.cpp
我调试后发现,程序卡在135行,主窗口的析构函数中:libvlc_media_player_release(media_player);
我一开始以为必须先stop才能release,于是加上了
libvlc_media_player_stop(media_player);
不过结果又卡在stop这里了。
于是我估计是不是因为
 libvlc_media_player_set_hwnd(media_player, this->player_widget->GetHandle());
将media_player和player_widget(一个子窗口)的hwnd绑定了,然后运行到stop或release时,那个hwnd已经失效了。于是我将media_player继续提前到那个子窗口被销毁前,结果更诡异的事发生了,直接运行,还是卡死,但在release前加断点,虽然函数耗时比较长,但最终还是能成功推出程序。现在我的解决办法是干脆将release放到整个主窗口的生命周期外面,也就是wxApp的OnExit里面,这样确实能正常退出了。不过还是一直没搞明白卡死的原因,难道是wxwidget和libvlc都背着我偷偷多线程,结果死锁了?
------解决方案--------------------
解决了就好,本想给你找找原因的,
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: