Я пытаюсь вставить синхронизированные метаданные в видеофайл .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 для создания m3u8 с файлами .ts с помощью команды, которая также включает макрофайл, как показано ниже:
mediafilesegmenter -index-file test.m3u8 -M macrofile.txt -no-floating-point-duration -iframe-index-file none test.mp4
Это успешно сгенерирует файл m3u8 + кучу файлов .ts (один ts за 10 секунд видео)
Я загружаю их на свой веб-сервер (очевидно, я добавил правильные типы 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 не содержат никаких метаданных или, по крайней мере, я где-то делаю что-то не так, но я проверил все, что мог, и теперь у меня нет идей.