问题是 Chrome 是(可能对录制进行编码,h246
尽管您使用的库要求它将其编码为vp8
. 您可以在库中看到专门检查vp8
此行中的支持:
反应多媒体捕获,第 101 行
let types = ['video/webm;codecs=vp8', 'video/webm', ''];
该库还要求用户代理video/webm
在此行中进行编码:
反应多媒体捕获,第 177 行
let blob = new Blob(this.mediaChunk, { type: 'video/webm' });
但是,用户代理似乎可以在创建Blob
.
我创建了一个玩具项目来模仿图书馆正在做什么,并试图在创建Blob
似乎没有效果时指定编解码器。以下是ffprobe
每个用户代理的每个保存文件的输出:
铬合金
Input #0, matroska,webm, from 'recording.chrome.webm':
Metadata:
encoder : Chrome
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0:0(eng): Audio: opus, 48000 Hz, mono, fltp (default)
Stream #0:1(eng): Video: h264 (Baseline), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 16.67 fps, 16.67 tbr, 1k tbn, 2k tbc (default)
火狐
Input #0, matroska,webm, from 'recording.firefox.webm':
Metadata:
encoder : QTmuxingAppLibWebM-0.0.1
Duration: N/A, start: -0.001000, bitrate: N/A
Stream #0:0(eng): Video: vp8, yuv420p(progressive), 1280x720, SAR 1:1 DAR 16:9, 30 fps, 30 tbr, 1k tbn, 1k tbc (default)
Stream #0:1(eng): Audio: opus, 48000 Hz, mono, fltp (default)
考虑到这一点,您最好的做法是不要依赖浏览器将录音编码为所有浏览器都可以播放的格式。您可以将您的视频重新编码为更广泛的用户代理可以使用的格式,或者让您的用户将他们的视频上传到您的服务器,在那里您可以为他们重新编码,然后使用<source>
标签有条件地提供内容。
您还应该阅读有关支持的文件类型的 MDN 文章:HTML 音频和视频的媒体格式。