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

Google chrome Firefox和Chrome中MediaRecorder支持的所有MIME类型?,google-chrome,firefox,mime-types,web-mediarecorder,Google Chrome,Firefox,Mime Types,Web Mediarecorder,在哪里可以找到Firefox或Chrome支持的所有MIME类型的列表?到目前为止,我所看到的所有示例都只使用了视频/webm。我还没有看到任何关于Firefox的全面列表,但我已经设法找到了一些东西(通过谷歌网站更新部分的链接),这些链接似乎可以帮助了解一些事情 基本上,在编写本文时,Chrome中视频/音频的MIME类型如下: 视频/网络管理 视频/网络媒体;编解码器=vp8 视频/网络媒体;编解码器=vp9 视频/网络媒体;编解码器=vp8.0 视频/网络媒体;编解码器=vp9.0 视频

在哪里可以找到
Firefox
Chrome
支持的所有MIME类型的列表?到目前为止,我所看到的所有示例都只使用了
视频/webm

我还没有看到任何关于Firefox的全面列表,但我已经设法找到了一些东西(通过谷歌网站更新部分的链接),这些链接似乎可以帮助了解一些事情

基本上,在编写本文时,Chrome中视频/音频的MIME类型如下:

  • 视频/网络管理
  • 视频/网络媒体;编解码器=vp8
  • 视频/网络媒体;编解码器=vp9
  • 视频/网络媒体;编解码器=vp8.0
  • 视频/网络媒体;编解码器=vp9.0
  • 视频/网络媒体;编解码器=h264
  • 视频/网络媒体;编解码器=H264
  • 视频/网络媒体;编解码器=avc1
  • 视频/网络媒体;编解码器=vp8,opus
  • 视频/网络媒体;编解码器=VP8,OPUS
  • 视频/网络媒体;编解码器=vp9,opus
  • 视频/网络媒体;编解码器=vp8、vp9、opus
  • 视频/网络媒体;编解码器=h264,opus
  • 视频/网络媒体;编解码器=h264,vp9,opus
  • 视频/x-matroska;编解码器=avc1

  • 音频/网络管理

  • 音频/网络管理;编解码器=作品

(编辑2019-02-10:更新以包含链接查找)

对于Firefox,可在中找到并使用

例如:

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

我今天找到了一个解决方案,其中包括使用

var canRecordVp9=MediaRecorder.isTypeSupported('video/webm;codecs=vp9')

区分Chrome(和Opera)和Firefox,然后

如果(canRecordVp9)
{
mediaRecorder=新的mediaRecorder(流,{mimeType:'video/webm;codecs=vp9'});
}否则
{
mediaRecorder=新的mediaRecorder(流);
}

相应地构造MediaRecorder

然后,在抓取水滴时:

如果(canRecordVp9)
{
blob=newblob([myArrayBuffer],{“type”:“video/webm;codecs=vp9”});
}否则
{
blob=新blob([myArrayBuffer],{“类型”:“video/webm”});
}

最后,使用FileReader获取blob作为dataUrl: `


然后,我将blobDataUrl保存为webm文件,用Chrome录制的视频在Firefox中可以正常工作,反之亦然。

对不起,无法添加评论;但我认为重要的是要注意: 通过ScriptProcessor或audioWorklet记录原始样本的实现存在缺陷,原因有很多,主要是因为它将您连接到输出节点,并且时钟“校正”发生在您看到数据之前

因此,缺少音频/wav或其他原始格式确实会导致死亡


但也许。。。。似乎是“音频/网络媒体”;chrome支持codecs=pcm。

MediaRecorder支持普通音频编解码器:

MediaRecorder.isTypeSupported('audio/webm;codecs=opus');//在chrome上是真的,在firefox上是真的=>这就是OPUS!
MediaRecorder.isTypeSupported('audio/ogg;codecs=opus');//chrome上为false,firefox上为true
MediaRecorder.isTypeSupported('audio/webm;codecs=vorbis');//chrome上为false,firefox上为false
MediaRecorder.isTypeSupported('audio/ogg;codecs=vorbis');//chrome上为false,firefox上为false
Firefox在第一次实现中使用Vorbis进行音频录制,但是 从那时起搬到了Opus

这就是作品


这可能证明有兴趣:

  • MediaRecorder目前正在Safari上进行试验(2020年8月)

我在我的
utils.js
中实现了这个小功能,以获得受支持的最佳编解码器,并支持多种可能的命名变体(例如:
firefox
support
video/webm;编解码器:vp9
但不是
video/webm;编解码器=vp9

您可以按优先级对
VIDEO\u编解码器
阵列进行重新排序,这样您就可以始终选择下一个受支持的最佳编解码器

函数getSupportedMimeTypes(){
常量视频类型=[
“webm”,
“ogg”,
“mp4”,
“x-matroska”
];
常量视频编解码器=[
“vp9”,
“vp9.0”,
“vp8”,
“vp8.0”,
“avc1”,
“av1”,
“h265”,
“h.265”,
“h264”,
“h.264”,
“作品”,
];
const-supportedTypes=[];
视频类型。forEach((视频类型)=>{
const type=`video/${videoType}`;
视频编解码器。forEach((编解码器)=>{
常数变化=[
`${type};编解码器=${codec}`,
`${type};编解码器:${codec}`,
`${type};编解码器=${codec.toUpperCase()}`,
`${type};编解码器:${codec.toUpperCase()}`,
`${type}`
]
variations.forEach(variations=>{
if(MediaRecorder.isTypeSupported(变体))
支持类型推送(变体);
})
});
});
返回支持的类型;
}
const supportedMimeTypes=getSupportedMimeTypes();
console.log('按优先级排列的受支持的最佳mime类型:',SupportedMIME类型[0])

log('所有受支持的mime类型按优先级排序:',SupportedMIME类型)
我也没有找到这个问题的答案。对于其他感兴趣的人,我打开了一个收集数据的窗口。基于GitHub问题的+1。看起来这些测试的代码已经移动了:真的吗?没有
音频/wav
所以没有数据丢失的记录?有人在需求期间严重松懈…@JohnWeisz你可以记录我相信,使用or可以在不丢失数据的情况下保存原始数据。(但是,您必须手动将生成的文件拼凑在一起,因此我认为这仍然是一个疏忽。)我列出了一个库列表,可以让您记录为其他格式(其中一些是无损的):源代码就在这里:哇,研究了几个小时,想找到一种用MediaRecorder录制未压缩音频的方法,除了官方记录的webm/opus之外,没有其他编解码器,更糟糕的是Chrome将比特率限制在128k。但你说得对,“音频/webm;编解码器=pcm”完全适用于Chrome!如果您通过Blob和createObjectURL将其导入文件,它会生成一个无损/未压缩的.mka文件(audio/x-matroska)。因此它看起来是一个奇怪的/命名错误的实现
var reader = new FileReader();
reader.onload = function(event)
{
    var blobDataUrl = event.target.result;
}
reader.readAsDataURL(blob);`