Firefox和Chrome中MediaRecorder支持的所有MIME类型?

Hp9*_*p93 23 firefox google-chrome mime-types web-mediarecorder

我在哪里可以找到被支持的所有MIME类型的列表FirefoxChrome?到目前为止我见过的所有例子video/webm都只使用.

exa*_*red 30

我还没有看到任何类型的Firefox综合列表,但我已经设法找到一些东西(通过Google的网页更新部分的MediaRecorder API上的帖子)链接到这个测试集,似乎可以解释一些事情.

从本质上讲,它看起来像是(在撰写本文时)Chrome中视频/音频的已接受MIME类型:

  • 视频/ WEBM
  • 视频/ WEBM;编解码器= VP8
  • 视频/ WEBM;编解码器= VP9
  • 视频/ WEBM;编解码器= vp8.0
  • 视频/ WEBM;编解码器= vp9.0
  • 视频/ WEBM;编解码器= H264
  • 视频/ WEBM;编解码器= H264
  • 视频/ WEBM;编解码器= AVC1
  • 视频/ WEBM;编解码器= VP8,OPUS
  • 视频/ WEBM;编解码器= VP8,OPUS
  • 视频/ WEBM;编解码器= VP9,OPUS
  • 视频/ WEBM;编解码器= VP8,VP9,OPUS
  • 视频/ WEBM;编解码器= H264,OPUS
  • 视频/ WEBM;编解码器= H264,VP9,OPUS
  • 视频/ X-Matroska的;编解码器= AVC1

  • 音频/ WEBM

  • 音频/ WEBM;编解码器= OPUS

(编辑2019-02-10:更新为包括brianchirls的链接查找)

  • 真?没有`audio / wav`,所以没有数据丢失的录音吗?在需求期间有人严重懈怠... (2认同)
  • 源代码在这里:https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/modules/mediarecorder/media_recorder_handler.cc;l=170-174;drc=1aa1254f5b527b89b190837892d5928c8d0f7bfc (2认同)

Mir*_*ili 17

只需执行以下代码片段(基于@MillenniumFennec答案+ audio+ 删除重复项 + 一些其他改进 + 来自MDN的完整列表):

function getAllSupportedMimeTypes(...mediaTypes) {
  if (!mediaTypes.length) mediaTypes.push('video', 'audio')
  const CONTAINERS = ['webm', 'ogg', 'mp3', 'mp4', 'x-matroska', '3gpp', '3gpp2', '3gp2', 'quicktime', 'mpeg', 'aac', 'flac', 'x-flac', 'wave', 'wav', 'x-wav', 'x-pn-wav', 'not-supported']
  const CODECS = ['vp9', 'vp9.0', 'vp8', 'vp8.0', 'avc1', 'av1', 'h265', 'h.265', 'h264', 'h.264', 'opus', 'vorbis', 'pcm', 'aac', 'mpeg', 'mp4a', 'rtx', 'red', 'ulpfec', 'g722', 'pcmu', 'pcma', 'cn', 'telephone-event', 'not-supported']
  
  return [...new Set(
    CONTAINERS.flatMap(ext =>
        mediaTypes.flatMap(mediaType => [
          `${mediaType}/${ext}`,
        ]),
    ),
  ), ...new Set(
    CONTAINERS.flatMap(ext =>
      CODECS.flatMap(codec =>
        mediaTypes.flatMap(mediaType => [
          // NOTE: 'codecs:' will always be true (false positive)
          `${mediaType}/${ext};codecs=${codec}`,
        ]),
      ),
    ),
  ), ...new Set(
    CONTAINERS.flatMap(ext =>
      CODECS.flatMap(codec1 =>
      CODECS.flatMap(codec2 =>
        mediaTypes.flatMap(mediaType => [
          `${mediaType}/${ext};codecs="${codec1}, ${codec2}"`,
        ]),
      ),
      ),
    ),
  )].filter(variation => MediaRecorder.isTypeSupported(variation))
}

// To get all mime types, use: getAllSupportedMimeTypes()

console.log('Video mime types:')
console.log(getAllSupportedMimeTypes('video'))

console.log('Audio mime types:')
console.log(getAllSupportedMimeTypes('audio'))
Run Code Online (Sandbox Code Playgroud)


Fen*_*nec 15

我在 my 中创建了这个小函数utils.js以获得最佳支持的编解码器,支持多种可能的命名变体(例如:firefox支持video/webm;codecs:vp9但不支持video/webm;codecs=vp9

您可以VIDEO_CODECS按优先级对数组进行重新排序,因此您始终可以使用下一个最佳支持的编解码器。

function getSupportedMimeTypes() {
  const VIDEO_TYPES = [
    "webm", 
    "ogg",
    "mp4",
    "x-matroska"
  ];
  const VIDEO_CODECS = [
    "vp9",
    "vp9.0",
    "vp8",
    "vp8.0",
    "avc1",
    "av1",
    "h265",
    "h.265",
    "h264",
    "h.264",
    "opus",
  ];

  const supportedTypes = [];
  VIDEO_TYPES.forEach((videoType) => {
    const type = `video/${videoType}`;
    VIDEO_CODECS.forEach((codec) => {
        const variations = [
        `${type};codecs=${codec}`,
        `${type};codecs:${codec}`,
        `${type};codecs=${codec.toUpperCase()}`,
        `${type};codecs:${codec.toUpperCase()}`,
        `${type}`
      ]
      variations.forEach(variation => {
        if(MediaRecorder.isTypeSupported(variation)) 
            supportedTypes.push(variation);
      })
    });
  });
  return supportedTypes;
}

const supportedMimeTypes = getSupportedMimeTypes();
console.log('Best supported mime types by priority : ', supportedMimeTypes[0])
console.log('All supported mime types ordered by priority : ', supportedMimeTypes)
Run Code Online (Sandbox Code Playgroud)

  • 对于“video/webm;codecs:should-not-be-supported”也是如此,在检查支持时要小心。问题在于“:”而不是“=” (2认同)
  • 我很震惊,这是否符合 chrome 错误/问题的条件...更新了答案,仅检查“=”而不是“:”...感谢您的通知。 (2认同)

And*_*dyO 9

对于Firefox,可以在MediaRecorder.cpp使用中找到并确认接受的mimetypesMediaRecorder.isTypeSupported(...)

例:

21:31:27.189 MediaRecorder.isTypeSupported('video/webm;codecs=vp8')
21:31:27.135 true
21:31:41.598 MediaRecorder.isTypeSupported('video/webm;codecs=vp8.0')
21:31:41.544 true
21:32:10.477 MediaRecorder.isTypeSupported('video/webm;codecs=vp9')
21:32:10.431 false
21:31:50.534 MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')
21:31:50.479 true
21:31:59.198 MediaRecorder.isTypeSupported('audio/webm')
21:31:59.143 false
Run Code Online (Sandbox Code Playgroud)


Fab*_*ert 6

MediaRecorder 对常见音频编解码器的支持:

MediaRecorder.isTypeSupported('audio/webm;codecs=opus'); // true on chrome, true on firefox => SO OPUS IT IS!
MediaRecorder.isTypeSupported('audio/ogg;codecs=opus'); // false on chrome, true on firefox
MediaRecorder.isTypeSupported('audio/webm;codecs=vorbis'); // false on chrome, false on firefox
MediaRecorder.isTypeSupported('audio/ogg;codecs=vorbis'); // false on chrome, false on firefox
Run Code Online (Sandbox Code Playgroud)

Firefox 在第一个实现中使用 Vorbis 进行录音,但此后转移到 Opus。

所以 OPUS 它是!


这可能会引起兴趣:


归档时间:

查看次数:

10922 次

最近记录:

6 年 前