摄像头视频流畅性和延时问题的处理
来源:互联网 发布:北京招聘淘宝摄影 编辑:程序博客网 时间:2024/05/22 13:53
曾经做过一个关于摄像头视频方面的项目.在这个项目中遇到了两个麻烦的问题,特记录下来.
视频的流畅性问题:
首先说下我的结构:
主要分三部分: 上层:ffmpeg解码+UI渲染
中层:循环buffer缓存视频数据(单独的一个线程)
底层:视频数据接收(单独的一个线程)
对于这个流畅性问题,
首先优化了底层的usleep时间,有之前的40x1000 调整到5*1000. 使接收数据尽可能快些(当然这里有对I帧, P,B帧的处理).
然后优化了中间层的线程休眠时间.
调整后的代码如下:
while(1 == pVideo->recviceing) {
if (0 == pVideo->recviceing || NULL == pPopVideoBuf) {
//退出线程
break;
}
//int len 从循环buffer里面取数据
if(len <= 0){
usleep(1*1000);
continue;
}
//上报给上层
usleep(5*1000);
}
在开始的时候,我设置上报上层的休眠时间设置为300*1000; 这里为什么是5*1000,这要取决于上,中,下三层的时间关系,我是调试这个时间出来的.这里还的特别说明len <= 0 情况下usleep时间,我开始设置了1000*1000,结果视频每个一段时间就顿一下.最终原因是这个原因.设置1*1000才不卡顿.上层:更新了最新的ffmpeg并支持x264.
通过这几个时间设置和更新ffmpeg2.8.3后,视频就流畅起来了. 至于为什么低层是5*1000, 中层5*1000这个时间就不知道原因了.
延时处理:
其实还是ffmpeg的参数设置.正确设置如下:
在初始化函数中
pCodecCtx->time_base.den = 1;
pCodecCtx->time_base.num = 75;
//
av_opt_set(pCodecCtx->priv_data, "preset", "superfast", 0);
av_opt_set(pCodecCtx->priv_data, "tune", "zerolatency", 0); //
默认情况下 time_base.den = 1;time_base.num = 25,网上也是这样的.
但是无意间我调整到num=75就不延时了.一切都好起来了. 网上num参数都是25.但在这个项目中是要设置为60以上才不延时.这个特别记录下.
- 摄像头视频流畅性和延时问题的处理
- 模拟、SDI、AHD、网络摄像头的视频延时测量
- 实时视频的时间戳和视频流畅的关系
- android应用程序的流畅性问题和如何避免它们
- DirectShow改变参考时间解决视频不流畅的问题
- iOS 保证视频的清晰度和流畅度
- 摄像头和视频的读取和写入
- opencv:摄像头和视频的读取
- android 摄像头和视频
- Matlab摄像头视频基本处理
- Matlab摄像头视频基本处理
- OpenCV 2.2.0 摄像头捕获视频问题的解决
- OpenCV 2.2.0 摄像头捕获视频问题的解决
- DIR-665中Xtreme N450高性能路由器流畅的游戏和视频流
- 一个简单的摄像头视频浏览和捕获的程序
- 基于vfw的摄像头视频浏览和捕获的程序
- 一个简单的摄像头视频浏览和捕获的程序
- Android摄像头开发:实时摄像头视频预览帧的编码问题(二)
- 怎么用一个无线路由把另一个无线路由的信号放大
- Lua和C++交互详细总结(转)
- C++中的pair
- 区域填充算法
- 冒泡
- 摄像头视频流畅性和延时问题的处理
- boost库总结一
- Web:预加载与延时加载
- 在unity中绘制曲线和绘制三角面
- ORA-39181: Only partial table data may be exported due to fine grain access control on "OE"."PURCHAS
- 【COCOS2DX-LUA 脚本开发之十一】C/C++与Lua之间进行数据函数交互以及解决“PANIC: unprotected error in call to Lua API (转)
- Android-support-v7-RecyclerView的使用
- IOS NSTimer 定时器用法总结
- 了解Spring set依赖注入