【问题标题】:How does pause and resume a video in progress work?暂停和恢复正在进行的视频是如何工作的?
【发布时间】:2013-06-01 08:29:36
【问题描述】:

我正在寻找一种允许用户暂停视频并在不同设备上恢复播放的解决方案。 Plex Media Server 的“On Deck”功能在这方面做得相当不错。

On Deck 显示已开始但尚未结束的电影,因此 他们正在“进行中” http://wiki.plexapp.com/index.php/Frequently_Asked_Questions#What_are_the_On_Deck_and_Shelf_features_in_the_client.3F

在 Plex 中,当您选择“在甲板上”的视频时,您可以选择从上次中断的地方继续,或从头开始。像Pause For Later 这样的应用程序也可以实现这一点。

我目前正在使用 HLS 进行内容交付。对于 HLS 流,我拥有的一种可能的解决方案是存储客户端最后请求的媒体段的 URL。这意味着无论用户是否暂停、关闭或丢失连接,都可以在服务器端确定播放进度并保存。要恢复,应用程序可以生成一个 m3u8 播放列表,该列表从最后请求的片段 URL 开始。但是,这种解决方案存在许多问题:

  1. 您不能倒带/回溯。
  2. 视频从开头恢复 最后请求的片段,而不是您离开的确切点。
  3. 特定于 HLS。

那么,如何在 Plex 等应用程序中实现这一点?虽然我想不出任何具体的例子,但我想可以(并且可能已经)在下载的视频上保存播放进度?有哪些设计选项可用于暂停和恢复“进行中”的视频?

【问题讨论】:

    标签: video video-streaming http-live-streaming m3u8


    【解决方案1】:

    您需要将书签存储在带外。当他们点击暂停时,让客户在与其帐户相关的单独服务上记录一个书签。然后在从另一个客户端播放时,查找书签并从资产中的偏移量开始。

    这个问题并不是你可以在媒体传递层解决的问题,因为传递的内容与播放的内容不是 1:1 的匹配,只有媒体播放器知道这一点。所以它总是通过媒体播放器集成来完成。

    为了覆盖客户端失去连接的情况,客户端可以定期重新设置书签(例如每 10 秒)。然后,如果他们稍后从其他设备开始播放,则可以将最后设置的书签用作恢复位置。

    【讨论】:

    • 如果我理解正确,您是说在暂停时,客户端应该获取经过的时间并发送到服务器以获取用户对视频的个人书签?这适用于用户触发的暂停,但不适用于丢失连接的情况。也许该特定客户端可以在收到“连接丢失”异常时将书签存储在本地,但它不允许用户在不同的设备上恢复。另外为了清楚起见,“带外”和“交付的内容与播放的内容不是 1:1 匹配”是什么意思?
    • 更新了我的答案,包括带外连接丢失策略意味着不尝试在传递内容的相同通信机制中使用用户操作的信号。至于交付和播放不精确匹配,这是关于客户端能够在他们正在播放的地方提前几秒钟缓冲。如果他们下载到 t+60,但只玩到 t+50,他们不会乐意在 t+60 继续。
    猜你喜欢
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多