ffmpeg编码后视频速度不正确,质量也不好,
发布时间:2011-06-27 19:31:21 文章来源:www.iduyao.cn 采编人员:星星草
ffmpeg编码后视频速度不正确,质量也不好,求助,求助,求助,求助啊
对采集到得摄像头图像进行编码保存,发现得到的视频质量不好,而且速度不对。下面是关键代码。高手们看看,问:
1.编码器和AVPacket的pts设置对不对?
2.AVPacket的dts要设置吗?设为多少?
3.编码质量不好可不可以通过设置pStream->quality = m_nQuality调节?
下面是小弟做的:
首先,编码器类型是通过文件格式guess得到;
其次,下面是初始化AVStream编码器的函数:
AVStream *pStream = av_new_stream(pFormatContext, 0);
if( NULL == pStream )
return NULL;
AVCodecContext *pCodecContext = pStream->codec;
pCodecContext->codec_id = (CodecID)codec_id; //guess得到
pCodecContext->codec_type = CODEC_TYPE_VIDEO;
pCodecContext->bit_rate = (int)m_fBitRate; //固定设置为了1000000
pCodecContext->width = m_nWidth; //图像宽度:我这里是2048
pCodecContext->height = m_nHeight; //图像高度:我这里是1356
pCodecContext->time_base.den = 30; //这个不懂怎么设置,设为25或30以外的任何数值都
//会导致avcodec_open()调用失败,我就只好这么设置了
pCodecContext->time_base.num = 1; //以下设置都是参考的out_example.c
pCodecContext->gop_size = 12;
pCodecContext->pix_fmt = PIX_FMT_YUV420P;
if (pCodecContext->codec_id == CODEC_ID_MPEG2VIDEO)
pCodecContext->max_b_frames = 2;
if (pCodecContext->codec_id == CODEC_ID_MPEG1VIDEO)
pCodecContext->mb_decision=2;
if(!strcmp(pFormatContext->oformat->name, "mp4") || !strcmp(pFormatContext->oformat->name, "mov") ||
!strcmp(pFormatContext->oformat->name, "3gp"))
pCodecContext->flags |= CODEC_FLAG_GLOBAL_HEADER;
return pStream;
然后我进行了编码保存,其实也是参考out_example.c,只是速度老不对,自己改写了pts,dts实在不知道怎么填:
if (pFormatcontext->oformat->flags & AVFMT_RAWPICTURE) {
/* raw video case. The API will change slightly in the near
futur for that */
AVPacket pkt;
av_init_packet(&pkt);
pkt.flags |= PKT_FLAG_KEY;
pkt.stream_index= pVideoStream->index;
pkt.data= (uint8_t *)m_pYUVFrame;
pkt.size= sizeof(AVPicture);
ret = av_write_frame(pFormatcontext, &pkt);
}
else{
int out_size = avcodec_encode_video(pCodecContext, m_pOutBuf, m_nOutBufSize, m_pYUVFrame);
if (out_size > 0){
AVPacket pkt;
av_init_packet(&pkt);
//pkt.pts = av_rescale_q(pCodecContext->coded_frame->pts, pCodecContext->time_base,pVideoStream->time_base);//原来是这样的
pkt.pts = currTickCount - startTickCount;//我记录了每一帧来的时间和第一帧时间,将这个差值作为pts,
//不知道这样有什么问题吗?
if( pCodecContext->coded_frame->key_frame )
pkt.flags |= PKT_FLAG_KEY;
pkt.stream_index = pVideoStream->index;
pkt.data= m_pOutBuf;
pkt.size= out_size;
ret = av_write_frame(pFormatcontext, &pkt);
}else{
ret = 0;
}
}
------解决方案--------------------
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
DSHOW push
推模式,ConnectDirect 的,为什么我一直反回错误
下级级用的是HAALI的一个东西,用CMemStream拉模式的时候是可以连接的
...
-
ffmpeg编码后视频速度不正确,质量也不好,求助,求助,求助,求助啊
对采集到得摄像头图像进行编码保存,发现得到的视频质量不好,而且速度不...
-
请问怎么在live555中接收jpeg
请问,我现在想接收一个服务器发送的jpeg 不知道怎么用live555做一个客户端, 接收它并显示。
请问应...
-
XP SP3 YUV420 的fiter依赖 在线等答案……
链接时媒体类型为WMMEDIASUBTYPE_I420
有的XP可以播放出来
有的就不行,请问不能播放...
-
如何获取通过麦克风来获取当前说话的音量?
使用Wave系统API采集音频输入的数据,当数据缓存区满了后,收到消息取得数据后,如何根据这里...
-
RFC3984 有没有完整的中文版本呢?
搜了几个 都是一半英文一半中文的。哎 郁闷!
------解决方案--------------------
英文的凑合...
-
介绍一个学习directshow和com、atl技术的网站
有一个学习directshow和com、atl技术的网站,还可以下视频教程,共享给大家: http://www...
-
攻击帖:jrtplib、live555是个垃圾,刚开始搞流媒体就用这玩意就是找s
不解释~
来丢我砖头吧~~
我分太多了用不完~ 支持的散分~~~
...
-
50分,寻找《Visual C++音频/视频处理技术及工程实践》的随书光盘?
急于使用其中的几个例程。若哪位好心人能够提供,非常感谢!!我的QQ:52...
-
h264的高宽比怎么获取?
我看标准里面只有样点的高宽比啊。
还有,bit rate可以读出来吗?
------解决方案--------------------
是要...