关于视频播放的帧率控制问题

wuxinren0523 2015-03-01 05:40:49
我最近在用VC++做一个多窗口视频播放软件。为了让每个窗口能够独立播放,我使用了多线程。但播放时无法按照我期望的帧率来播放。
比如,视频文件的帧率是每秒播放30帧,即每一帧的播放间隔为33ms。假设取一帧画像并播放需要耗时10ms,那我用Sleep(23)试图每隔33ms播放一帧。但实际上,线程之间的切换本身需要时间(windows下一个cpu时间片为20ms),从其它线程切换回来的时间是不固定的。我怎么能精确的控制每隔33ms播放一帧呢。
而且,即使不考虑多线程,仅单窗口播放的情况下,也会有这样的问题。比如我的播放程序和百度影音,风暴影音等程序一起运行,我试图延时23ms。但假如在22ms的时候CPU时间片切换到百度影音上了,等再切换回来的时候已经过了42ms了。这时怎么办啊。
我试着将百度影音和风暴影音一起运行,发现它们各自都能很好的控制播放时间和帧率。它们是怎么控制的啊。跳帧播放?
求各位牛人帮忙解答。
...全文
730 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuxinren0523 2015-03-08
  • 打赏
  • 举报
回复
谢谢各位啦。结贴。
赵4老师 2015-03-06
  • 打赏
  • 举报
回复
windows系统计时精度≈15ms
shiter 2015-03-06
  • 打赏
  • 举报
回复
哪两个播放软件同时运行时候我觉得应该是两个进程啊? 楼上这个精确的办法,我觉得可行,我也听说sleep不精确
foxavideo 2015-03-06
  • 打赏
  • 举报
回复
使用windows的提供的高精度时间计算方法,千万记住不要使用sleep,因为sleep根本无法保证精确度。 LARGE_INTEGER StartingTime, EndingTime, ElapsedMicroseconds; LARGE_INTEGER Frequency; QueryPerformanceFrequency(&Frequency); QueryPerformanceCounter(&StartingTime); // Activity to be timed QueryPerformanceCounter(&EndingTime); ElapsedMicroseconds.QuadPart = EndingTime.QuadPart - StartingTime.QuadPart; 更多的请参看: http://www.itye.org/archives/1443
alexander_david 2015-03-06
  • 打赏
  • 举报
回复
不需要每帧都那么精确。并且windows是非实时操作系统,非要强调每帧都高精度播放,付出的代价也必然大。 可以看看相关的音视频播放同步算法。 如果是基于文件播放的,那么就看文件的同步算法好了。不需要看网络的,基于网络播放的同步算法更复杂。
Yofoo 2015-03-02
  • 打赏
  • 举报
回复
不要固定死sleep来计算时间 应该循环sleep(1), 在其中计算是否需要更新下一帧 比如: 播放开始的时间:t0, 下一个帧的计数fms, 间隔:fi t = gettickcount(); tn = t0 + fms * fi; 比较这两个时间t, tn
mayudong1 2015-03-01
  • 打赏
  • 举报
回复
第一秒播29帧,第二秒播31帧,看不出什么区别吧
KKcapture v2.1.8 免费VIP版,亲测 可用。 更新历史 KKcapture v2.1.8 【2011-12-13】 TOP↑ * 支持播放视频录制。 * 输出文件增加AVI格式。 * 个性水印支持图片格式(VIP功能)。 * 输出文件兼容会声会影、Sony Vegas、AE各类视频编辑器。 * 增加自动登录和找回密码功能。 * 增加KKcapture压缩暂停功能,并修改压缩进度显示不准确的问题。 * 解决Win7下区域边框显示等一些问题。 KKcapture v2.1.7 【2011-07-22】 TOP↑ * 增加文件压缩功能,用于压缩用KKcapture录制的视频文件。 * 增加个性化水印功能。 * 修改音频录制的一些问题。 * 修改创建帐号失败的问题。 * 修改热键设置冲突的问题。 * 修改部分界面肤色和其他一些问题。 KKcapture v2.1.6 【2011-05-12】 TOP↑ * 增加用户注册登录机制。 * 增加录制暂停功能。 * 生成文件改成MP4格式。 * 解决全屏录制和区域录制时鼠标双击无效的问题。 * 增加用户操作提示信息。 * 修改KKcapture界面背景色显示不正常的问题。 KKcapture v2.1.5 【2011-03-24】 TOP↑ * 新增全屏模式和区域模式,支持更多游戏和录制区域自由选择功能。 * 支持桌面录制和网络播放视频录制。 * 新增视频亮度调节功能。 * 解决Vista/Win7声音控制无效的问题。 * 解决部分游戏无法录制鼠标的问题。 * 解决OpenGL游戏帧率显示不正确的问题。 * 增加组合键和部分按键功能。 KKcapture v2.1.4 【2010-12-31】 TOP↑ * 支持OpenGL类型的游戏。 * 增加录制鼠标的功能。 * 解决部分游戏录制只有声音无视频问题。 * 解决录制的视频画面倾斜的问题。 * 取消截图水印。 * 解决部分游戏无法显示帧率FPS的问题。 * 解决部分游戏使用KKcapture或游戏退出异常的问题。 * 解决录音的一些问题。 KKcapture v2.1.3 【2010-11-11】 TOP↑ * 取消只能录30秒的时间限制。 * 优化编码算法,大大降低录制时对机器的影响。 * 解决部分游戏退出KKcapture后Crash的问题。 * 解决一个内存泄漏的问题。 * 解决选择‘混合录音’无效的问题。 * 增设‘我要提意见’和‘开启Direct键盘输入’功能。 * 屏蔽F1热键,软件增加logo图案。 KKcapture v2.1.2 【2010-10-08】 TOP↑ * 解决部分游戏按热键录制或截图不灵的问题。 * 解决部分游戏帧率显示字体模糊或颜色异常的问题。 * 解决关闭KKcapture时,一些进程自动关闭的问题。 * 优化压缩功能,缓解录制游戏时卡的问题。 * 解决部分Win7用户机器码显示为PPPPPPPPPPPP的问题。 * 修改采集帧率设置上限为30。 * 修改水印显示位置和内容。 KKcapture v2.1.1 【2010-09-20】 TOP↑ * 支持DirectX7的游戏截图和录制功能,包括窗口模式和全屏模式。 * 解决网络连接异常时KKcapture无法使用的问题。 * 修改显示的帧率字体。 * 解决了部分游戏帧率显示区域出现黑色背景框的问题。 * 解决部分游戏帧率时隐时现的问题。 * 解决有时录制无声音的问题。 * 解决部分游戏使用KKcapture会黑屏的问题。 KKcapture v2.1.0 【2010-08-24】 TOP↑ * 发布第一个免费版本,取消试用30天的限制。 * 增加截图功能。 * 支持OpenGL游戏录制。 * 解决了部分中文操作系统用户运行程序弹出网络连接异常对话框的问题。 * 解决了录制的高清视频画面卡的问题。 * 调整界面,增强用户友好性。 * 取消非注册用户每次录制10分钟的限制。 KKcapture v1.0.6 TOP↑ * 增加录音选择功能,解决无法用麦克风录制声音的问题。 * 解决没有安装声卡驱动或声音出问题时无法录制的问题。 * 增加程序运行后自动隐藏到任务栏的功能。 * 增加录制文件查看功能。 * 游戏帧率显示字体变细。 * 修改录制文件保存格式。 KKcapture v1.0.5 TOP↑ * 增加皮肤界面。 * 提升了录制声音的清晰度。 * 解决有的用户运行程序时提示缺少MFC71.dll的问题。 * 解决按Ctrl+Esc退出全屏后再进入游戏时无法录制的问题。 * 解决录制设置清晰度从“低”选项改成其他选项时,画面尺寸依然减半的问题。 * 解决录制的视频长或宽是奇数时无法录制的问题。 * 增加了最新版本发布通知。 * 增加用户磁盘空间不足提醒。 KKcapture v1.0.4 TOP↑ * 增加了视频解码插件,解决了有的用户无法播放视频问题。 * 解决使用d3d9的游戏使用软件时崩溃的问题 * 解决偶尔弹出对话框报网络问题,录制功能无法使用的问题。 KKcapture v1.0.3 TOP↑ * 解决部分游戏无法显示帧率问题。 * 解决弹出对话框报网络问题,录制功能无法使用的问题。 * 解决录制的声音不清晰的问题 KKcapture v1.0.2 TOP↑ * 添加游戏帧率显示功能 * 解决按录制热键无法录制的问题 KKcapture v1.0.1 TOP↑ * 解决录制时音视频不同步的问题 * 解决有的声卡录制没声音的问题

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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