我正在创建一个主 m3u8 文件以允许两个流视频的自适应流。两者都有可读的编解码器名称 MPEG-4 AVC (part 10) (avc1)
如何将其转换为应出现在我的主 m3u8 播放列表文件中的 CODECS 值,如本例所示:
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1755600,CODECS="avc1.42001f,mp4a.40.2",RESOLUTION=354x240
如何获取要替换的值
avc1.42001f,mp4a.40.2
Apple 的规范说“有效格式标识符是 RFC 6381 [RFC6381] 定义的 ISO 文件格式名称空间中的标识符”,但我不知道如何阅读 RFC 6381 文档。
每个编解码器字符串都是特定于编解码器的。对于音频,
mp4a
表示其 mpeg 音频 40
表示其 mpeg 4.0 (我认为),最后一个整数是“音频对象类型”。 AAC-LC 为 2。完整列表可在此处找到。 https://wiki.multimedia.cx/index.php/MPEG-4_Audio#Audio_Object_Types
对于视频,在您的示例中,视频编解码器是 h.264,也称为“高级视频编解码器”,又名
avc1
。十六进制字符串是 3 个字节,表示编解码器配置文件、标志和级别。这些可以在 SPS 的前 3 个字节中找到。
其他编解码器不同。
您可以查阅ffmpeg代码https://git.ffmpeg.org/gitweb/ffmpeg.git/blob/HEAD:/libavformat/hlsenc.c,搜索'write_codec_attr'(但不幸的是它不在任何公共接口中)