如何使用媒体源扩展 (MSE) 低延迟模式

Posted

技术标签:

【中文标题】如何使用媒体源扩展 (MSE) 低延迟模式【英文标题】:How to use Media Source Extension (MSE) low-latency mode 【发布时间】:2019-09-17 04:05:06 【问题描述】:

我读到 MSE 有这种low-latency 模式,该模式为解码提供零缓冲。不管这可能带来的不稳定性能如何,理论上它在用于实时流式传输时应该提供更低的延迟。有人知道触发此low-latency 模式的“技巧”吗?

参考:https://blog.parsecgaming.com/game-streaming-tech-in-the-browser-with-parsec-5b70d0f359bc

【问题讨论】:

【参考方案1】:

这不是一个完整的答案,因为我自己只是在学习。似乎 Chromium 正在使用 MP4 流中的提示来确定是否应使用低延迟模式。

在video_renderer_impl.cc:

bool ShouldUseLowDelayMode(DemuxerStream* stream) 
  return base::FeatureList::IsEnabled(kLowDelayVideoRenderingOnLiveStream) &&
         stream->liveness() == DemuxerStream::LIVENESS_LIVE;

然后在mp4_stream_parser.cc:

// In ISO/IEC 14496-12:2005(E), 8.30.2: ".. If an MP4 file is created in
// real-time, such as used in live streaming, it is not likely that the
// fragment_duration is known in advance and this (mehd) box may be
// omitted."

// We have an unknown duration (neither any mvex fragment_duration nor moov
// duration value indicated a known duration, above.)

// TODO(wolenetz): Investigate gating liveness detection on timeline_offset
// when it's populated. See http://crbug.com/312699
params.liveness = DemuxerStream::LIVENESS_LIVE;

因此,如果您可以生成没有持续时间的流,则将假定它是实时的并且将使用低延迟模式。

还有一些关于未来公开一种无需修改流即可触发低延迟模式的机制的讨论:https://github.com/w3c/media-source/issues/21

【讨论】:

【参考方案2】:

https://github.com/whatwg/html/issues/4638 是当前正在孵化的努力。它不是特定于 MSE 的。目前,随着孵化的进行,HTMLMediaElement.latencyHint 属性正在 Chromium 中进行测试。这个想法是,它将覆盖实现的“实时/低延迟”检测启发式的任何结果,从而为应用程序提供更多控制权。

【讨论】:

您好,感谢您的更新!很高兴看到来自可靠来源的信息。 :-)

以上是关于如何使用媒体源扩展 (MSE) 低延迟模式的主要内容,如果未能解决你的问题,请参考以下文章

使用媒体源扩展符合DOMException:无法加载,因为找不到支持的源

低延迟流媒体协议SRTWebRTCLL-HLSUDPTCPRTMP详解

当我向 MSE 缓冲区添加小块时,Chrome 停止播放视频

实体框架 - 如何缓存和共享只读对象

使用媒体源扩展逐帧解码

基于强化学习的低延迟视频传输,虎牙自研传输网络架构实践,面向流媒体的确定时延传输...