【问题标题】:Varying video duration in MPEG-DASH streamingMPEG-DASH 流中的不同视频时长
【发布时间】:2022-01-17 20:21:53
【问题描述】:

我有一个用例,我需要为视频提供高达 100 倍的播放速度。由于大多数现代浏览器不支持此功能并提供开箱即用的最大 4x,因此我使用速度为 10x、25x、50x 和 100x 的 FFmpeg 编码了多个视频文件。我想为这些文件生成一个 MPEG dash 流并使用 videojs 播放它。

这就是问题所在。据我所知,MPEG dash 的设计和开发是为了支持 ABR 流式传输,其基本假设是视频流长度不会改变(除了 MPD 流生成是动态的实时流式传输的情况)。然而,就我而言,唯一改变的是视频速度或 fps,而不是比特率。这样做的结果是,虽然视频播放得更快或更慢,但当从速度选择器切换流并随着视频继续缓冲而不断更新时,videojs 播放器中显示的持续时间是不正确的。搜索栏也会相应地不断更新,这对用户体验很不利,因为它看起来像一个小故障,更重要的是,用户无法在视频缓冲点之外搜索视频。

我想到的最简单的解决方案是我放弃 MPEG 破折号并直接在 videojs 播放器中切换视频源,但这不是无缝体验,原因有两个:

  1. 视频将从头开始加载,在较慢的网络上可能需要更长时间。
  2. 在加载视频之前,持续时间再次缺失

此外,MPEG dash 是全球流媒体的标准,如果我将来需要添加 DRM,无论如何我都需要 MPEG dash。

对此有什么可能的解决方案?

【问题讨论】:

    标签: video ffmpeg video.js mpeg-dash


    【解决方案1】:

    我认为您是在说您的多个再现使用不同的播放速度,正如您强调的那样,这不是客户所期望的,因此可能会引起混淆。

    您的用例很有趣——理论上 DASH 或 HLS 客户端可以处理这个问题,如果您添加一些自定义功能来识别不同的比特率,并且只要您可以在该段的速度之间切换边界。但是,它可能会退出一些自定义工作。

    正如你所说,寻找替代方案,拥有单独的视频将意味着启动延迟。

    您可以避免这种情况的一种方法是预先加载但隐藏视频。如果您这样做,您可能还需要在当前播放的视频和隐藏视频之间建立一些链接,以便在播放可见视频时加载缓冲区。

    在 DRM 方面,您可能不需要受到限制,因为主要 DRM 应用于 DASH 或 HLS 流中的视频轨道,并且您可以类似地在单独的 HLS 或 DASH 流或简单的流式 MP4 文件。

    【讨论】:

      猜你喜欢
      • 2017-11-19
      • 2018-06-28
      • 2016-05-16
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      • 2016-07-29
      • 2015-06-18
      • 1970-01-01
      相关资源
      最近更新 更多