wmplayer.exe,realplayer.exe和vlc.exe等多媒体播放器用于计算帧率的常见或不寻常方式有哪些?我在一些书中读到,多媒体播放器通常依赖于windows api,如timeGetTime,QueryPerformanceCount,GeTickCount来计算帧率,但使用SetTimer来实现它是否实用?如果没有,他们用其他方式来计算帧率?我想为这些玩家编写通用播放速度控制器,但不确定wmplayer或realplayer是如何做到的。
p.s:我通过反复试验发现vlc.exe使用timeGetTime()。
答案 0 :(得分:1)
流媒体内容的播放器通常不需要计算帧速率,因为它是由输入信号定义的。视频输入通常是带时间戳的视频帧流,播放器的责任是准时呈现单个视频帧。
此等式中没有帧速率,播放器需要将单个帧时间与当前时钟时间相匹配。参考时钟可以是系统时间,也可以是硬件设备时钟。通常使用音频输出设备作为参考时钟或视频输出设备(如果它不是显示器)。
如果输入速率是可变的,或者您希望获得有效的演示帧速率,那么您不需要太高的准确度,因为您只需要在过去N秒内显示的帧的运行平均值({{1准确性对于这一点已经绰绰有余了,即使它的使用也没有问题,GetTickCount
也没有必要; timeGetTime
会给出最差的准确性,因为它没有被设计/预期保持完全实时长时间间隔。)