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 缓存