从未使用 mimeType 初始化的 MediaRecorder 获取 mimeType

Getting the mimeType from a MediaRecorder that wasn't initialized with a mimeType

我正在使用 MediaRecorder API 在页面上录制一些媒体。在我的 MediaRecorder 初始化中,我没有指定内容类型,因为我不需要任何特别的东西。浏览器可以自己选择。

var mediaRecorder = new MediaRecorder(stream);

但是,当需要保存录音时,我需要知道 blob 的 mimeType,这样我才能确定一个合理的文件扩展名。

MediaRecorder.mimeType属性是我想要的,但它是一个空字符串。它没有将 mimeType 设置为 MediaRecorder 的默认值,因此我似乎无法知道默认值 mimeType 是什么。

  mediaRecorder.onstop = function (e) {
    var mediaFileUrl = window.URL.createObjectURL(
      new Blob(chunks, {type: /* TODO: mime type here */})
    );

    $('<a>').attr({
      href: mediaFileUrl,
      download: 'Recording.?????' // TODO: Use mime type to figure out file name extension
    })[0].click();

    window.URL.revokeObjectURL(mediaFileUrl);
    chunks = [];
  }

对于音频,默认值似乎是 audio/ogg,而对于视频,默认值似乎是 video/ogg。在 Chrome 和带有 VLC 的 Firefox 中进行了测试。

演示https://codecanister.com/Project/d547eed9/9/result

目前无法开箱即用获取您需要的信息。

当前的 W3C 规范指出,如果 mimetype 未指定(由您):

the UA will use a platform-specific default format.

这就是你的情况,你没有指定任何 mimetype 和 UA,浏览器正在为你选择最适合的类型,并且没有关于恢复所选格式的方法的规范。

现在,唯一能让你接近它的方法是使用 isTypeSupported,它提供了一些媒体支持检测,不幸的是,随着 mime 类型、浏览器、平台、速率等的数量,它是不太适合编写一个函数,该函数将 return 选择的 mimetype 与可用组合的数量:video/webm; codecs="vp"video/mp4; codecs="avc1.4d4015"

最初的想法可能是向用户隐藏所有这些详细信息,但实际上,用户需要知道 mimetype 以保存生成的文件等特定情况是经常出现的事情。

An issue 目前打开了一个提议,提供一种方法来获取所有受支持的媒体类型按弱偏好排序,这意味着第一个媒体类型 returned 将是默认选择的如果未提供,则由 UA 提供。

问题是在 5 月创建的,但目前没有实际跟进。