Mediafilesegmenter在HLS流中插入定时元数据ID3标记,但是在错误的时间点

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

我使用id3taggenerator和mediafilesegmenter在HLS(HTTP Live Stream)中插入定时元数据。我遵循了Jake's Blog的指示。

首先,我使用id3taggenerator创建id3tag:

id3taggenerator -o text.id3 -t "video" 

然后将标记添加到id3macro文件中:

0 id3 /path/to/file/text.id3

并对视频进行分段并使用mediafilesegmenter插入id3标签:

mediafilesegmenter -M /path/to/id3macro -I -B "my_video" video.mp4

但是,定时元数据会在错误的时间点插入。它不是在视频的开头(时间点0)出现,而是延迟10秒(给出或取0.05秒,有时更多,有时更少)。

我写了一个简单的iOS播放器应用程序,只要在视频中收到id3标签的通知就会记录。在播放视频大约10秒的ID3标签后,应用程序会收到通知。我还尝试了另一个id3macro文件,在视频中插入了多个定时元数据(大约0s,5s,7s),所有这些都显示出相同的近似延迟。我也将段的持续时间更改为5s,但每次都是相同的结果。

我使用的mediafilesegmenterBeta Version 1.1(140602)

任何人都可以确认这个问题,或者指出我在这里做错了什么?

干杯!

id3 m3u8 hls
1个回答
2
投票

我可以使用相同版本的mediafilesegmenter确认我遇到了同样的问题:

mediafilesegmenter:Beta版本1.1(140602)

此外,我可以看到ID3的数据包是在流中的正确时刻插入的。例如。如果我指定10秒延迟 - 我可以看到我的ID3插入到前10秒段的末尾。

但是,它会在10秒后出现在iOS通知中。

我可以看到以下可能的原因:

  • mediafilesegmenter在正确的位置插入元数据包,但由于某种原因,时间戳会延迟10秒。因此,客户端(例如iOS播放器)在10秒后显示标签。 Apple工具没有很好的文档记录,因此很难验证。
  • 也许iOS播放器及时收到元数据(因为我知道标签包含在以前的段文件中),但出于任何原因发出10秒延迟的通知。

我无法深入挖掘,因为我没有任何支持插播ID3标签的Flash /桌面HLS播放器。如果我有一个,我会检查桌面播放器是否会及时显示/处理ID3。然后,这将意味着问题是iOS,而不是mediafilesegmenter。

另一个有用的事情是 - 从段文件中提取带有ID3标签的MPEG-TS帧,并检查标题,寻找那里的任何奇怪的东西(例如错误的时间戳)。

更新:

我做了一些更多的研究,包括使用Apple工具创建的TS段的逆向工程,它似乎:

  • mediafilesegmenter从10秒开始PTS(演示时间戳),例如,ffmpeg从0开始。
  • mediafilesegmenter在TS文件中的正确位置添加ID3帧,但错误的PTS比元文件中指定的前10秒。

虽然第一个问题似乎并没有影响播放(据我所知,PTS持续发生更重要,而不是它开始的地方),第二个问题肯定是一个问题,也是你/我们遇到问题的原因。

因此,iOS播放器会及时收到ID3帧,但由于其PTS提前10秒 - 它会在发出通知之前等待10秒。据我现在所说 - 其他一些玩家只是忽略了这个ID3帧,因为它位于错误的位置。

作为一种解决方法,您可以在元文件中将所有ID3文件移动10秒,但显然,您将无法在开头放置任何内容。

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