我尝试将定时的元数据插入.mov或.mp4视频文件。
我确实在这里阅读过:

  • Live stream metadata reading in 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秒视频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提供解决方法后,我将在此处更新我的答案。

    10-08 07:27
    查看更多