我尝试将定时元数据插入 .mov 或 .mp4 视频文件。我确实在这里读过它:
- Apple HTTP Live Streaming 中的实时流元数据读取
- http://jmacmullin.wordpress.com/2010/11/03/adding-meta-data-to-video-in-ios/
- https://developer.apple.com/streaming/
基本上,我的问题是无论我尝试什么,我都会按预期得到生成的 .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 秒视频一个 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。
如果我尝试使用 Apple 测试流(https://devimages.apple.com.edgekey.net/resources/http-streaming/examples/bipbop_16x9/bipbop_16x9_variant.m3u8),其中包含每 5 秒一次的定时元数据 -> 它可以完美运行
所以这就是为什么我假设我生成的 .ts 文件不包含任何元数据,或者至少我在某个地方做错了什么,但我检查了我能做的一切,现在我没有想法了。