首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MediaRecorder不生成有效的WebM文件。

MediaRecorder不生成有效的WebM文件。
EN

Stack Overflow用户
提问于 2020-10-06 20:39:10
回答 2查看 3.2K关注 0票数 1

MediaRecorder.isTypeSupported()返回‘true /webm’、‘视频/webm;编解码器=avc1 1’和‘true/webm;编解码器=vp9 9’。

但是,只有mimeType='video/ webm ;codecs=vp9‘才会产生有效的webm文件('video/webm;codecs=vp9,opus')。

将mimeType设置为“视频/ webm”和“视频/webm;codecs=avc1 1”将导致“video /x-matroska;codecs=avc1 1,opus”文件,这不是一个有效的webm视频。

这是一个MediaRecorder错误,Chrome,还是我遗漏了什么?

软件: Chrome 85,MacOS 10.15。我还没有在Windows或Linux上尝试过这一点。

EN

回答 2

Stack Overflow用户

发布于 2021-03-23 17:26:57

复制:

代码语言:javascript
复制
const wantMimeType = 'video/webm;codecs=h264,opus';
if (MediaRecorder.isTypeSupported(wantMimeType)) {
  let mediaRecorder = new MediaRecorder(stream, {
    mimeType: wantMimeType,
  });
  // ...drive the recorder
  mediaRecorder.onstop = (event) => {
    try {
      // returns 'video/x-matroska;codecs=avc1,opus' in Chrome,
      // and the binary file content also says Matroska instead of WebM
      let mimetype = mediaRecorder.mimeType;
      if (!mimeType.startsWith('video/webm')) {
        throw new Error(`We requested "${wantMimeType},
          but the browser gave us "${mediaRecorder.mimeType}"`);
      }
      let blob = new Blob(chunks, { type: mimeType });
      // ...convert to data: URL
      // ...play it in <video src="data:..."> // won't work, if Matroska
    } catch (ex) {
      alert(ex);
    }
  };
}

意见:

isTypeSupported().

  1. Chrome响应trueisTypeSupported('video/webm;codecs=h264,opus'),但Chrome实际上不支持组合,也就是说,响应实际上是不正确的,并且违背了isTypeSupported('video/webm;codecs=h264,opus')的全部目的。

  1. Chrome忽略我们在MediaRecorder构造函数中传递的mimetype,而是返回video/x-matroska;codecs=avc1,opus。这样就不起作用了,因为<video>不会玩马特罗斯卡米米克。

2个解决方案:

  • Hacky:录音后,只需将mimetype改为video/webm;codecs=h264,opus。文件内容仍将是"Matroska",但Chrome上的<video>将播放它。这是一个糟糕的解决方案,因为我们传递错误的mimetype,它不匹配的内容。其他软件--或者后来版本的Chrome --可能会破坏它。
  • 本身:不要使用H.264,而是使用VP9或VP8。Chrome支持两者,火狐支持VP8,而且它们工作正常。值得注意的是,它们是开放的,而H.264却充斥着软件专利。视硬件编码器的实现而定,VP8 8/9还可以提供更好的图像质量结果。
票数 1
EN

Stack Overflow用户

发布于 2020-10-06 23:21:27

However, only mimeType='video/webm;codecs=vp9' results in a valid webm file.

Is this a MediaRecorder bug, Chrome bug or am I missing something?

WebM是正确的a/v媒体容器,用于VP8和VP9视频编解码器。

AVC1视频编解码器属于MPEG容器(.mp4.m4v)。

此视频编解码器也可以包含在MKV媒体文件(Matroska .mkv)中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64233494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档