我正在使用 VideoJs(使用 HTML5 播放器)播放来自 DASH 或 HLS 源的实时内容。
我想知道实际播放内容与实际直播内容相差多少。
我该怎么做?
有一个 player.currentTime()
和一个 player.liveTracker.seekableEnd()
,如 https://docs.videojs.com/tutorial-live.html 中所述。 ,但这些以相对单位给出,并且由于缓冲/其他网络传输延迟,不一定跟踪内容的时间线。
我如何计算播放器播放的内容与实际直播 HLS 或 DASH 直播源输出的内容之间的差距(以毫秒为单位)?
最佳答案
如果您只想测试帧在屏幕上显示的时间与实际直播事件发生的时间(即在现实世界中)之间的差异,通常的方法是拍摄直播时钟或'拍板'。
如果您正在测试端到端交付,可能涉及云处理、打包等,那么简单的方法是将时钟和流式视频放在一起。
- 用相机拍摄场记板
- 将视频流馈送到您的视频工作流中(编码器、打包器、CDN 等)
- 在播放器上播放直播
- 将场记板和播放器放在一起
- 查看、拍照或录像两个屏幕 - 时间之间的差异就是延迟
亚马逊在这里有一个很好的概述,包括这张有助于解释它的图片:
如果您希望能够单独在客户端上执行此操作,那么您需要在每个帧的元数据中添加一些准确的时间戳。我不知道标准设备这样做,但可能有一些可用 - H.264 中有诸如 SEI ( https://mpeg.chiariglione.org/tags/sei-messages ) 的机制来传达信息以“补充”视频,但同样,它们不常用于这样 AFAIK。
关于videojs html5 视频检索相对于实时内容的绝对时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60569748/