我尝试将定时的元数据插入.mov或.mp4视频文件。
我确实在这里阅读过:
基本上,我的问题是,无论尝试如何,我都会按预期获得生成的.m3u8和一堆.ts文件,而没有任何错误,但是我觉得未插入元数据。
让我详细解释我的工作。
首先,我生成一些id3标签,如下所示:
id3taggenerator -o tag1.id3 -t "Test"
然后,我编写了一个名为“macrofile.txt”的宏文本文件,其中包含:
5 id3 tag1.id3
我确保文件以换行符结尾,并且每个字段都由单个空格而不是制表符分隔。
然后,我使用mediafilesegmenter通过.ts文件创建m3u8,该命令还包含如下宏文件:
mediafilesegmenter -index-file test.m3u8 -M macrofile.txt -no-floating-point-duration -iframe-index-file none test.mp4
这将成功生成m3u8文件+一堆.ts文件(每10秒视频1 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文件不包含任何元数据,或者至少我在某处做错了事情,但是我检查了所有可能的方法,而现在我没有主意了。
最佳答案
在花了更多时间之后,我决定与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提供解决方法后,我将在此处更新我的答案。