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上尝试过这一点。
发布于 2021-03-23 17:26:57
复制:
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().
true到isTypeSupported('video/webm;codecs=h264,opus'),但Chrome实际上不支持组合,也就是说,响应实际上是不正确的,并且违背了isTypeSupported('video/webm;codecs=h264,opus')的全部目的。MediaRecorder构造函数中传递的mimetype,而是返回video/x-matroska;codecs=avc1,opus。这样就不起作用了,因为<video>不会玩马特罗斯卡米米克。2个解决方案:
video/webm;codecs=h264,opus。文件内容仍将是"Matroska",但Chrome上的<video>将播放它。这是一个糟糕的解决方案,因为我们传递错误的mimetype,它不匹配的内容。其他软件--或者后来版本的Chrome --可能会破坏它。发布于 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)中。
https://stackoverflow.com/questions/64233494
复制相似问题