Как использовать Media Low Extension (MSE) в режиме низкой задержки - PullRequest
2 голосов
/ 28 апреля 2019

Я читал о MSE имеет этот режим low-latency, где обеспечивает нулевую буферизацию для декодирования.Независимо от нестабильной производительности, которую это может принести, теоретически она должна обеспечивать меньшую задержку при использовании в потоковой передаче в реальном времени.Кто-нибудь знает, какие "хитрости" вызывают этот режим low-latency?

Ссылка: https://blog.parsecgaming.com/game-streaming-tech-in-the-browser-with-parsec-5b70d0f359bc

1 Ответ

2 голосов
/ 28 апреля 2019

Это не полный ответ, так как я просто изучаю это сам.Похоже, что 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

...