我了解到MSE具有这种low-latency
模式,该模式可为解码提供零缓冲。无论这可能带来不稳定的性能,从理论上讲,在实时流中使用时,它应提供较低的延迟。是否有人知道触发此low-latency
模式的“技巧”?
参考:https://blog.parsecgaming.com/game-streaming-tech-in-the-browser-with-parsec-5b70d0f359bc
答案 0 :(得分:2)
这不是一个完整的答案,因为我只是自己学习。看来Chromium正在使用MP4流中的提示来确定是否应使用低延迟模式。
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
答案 1 :(得分:1)
https://github.com/whatwg/html/issues/4638是当前正在努力的成果。它不是特定于MSE的。目前,随着孵化的进行,HTMLMediaElement.latencyHint属性正在Chromium中进行测试。这个想法是,它将覆盖实现的“实时/低延迟”检测启发式的任何结果,从而为应用程序提供更多控制权。