【问题标题】:Adaptive streaming - avoid having lots of key frames自适应流 - 避免有很多关键帧
【发布时间】:2016-02-27 00:27:57
【问题描述】:

上下文:

我正在构建一个 html5 视频播放器,该播放器具有基于媒体源扩展协议的自适应流媒体。我正在使用 mp4。

问题:

我有同一个视频的两个版本(比如说高品质和低品质),我希望能够以极短的延迟在不同版本之间切换。问题是在更改版本时,我需要有一个以关键帧开头的片段,并且视频中经常出现关键帧对带宽非常不利。

我正在寻找一种方法来发送在用户更改版本时以关键帧开头的片段,以及没有其他关键帧的片段(我知道 Chromium 中的 bug 有一个片段没有关键帧,但我们暂时忽略它,它即将被修复)

我想在一个有很多关键帧的视频中复制每个流,在另一个没有(显然第一帧除外)的视频中复制每个流,然后在切换视频版本时只使用带有关键帧的流。看起来像这样的东西:

// *
// * represents a key frame;    * represents a normal frame;    a fragment has 4 frames

           *
Stream A.1 **** **** **** **** **** **** ****  // version A with no key frames

           *    *    *    *    *    *    *
Stream A.2 **** **** **** **** **** **** ****  // version A with key frames
                                               // at the beginning of each fragment


           .
Stream B.1 .... .... .... .... .... .... ....

           .    .    .    .    .    .    .
Stream B.2 .... .... .... .... .... .... ....


           *         .
A -> B     **** **** .... .... .... .... ....
from       A.1  A.2  B.1  B.2  B.2  B.2  B.2

所以每一帧要么是关键帧,要么是可以成功解码其前身的普通帧。这会将通过网络发送的关键帧的数量限制在最低限度。

但是,嘿!从A1 切换到A2 被浏览器理解为更改视频流并且不起作用,因为A2 不是以关键帧开始的。

有没有人知道如何实现这样的结果?我目前正在考虑重写客户端中的 moov 和 moof 原子,以欺骗玩家认为除此之外的一切都是如此。但是我对它了解不多……

动机:

我正在开发 360 度播放器。 360 很难,因为有很大一部分视频是流式传输但未显示的,这意味着在带宽有限的情况下,显示的视频部分质量比人们习惯的要低得多。有一些工具和技术可以生成多个版本的视频,每个版本都以不同的视图方向为中心,然后播放器决定在运行时流式传输哪个版本。

由于用户可以随时更改视图方向,因此能够对此类更改做出快速反应非常重要,远比对字节速率适应更重要。而且由于这个东西的目标是节省带宽,所以从添加大量关键帧开始会很糟糕!

另外,由于 iOS Safari 不支持内联视频,这是 360 度播放器的关键,我可以依赖 iOS Safari 不支持的 MSE(说真的,那些家伙在做什么?)

【问题讨论】:

    标签: video-streaming html5-video media-source adaptive-bitrate


    【解决方案1】:

    每个片段都需要以关键帧开始,这样才能正确切换;为了使这项工作您的关键帧间隔应平均划分片段持续时间,例如正确的组合是:

    • 每 2 秒关键帧,片段长度 6 秒
    • 每 4 秒关键帧,片段长度 8 秒

    【讨论】:

    • 我希望片段非常短,这样我就可以在流之间切换而几乎没有延迟。除了用户经常切换流,我不喜欢,但延迟对我来说非常重要。因此,我正在寻找一种方法来执行片段长度 0.1s 之类的操作,且关键帧不多。我的尝试是避免所有片段都以关键帧开头,同时仍然能够切换流
    • 我不相信片段长度这么短是个好主意,你会增加很多(我的意思是很多)开销,你的流在很多情况下可能会变得非常不稳定,甚至因此,仅在发生切换时才使用具有关键帧的不同片段意味着更改播放器逻辑,但我不能否认您的建议非常有趣,您有什么想要分享的吗?我想看看
    • 还没有,我已经把webm上这个优秀的post改编成mp4,尝试了一些不成功的东西
    • 我添加了一段关于具体动机的段落,但是如果解决方案不影响磁盘空间以外的其他方面,那么能够解决这个问题对其他人来说是有益的。
    • 开销是指大量的小请求吗?我认为 AWS 或其他云提供商可以处理得很好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多