1 回答
TA贡献2037条经验 获得超6个赞
您无法从浏览器的MediaRecorder API获取 MP4 。我相信,您可以使用亚马逊的 Elastic Transcoder 将 webm 转换为 mp4。如果您还没有这样做,您还应该尝试将您的 webm / h.264 文件提供给 Rekognition。
正如您所意识到的,您的要求分为两部分,装箱和视频。我们需要一些词汇来详细回答您的问题。
拳击
首先是所谓的“装箱”或容器格式。webm是一种基于Matroska的格式,又基于可扩展二进制标记语言(EBML)。EBML 是为 Matroska 开发的。它类似于 XML,但占用更少的 RAM 和磁盘空间,因为它几乎没有那么冗长。 webm本身是一种开放且免版税的媒体文件标准。
另一种装箱格式是MPEG-4的。它几乎与 Apple 的mov电影文件格式相同,称为mp4格式。
WebRTC 有自己的适合数据报(而不是数据流)通信的装箱方案。超出你的问题范围。
编解码器
那些 webm 或 mp4 盒子里有什么?音频和视频数据。(它们还可以根据需要包含其他时间同步的数据流,如字幕。)
h.264也称为高级视频编码、MPEG-4 Part 10 或 AVC。
vp8,由谷歌收购的 On2 开发的开源和无专利编解码器
h.265也称为高效视频编码或 HEVC。
vp9,谷歌开发的最新开源和无专利编解码器。
后两个较新的编解码器需要更多的计算周期来压缩。而 h.265 仍然承受着巨大的专利负担。所以浏览器和其他通用软件通常使用前两个,h.265 和 vp8。
浏览器可以处理什么?
Chromium 浏览器(Google Chrome、Edge)和 Firefox 具有MediaRecorder API。他们可以生成包含音频和/或视频的 webm-boxed 数据流。它们不能生成 mp4 盒装数据流。
来自这些浏览器的数据流可以(截至 2020 年 10 月)包含 VP8 或 H.264 编码的视频。对于视频数据,可用的 MIME 类型是
video/webm; codecs="vp8"
(对于 vp8)x-matroska/webm; codecs="avc1.42E01E"
或video/webm; codecs="avc1.42E01E"
H.264。
正式地说,对于使用 H.264 的视频流,您应该使用x-matroska/video
而不是webm/video
作为 MIME 类型,即使这两种 MIME 类型都可以在浏览器中使用。webm 标准要求其视频编解码器为 vp8 或 vp9,因此video/webm; codecs="avc1.42E01E"
,从形式上讲,不符合该标准。
Javascript 模块
npm ebml可以将数据拆箱和装箱到 webm 流中。我已经在大规模生产中使用了它的拆箱功能。有用。
npm mp4-box-encoding可以将数据打包成 mp4 流。我没用过这个。
添加回答
举报