我(或有可能)将AVC编解码器配置文件和级别转换为MIME编解码器定义吗?

问题描述 投票:1回答:1

在我的用例中,我必须在HTML5videosource的MIME类型中提供编解码器规范。但是,即使type="video/mp4; codecs=avc1"对于Firefox也不够详细。 Firefox需要额外的细节,例如type="video/mp4; codecs=avc1.64001E"。我的问题是我不知道从何处获得此64001E部分。

整个标识发生在服务器端。到目前为止,我一直在使用ffprobe,并且可以为我提供JSON格式的输出,就像这样:

ffprobe -select_streams v:0 -v info -of json -show_entries stream=codec_name,level,profile,width,height -i 1CE89B23-F9BD-43B9-805B-C49ACA9E5FFB_xxxxxxx.mp4 
    "streams": [
        {
            "codec_name": "h264",
            "profile": "High",
            "width": 1080,
            "height": 1920,
            "level": 50
        }
    ]
}

我可以获得配置文件和级别,但没有类似64001E的东西。在我的本地环境中,我也有mediainfo

mediainfo 8038B652-106B-4FBB-BAD6-AF7E32913FDE_xxxxxxx.mp4 
General
Complete name                            : 8038B652-106B-4FBB-BAD6-AF7E32913FDE_xxxxxxx.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom (isom/iso2/avc1/mp41)
File size                                : 1.18 MiB
Duration                                 : 6 s 634 ms
Overall bit rate                         : 1 496 kb/s
Writing application                      : Lavf57.83.100

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : High@L3
Format settings                          : CABAC / 5 Ref Frames
Format settings, CABAC                   : Yes
Format settings, Reference frames        : 5 frames
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 6 s 634 ms
Bit rate                                 : 1 396 kb/s
Width                                    : 360 pixels
Height                                   : 480 pixels
Display aspect ratio                     : 0.750
Frame rate mode                          : Constant
Frame rate                               : 30.000 FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.269
Stream size                              : 1.10 MiB (93%)
Writing library                          : x264 core 152 r2854 e9a5903
Encoding settings                        : cabac=1 / ref=5 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=8 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=2 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=15 / lookahead_threads=2 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=3 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=50 / rc=crf / mbtree=1 / crf=17.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00
Codec configuration box                  : avcC

Audio
ID                                       : 2
Format                                   : AAC LC
Format/Info                              : Advanced Audio Codec Low Complexity
Codec ID                                 : mp4a-40-2
Duration                                 : 6 s 632 ms
Duration_LastFrame                       : -9 ms
Bit rate mode                            : Constant
Bit rate                                 : 90.4 kb/s
Channel(s)                               : 1 channel
Channel layout                           : C
Sampling rate                            : 44.1 kHz
Frame rate                               : 43.066 FPS (1024 SPF)
Compression mode                         : Lossy
Stream size                              : 73.2 KiB (6%)
Default                                  : Yes
Alternate group                          : 1

我们在这里看到的是AAC部分具有更长的编解码器ID mp4a-40-2,但是视频流仍然只是avc1

我正在查看列表https://tools.woolyss.com/html5-canplaytype-tester/https://wiki.whatwg.org/wiki/Video_type_parameters,我认为也许存在一种将编解码器配置文件+级别转换为MIME类型编解码器规范所具有的代码的编程方式。


https://developer.mozilla.org/en-US/docs/Web/Media/Formats/codecs_parameter中,我看到"avc1.4d002a"表示Main Profile, Level 4.2。在查看我之前链接的列表时,我发现可以将6个十六进制数字分解为两个一组。最后两个是级别。在此最新示例中,“级别”为4.2,我们只需要删除点=>,它将变为42,即2a十六进制。其他4个十六进制数字与配置文件相关,如Main,High等,然后是Progressive,但我还没有找到定义,我想知道ffprobe是否能够输出High 4:2:2 Intra Level或[C0 ]。我们将会看到。


High Progressive Level有一些示例,但是我跟踪了链接,但仍然看不到任何确定的列表或任何内容。


ITU-T H.264规范附件A列出了14个配置文件。在这些列表中,提到了https://tools.ietf.org/html/rfc6381#page-12,它似乎是前两个十六进制数字的十进制,例如profile_idcHigh是100十进制,即64十六进制。现在我们只需要找出中间的两个十六进制数字即可。最好将这些内容整理成合理的简明const常量数组,然后将GitHub repo源文件打包。

html5-video mp4 codec ffprobe mediainfo
1个回答
0
投票

例如, profile_idc(“ PPCCLL是六个六进制数字,指定配置文件编号(PP),约束设置标志(CC)和级别(LL)”)。如果找不到适合您需求的工具,我们可以扩展例如MediaInfo为此,Mozilla link。注意:列表中指示的CC是预期的标志,而不是文件中真正的标志,它在99.99%的时间内应该可以,但是您不能确保它是真实的内容。 MediaInfo在内部读取标志,但暂时不导出它们。

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