Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将视频编解码器转换为vp9到mp4?_Javascript_Video_Getusermedia_Amazon Rekognition_Web Mediarecorder - Fatal编程技术网

Javascript 将视频编解码器转换为vp9到mp4?

Javascript 将视频编解码器转换为vp9到mp4?,javascript,video,getusermedia,amazon-rekognition,web-mediarecorder,Javascript,Video,Getusermedia,Amazon Rekognition,Web Mediarecorder,我正在用js中的getUserMedia函数录制视频,带有选项 let options = {mimeType: 'video/webm;codecs=vp9'}; // here mediaStreamObj is stream returning from the getUserMedia let mediaRecorder = new MediaRecorder(mediaStreamObj, options); 我希望编解码器是h264我也尝试过 视频/网络媒体;编解码器=h264 在

我正在用js中的getUserMedia函数录制视频,带有选项

let options = {mimeType: 'video/webm;codecs=vp9'};
// here mediaStreamObj is stream returning from the getUserMedia
let mediaRecorder = new MediaRecorder(mediaStreamObj, options);
我希望编解码器是h264我也尝试过 视频/网络媒体;编解码器=h264 在这里,它将mime类型设置为video/x-matroska

视频/mp4;编解码器=h264-不支持引发错误

我需要模拟类型为mp4和编解码器h264

我正在做视频分析(亚马逊识别)。我想在php中使用StartAbelDetection来检测视频中的标签,amazon只接受h264格式的视频

有没有人可以用js(preferrable)或php将视频mime类型转换为mp4,以便我可以将其与amazon Rekognion一起用于视频分析

预期mimetype:


您可以在此处检查mime类型

tl;dr您无法从浏览器中获取MP4。我相信,您可以使用亚马逊的弹性转码器将webm转换为mp4。如果您还没有这样做,您还应该尝试将您的webm/h.264文件提供给Rekognition

正如您所意识到的,您的需求分为两部分:拳击和视频。我们需要一些词汇来详细回答你的问题

拳击 首先是所谓的“装箱”或容器格式。是一种基于,依次基于(EBML)的格式。EBML是为Matroska开发的。它与XML类似,但占用更少的RAM和磁盘空间,因为它几乎没有XML那么详细。它本身是媒体文件的开放和免版税标准

另一种装箱格式是’s。它几乎与苹果的mov电影文件格式相同,被称为mp4格式

WebRTC有自己的适合于数据报(而不是数据流)通信的装箱方案。超出了你的问题范围

编解码器 那些webm或mp4盒子里装的是什么?音频和视频数据。(根据需要,它们还可以包含其他时间同步的数据流,如字幕。)

  • 也称为高级视频编码、MPEG-4第10部分或AVC
  • ,这是由On2开发的开源、无专利的编解码器,被谷歌收购
  • 也称为高效视频编码或HEVC
  • ,这是谷歌最新开发的开源、无专利的编解码器
后两种较新的编解码器需要更多的计算周期来压缩。h.265仍然承受着巨大的专利负担。因此浏览器和其他通用软件通常使用前两种,h.265和vp8

浏览器能处理什么? Chrome浏览器(GoogleChrome,Edge)和Firefox具有相同的功能。它们可以生成包含音频和/或视频的webm盒装数据流。它们无法生成mp4盒装数据流

来自这些浏览器的数据流(截至2020年10月)可以包含VP8或H.264编码视频。如果是视频数据,则

  • video/webm;codecs=“vp8”
    (适用于vp8)
  • x-matroska/webm;codecs=“avc1.42E01E”
    视频/webm;编解码器=“avc1.42E01E”
    用于H.264
正式地说,您应该使用
x-matroska/video
而不是
webm/video
作为使用H.264的视频流的MIME类型,即使这两种MIME类型在浏览器中都可以工作。webm标准要求其视频编解码器为vp8或vp9,因此
video/webm;codecs=“avc1.42E01E”
,从形式上讲,不符合该标准

Javascript模块
  • 可以将数据取消装箱并装箱到webm流中。我已经在大规模生产中使用了它的拆箱功能。它起作用了
  • 可以将数据放入mp4流中。我没用过这个

您可能有兴趣知道WebM容器基于mdn docs上Matroskalooking的配置文件<代码>视频/mp4;codecs=“avc1.4d002a”?对于@JaromandaX中的
后面应该放什么,有很好的解释。chrome(js)不支持它,您可以通过
MediaRecorder.isTypeSupported('video/mp4;codecs=“avc1.4d002a')检查它
它的值为false。我的主要目标是使用h264编解码器获取视频,以便将其用于aws识别。我花了太多时间试图通过反复试验来找出所有这些MIME类型的情况。MediaRecorder API确实需要
EnumeratedTypes()
call。我希望这封信能为其他人节省我所花的时间。