0

问题

我正在Windows 10 中的 Chrome 83 上通过MediaRecorder记录 webm 块,并将这些块发送到其他计算机。这些块正在使用Media Source Extension(MSE)在另一个 Chrome 上播放。

sourceBuffer.appendBuffer(webmChunkData);

在 1 到 1.20 秒之间一切正常。但在那之后,音频/视频同步问题就开始了。目前音视频的差距很小,但随着时间的增加,差距也在拉大。

奇怪的是我们可以在不同的浏览器上看到不同的行为,让我通过

在此处输入图像描述

Chrome 的版本在几乎所有操作系统中都是 83+。

相机可以是问题吗?

我认为相机不是问题,因为我在同一台机器上有双操作系统 Fedora 和 Windows。并且 webm 块在 Fedora 上运行良好。

采样率可能是问题吗?

我对此表示怀疑。但是当我比较浏览器在播放时使用的采样率时。chrome://media-internals显示有和没有同步问题的48000

在此处输入图像描述

来自 Chrome 的警告消息

有同步问题的 Chrome 也显示以下消息chrome://media-internals

在此处输入图像描述

问题:

为什么在 Windows 10 的 Chrome 浏览器上进行录制和播放时会出现音频/视频同步问题?

如何消除此同步问题?

4

1 回答 1

0

我相信我有一个解决方法。该问题似乎特定于 Chrome + MediaRecorder + VP8,与 MSE 或平台无关。我在 Mac 12.2.1 上的 Chrome 98 上遇到了同样的问题。此外,如果你减少.start(timeslice)论点,问题会出现得更快、更严重。

但是...当我使用VP9时,问题并没有表现出来!

我正在使用这样的代码:

function supportedMimeTypes(): string[] {
  // From least desirable to most desirable
  return [
    // most compatible, but chrome creates bad chunks
    'video/webm;codecs=vp8,opus',
    // works in chrome, firefox falls back to vp8
    'video/webm;codecs=vp9,opus'
  ].filter(
    (m) => MediaRecorder.isTypeSupported(m)
  );
}

const mimeType = supportedMimeTypes().pop();

if (!mimeType) throw new Error("Could not find a supported mime-type");

const recorder = new MediaRecorder(stream, {
  // be sure to use a mimeType with a specific `codecs=` as otherwise
  // chrome completely ignores it and uses video/x-matroska!
  // https://stackoverflow.com/questions/64233494/mediarecorder-does-not-produce-a-valid-webm-file
  mimeType,
});

recorder.start(1000)

生成的 VP9 似乎可以在 Firefox 中播放,而记录在 Firefox 中的 VP8 在 Chrome 中也可以很好地播放。

于 2022-03-03T21:11:46.090 回答