Video streaming 自适应流媒体-避免出现大量关键帧 背景:

Video streaming 自适应流媒体-避免出现大量关键帧 背景:,video-streaming,html5-video,media-source,adaptive-bitrate,Video Streaming,Html5 Video,Media Source,Adaptive Bitrate,我正在构建一个基于媒体源扩展协议的具有自适应流媒体的html5视频播放器。我用的是mp4 问题: 我有两个版本的同一个视频(让我们说高质量和坏质量),我希望能够切换版本之间很少的延迟。问题是,在更改版本时,我需要一个以关键帧开始的片段,而在视频中经常出现关键帧对带宽非常不利 我正在寻找一种方法,当用户更改版本时,发送一个以关键帧开头的片段,以及一个没有其他关键帧的片段(我知道有一个关于有一个没有关键帧的片段的例子,但现在我们忽略它,它即将被修复) 我想在一个有很多关键帧的视频中复制每个流,在另一

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

问题: 我有两个版本的同一个视频(让我们说高质量和坏质量),我希望能够切换版本之间很少的延迟。问题是,在更改版本时,我需要一个以关键帧开始的片段,而在视频中经常出现关键帧对带宽非常不利

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

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

// *
// * 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(说真的,那些家伙在干什么?

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

  • 每2秒设置一次关键帧,片段长度为6秒
  • 每4秒设置一次关键帧,片段长度为8秒

我希望片段非常短,这样我就可以在流之间切换,而延迟很小。我不希望用户经常切换流,但是延迟对我来说非常重要。所以我在寻找一种方法来做一些类似片段长度0.1s的事情,不需要太多的关键帧。我的尝试是避免所有片段都以关键帧开始,同时仍然能够切换流。我不认为片段长度如此短是个好主意,您将增加很多(我是说很多)开销,并且您的流在许多情况下可能变得非常不稳定,即使如此,如果只在发生切换时使用不同的片段和关键帧,也意味着要更改播放器逻辑,但我不能否认你的建议非常有趣,你有什么想分享的吗?我想看一看还没有,我已经将这个优秀的webm应用于mp4,并尝试了一些不成功的东西。我已经添加了一段关于具体动机的内容,但是如果解决方案不影响磁盘空间以外的其他方面,那么能够解决这个问题将对其他人有利。通过开销,你是说很多很多小要求吗?我认为AWS或其他云服务提供商可以很好地处理这个问题