HLS:使用 com.apple.streaming.transportStreamTimestamp PTS 时间标记读取 PRIV ID3 标签

Posted

技术标签:

【中文标题】HLS:使用 com.apple.streaming.transportStreamTimestamp PTS 时间标记读取 PRIV ID3 标签【英文标题】:HLS: reading PRIV ID3 tag with com.apple.streaming.transportStreamTimestamp PTS time mark 【发布时间】:2018-11-29 15:55:01 【问题描述】:

我有一个 hls 直播,我可以返回 30 分钟(时移):

我想将 30 分钟窗口的一部分保存为本地 mp4 文件。

我解析了播放列表,下载了单个 ts 和 aac 片段并将它们放在一起(连接)。结果始终是异步的。

ts 段有时间戳,aac 段没有。 aac 段的时间戳可能在私有 id3 标记中,但我不知道如何读取它们。

这是一个很好的分析: https://github.com/flavioribeiro/nginx-audio-track-for-hls-module/issues/22

有谁知道我如何读取该时间戳(操作系统:Linux)?

【问题讨论】:

示例:wget https://sdn-global-live-streaming-packager-cache.3qsdn.com/6191/aac1811281007144892audio_1075.aac 我可以用十六进制读取它:exiftool -Private -b aac1811281007144892audio_1075.aac | hexdump -C 我正在尝试使用视频传输流 (ts) 进行此操作并收到警告。使用 -extractEmbedded 而不是 -Private。 【参考方案1】:
# get audio start from aac segment
# dump private id3 Tag
HEXDUMP=`exiftool -Private -b file.aac | od -t x8 --endian=big --address-radix=n | xargs echo -n`
# convert to decimal
DECIMAL=$((0x$HEXDUMP))
# it is an MPEG-2 Timestamp in 1/90000 Seconds, get it in seconds
AUDiosTART=`expr $DECIMAL / 90000`

【讨论】:

以上是关于HLS:使用 com.apple.streaming.transportStreamTimestamp PTS 时间标记读取 PRIV ID3 标签的主要内容,如果未能解决你的问题,请参考以下文章

使用 AVAssetDownloadTask 进行 HLS 缓存

何时为 Web 应用程序使用 HLS 或 DASH 格式

使用节点 JS 的 HLS 流式传输

ffmpeg-hls实现分析

ffmpeg hls_time选项不适用于h264_nvenc

如何使用 hls.js 和 plyr 配置多个视频实例