获取MediaSource.isTypeSupported的mime类型

问题描述 投票:0回答:4

如何获取 Mime 类型我需要使用 ffprobe/ffmpeg 传递给

MediaSource.isTypeSupported

例如,在我的计算机上,返回

true
:

MediaSource.isTypeSupported('video/mp4; codecs="avc1.64000d,mp4a.40.2"')

虽然没有

MediaSource.isTypeSupported('video/mp4')

我不确定如何获取与给定视频的

avc1.64000d,mp4a.40.2
部分相对应的内容。 这里是这部分的详细列表。

ffprobe -show_streams -i video.mp4
返回许多有趣的信息,包括

codec_type=video
codec_time_base=1/40
codec_tag_string=avc1
codec_tag=0x31637661 

codec_type=audio
codec_time_base=1/48000
codec_tag_string=mp4a
codec_tag=0x6134706d

我不确定我应该选择

'video/mp4; codecs="avc1.0x31637661,mp4a.0x6134706d"'
,因为这会返回
false
,而且我不知道这是因为它不是例外参数还是因为视频确实不受支持。

html ffmpeg mime-types ffprobe media-source
4个回答
10
投票

使用Bento4,我可以通过

获取Mime类型
mp4info video.mp4 | grep Codec

这将返回类似

Codecs String: avc1.64001F
Codecs String: mp4a.40.2

然后做

MediaSource.isTypeSupported('video/mp4; codecs="avc1.64001F,mp4a.40.2"')

返回

true
:)

Bento4 专注于

mp4
所以我不确定它在其他格式上如何工作


3
投票

我意识到这是一个非常老的问题,但我最近自己也遇到了这个问题。我很难找到一种简单的方法来获取正确的 MIME 字符串,因此我编写了一个简单的 Node.js CLI 程序,使用优秀的 mp4box.js.

来完成此操作

你这样使用它:

$ npx get-video-mime your-video-file.mp4

[22:28:37] Getting MIME for 1 file(s)...
[22:28:38] MIME for your-video-file.mp4 detected as: video/mp4; codecs="hev1.1.6.L120.90,mp4a.6b"; profiles="isom,iso2,mp41"
[22:28:38] Finished processing all files.

希望对其他人有帮助。


2
投票

还有其他方法可以将

0x31637661
部分转换为
avc1.64001F
吗?

编辑:因为我还没有安装 Apple 的 XCode 并且无意 - 我发现 MP4Box 的 javascript 项目是查找正确格式的编解码器信息的最佳方法:

http://download.tsi.telecom-paristech.fr/gpac/mp4box.js/filereader.html


0
投票

如果您想要快速简单,请运行此

<input id=input type=file><br>
<script type=module>
      import MP4Box from 'https://cdn.jsdelivr.net/npm/mp4box/+esm';
      input.onchange    = async e=>{
            var reader    = input.files[0].stream().getReader();
            var offset    = 0;
            while(true){
                  var {done,value}    = await reader.read();
                  if(done)return;
                  value.buffer.fileStart    = offset;
                  offset                   += value.length;
                  mp4.appendBuffer(value.buffer);
            }//while
      }//onchange
      var mp4       = MP4Box.createFile();
      mp4.onReady   = info=>document.body.append(info.mime+' , '+MediaSource.isTypeSupported(info.mime));
</script>

^ 点赞 ^ 如果您喜欢并继续关注更多内容, 我正在准备一些有趣的东西

使用浏览器,它会从

<input type=file>
标签返回的 blob 中获取 ReadableStreamDefaultReader,是的,如果您不选择文件,并且不会通过允许多个选择来完成复杂的事情,那么它会出错

然后我使用最短的代码量读取该文件,您可以使用文件 api 更有效地完成它并指定块大小,但我只是想在这里保持简短

当 moov 框已被处理并且有关文件的元数据已知时,mp4box 的 onready 函数会自动调用,并且我们会弹出一个方便的 mimecodec 以与媒体源一起使用

无需下载,无需安装,您可以将 mime 复制并粘贴到任何您想要的位置,为页面添加书签或带走代码

现在我真的不太了解编解码器、容器和命名约定,所以请大家帮帮我,但是

MediaSource实际支持哪些编解码器而言,坚持使用 h.264 (mp4) 视频非常安全,通常会导致问题的是音频,chrome 基本上只支持 aac lc (低复杂性)或仅支持aac,MPEG-4 音频对象类型,我不确定其他浏览器,firefox 我认为甚至不支持,我现在很忙,但我会继续弹出并更新哪些浏览器支持哪些音频

如果你很挣扎,为了你的发际线而去掉音频并从那里向后/向前工作,而且没有音频的文件大小会小很多

© www.soinside.com 2019 - 2024. All rights reserved.