Wpf 在本地计算机上测量视频播放延迟

Wpf 在本地计算机上测量视频播放延迟,wpf,video,lag,Wpf,Video,Lag,我们需要确定本地计算机上显示的视频的硬件和软件组件所施加的延迟 我所说的延迟是指解码帧、通过有线(HDMI)发送到监视器所花费的时间,以及监视器显示帧所花费的时间(即显示延迟) 我们正在测量用户对视频中视觉刺激的反应,因此需要知道播放视频时硬件/软件工具链造成的延迟。一天结束时,应尽量减少延误 我们目前正在使用.net WPF MediaElement播放视频 视频本身: 编解码器:H264-MPEG-4AVC(第10部分)(avc1) 决议:720*578 每秒25帧 解码格式:平面4:2:

我们需要确定本地计算机上显示的视频的硬件和软件组件所施加的延迟

我所说的延迟是指解码帧、通过有线(HDMI)发送到监视器所花费的时间,以及监视器显示帧所花费的时间(即显示延迟)

我们正在测量用户对视频中视觉刺激的反应,因此需要知道播放视频时硬件/软件工具链造成的延迟。一天结束时,应尽量减少延误

我们目前正在使用.net WPF MediaElement播放视频

视频本身:

  • 编解码器:H264-MPEG-4AVC(第10部分)(avc1)
  • 决议:720*578
  • 每秒25帧
  • 解码格式:平面4:2:0 YUV
我特别感兴趣的是:

  • 如何最大限度地减少延误
  • 受管理环境施加的惩罚
  • FFMEG或微软媒体基金会如何减少延迟
为什么知道玩家延迟如此重要?正如您指定的,视频速度为25fps。这意味着在下一帧进入帧缓冲区之前,解码器可以花费10到1/25秒的时间。你只需要确保你的电脑足够快,能在1/25秒内解码一帧,对吗?(1/2)一个非常精确的解决方案,我们在做实验的过程中一直在使用,就是使用外部硬件测量延迟:为自己准备一个合适的低延迟I/O卡,它可以输出延迟为亚毫秒的TTL脉冲。在生成视频的软件中,当您发出“绘制”命令时,将输出设置为高。假设此时屏幕上至少有两个像素在视频开始播放时从黑色变为非黑色,则在这些像素上放置一个光电二极管。最后测量脉冲和光电二极管之间的延迟。顺便说一句,如果你想准确地测量反应时间(例如,对于心理物理学来说,非常准确),同样的系统是必须的。使用光电二极管和硬件按键测量屏幕上出现的事物之间的时间。否则,你测得的反应时间将是错误的。。哦,“减少延迟”是相当广泛的,但一定要检查视频驱动程序设置,如预渲染、预分配所有解码组件、最终缓冲部分或内存中的整个文件。(2/2)硬件增加的任何延迟只需测量一次(因为它应该是恒定的)。例如,使用光电传感器的测试设置/夹具,可测量图形卡输出将黑屏变为白屏之间的时间差。另外,如果您想获得屏幕内容更改和用户反应之间的时间差的非常精确的测量值,请不要使用托管环境……因为它应该是恒定的,但在现实生活中不是。我已经看过太多了。典型示例:nvidia驱动程序更新、设置重置、oops、3帧额外延迟。或者偶尔会有打嗝,导致错过一帧,等等。为什么知道玩家延迟会如此重要?正如您指定的,视频速度为25fps。这意味着在下一帧进入帧缓冲区之前,解码器可以花费10到1/25秒的时间。你只需要确保你的电脑足够快,能在1/25秒内解码一帧,对吗?(1/2)一个非常精确的解决方案,我们在做实验的过程中一直在使用,就是使用外部硬件测量延迟:为自己准备一个合适的低延迟I/O卡,它可以输出延迟为亚毫秒的TTL脉冲。在生成视频的软件中,当您发出“绘制”命令时,将输出设置为高。假设此时屏幕上至少有两个像素在视频开始播放时从黑色变为非黑色,则在这些像素上放置一个光电二极管。最后测量脉冲和光电二极管之间的延迟。顺便说一句,如果你想准确地测量反应时间(例如,对于心理物理学来说,非常准确),同样的系统是必须的。使用光电二极管和硬件按键测量屏幕上出现的事物之间的时间。否则,你测得的反应时间将是错误的。。哦,“减少延迟”是相当广泛的,但一定要检查视频驱动程序设置,如预渲染、预分配所有解码组件、最终缓冲部分或内存中的整个文件。(2/2)硬件增加的任何延迟只需测量一次(因为它应该是恒定的)。例如,使用光电传感器的测试设置/夹具,可测量图形卡输出将黑屏变为白屏之间的时间差。另外,如果您想获得屏幕内容更改和用户反应之间的时间差的非常精确的测量值,请不要使用托管环境……因为它应该是恒定的,但在现实生活中不是。我已经看过太多了。典型示例:nvidia驱动程序更新、设置重置、oops、3帧额外延迟。或者偶尔会打嗝,导致错过一帧,等等。