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

时间:2013-02-01 12:29:34

标签: ios objective-c metadata http-live-streaming id3

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

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

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

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

id3taggenerator -o tag1.id3 -t "Test"

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

5 id3 tag1.id3

我确保文件以换行符结尾,每个字段由一个空格而不是标签分隔。

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

mediafilesegmenter -index-file test.m3u8 -M macrofile.txt -no-floating-point-duration -iframe-index-file none test.mp4

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

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

NSURL* url = [NSURL URLWithString:@"http://url.com/test.m3u8"];
player = [[MPMoviePlayerController alloc] initWithContentURL:url];

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

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

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

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

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

希望有人能帮助我。

谢谢!

2 个答案:

答案 0 :(得分:4)

在花了一点时间之后,我决定联系Apple开发者技术支持。

这确实是最新版mediafilesegmenter工具1.1(130110)中的一个错误

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

BUG ID 13178898

一旦错误得到解决或Apple给我解决方法,我就会在这里更新我的答案。

答案 1 :(得分:0)

这个wordpress博客对你遇到的问题给予了极大的帮助。 https://jmacmullin.wordpress.com/2010/11/03/adding-meta-data-to-video-in-ios/