使用id3taggenerator和mediafilesegmenter将定时元数据插入HLS(HTTP Live Stream)

Yan*_*der 6 metadata id3 objective-c http-live-streaming ios

我尝试将定时元数据插入到.mov或.mp4视频文件中.我在这里读过它:

基本上,我的问题是,无论我尝试什么,我得到生成的.m3u8和一堆.ts文件按预期没有任何错误,但我觉得没有插入元数据.

让我详细解释一下我的所作所为.

首先,我生成一些id3标签如下:

id3taggenerator -o tag1.id3 -t "Test"
Run Code Online (Sandbox Code Playgroud)

然后我写了一个名为'macrofile.txt'的宏文本文件,其中包含:

5 id3 tag1.id3
Run Code Online (Sandbox Code Playgroud)

我确保文件以换行符结尾,并且每个字段由单个空格而不是制表符分隔.

然后我使用mediafilesegmenter创建带有.ts文件的m3u8,其命令也包括macrofile,如下所示:

mediafilesegmenter -index-file test.m3u8 -M macrofile.txt -no-floating-point-duration -iframe-index-file none test.mp4
Run Code Online (Sandbox Code Playgroud)

这将成功生成m3u8文件+一堆.ts文件(每10秒视频一个ts)

我上传了那些在我的网络服务器上,(显然我添加了正确的MIME类型等),从我的iOS应用程序中,我打开了流:

NSURL* url = [NSURL URLWithString:@"http://url.com/test.m3u8"];
player = [[MPMoviePlayerController alloc] initWithContentURL:url];
Run Code Online (Sandbox Code Playgroud)

我还要确保添加MPMoviePlayerTimedMetadataUpdatedNotification通知,如下所示:

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self
           selector:@selector(metadataUpdate:)
               name:MPMoviePlayerTimedMetadataUpdatedNotification
             object:nil];
Run Code Online (Sandbox Code Playgroud)

现在的问题是,永远不会触发MPMoviePlayerTimedMetadataUpdatedNotification.

如果我尝试使用Apple测试流(https://devimages.apple.com.edgekey.net/resources/http-streaming/examples/bipbop_16x9/bipbop_16x9_variant.m3u8),每5秒钟包含一次定时元数据 - >它完美地工作

所以这就是为什么我假设我生成的.ts文件不包含任何元数据或至少我在某处做错了但我检查了所有可能的东西,现在我没有想法.

希望有人可以帮助我.

谢谢!

Yan*_*der 5

在花了更多时间之后,我决定联系 Apple 开发人员技术支持。

确实是最新版的mediafilesegmenter tool 1.1(130110)的bug

这是访问错误报告的直接链接 https://bugreport.apple.com/cgi-bin/WebObjects/RadarWeb.woa/67/wo/quUWkJlEHk4L6S6U9geEZ0/21.83.28.0.13

BUG ID为13178898

一旦错误得到解决或 Apple 为我提供了解决方法,我将在此处更新我的答案。