Можно ли принудительно принудить AVFoundation к воспроизведению локального файла .ts?

#ios #macos #avfoundation #avplayer #http-live-streaming

#iOS #macos #avfoundation #avplayer #http-прямая трансляция

Вопрос:

Очевидно, что AVFoundation (и Quicktime X) могут демультировать и воспроизводить правильно закодированные .ts контейнеры, потому что .ts контейнеры поддерживают прямую трансляцию по протоколу HTTPS.

Помимо настройки локальной веб-службы для обслуживания .m3u8 и связанных .ts файлов, я бы действительно хотел иметь возможность либо: убедить AVURLAsset и / или URLAssetWithURL принять .m3u8 URI локального файла, как если бы это был HTTP URI, или, что еще лучше, иметь возможность использовать AVQueuePlayer для загрузки и воспроизведения последовательности .ts файлов, не переходя через прямые трансляции.

Причина, по которой я хочу это сделать, заключается в том, что мне нужно локально генерировать ресурсы фильма «на лету» несколько поэтапно — весь ресурс не будет доступен сразу, но будет сгенерирован со временем. Очевидно, что это подходит для AVQueuePlayer но по разным причинам фрагменты моих ресурсов упакованы в .ts контейнеры. Все это звучит так, как будто идеально подходит для «локальной» прямой трансляции.

Я подозреваю, что это URLAssetWithURL выполняет некоторую квалификацию передаваемой ему строки, а затем устанавливает некоторые свойства, сигнализирующие о том, что он просматривает источник потокового вещания, который, в свою очередь, указывает AVPlayer / AVQueuePlayer ожидать треки в .ts форме. Вероятно, он видит HTTP и решает, что это прямая трансляция.

Итак, мой вопрос таков: как бы «обмануть» AVFoundation, чтобы он обрабатывал локальный .m3u8 файл точно так же, как удаленный?

И дополнительный вопрос: смог ли кто-нибудь (и если да, то как) создать AVAsset из .ts файла, чтобы ресурс возвращал статус дорожек ресурса (подготовка к воспроизведению)?

ТИА!

Комментарии:

1. Точно такая же проблема… Я не нашел решения. Конечно, было бы неплохо, поскольку вы можете передать это на MPMoviePlayerController и иметь Airplay.

2. На самом деле, вы нашли способ воспроизводить файлы .ts, не помещая их в прямую трансляцию HTTP? AVAsset и MPMoviePlayerController выходят из строя, когда я предоставляю им локальные или сетевые файлы .ts. Однако я могу использовать local .m3u8s, даже .m3u8s, которые ссылаются на другие local .m3u8s.

3. Никакой радости — в итоге я подключил крошечный HTTP-сервер, и это сработало нормально, но не нашел способа создать ресурс непосредственно из файла .m3u8 или .ts. Мы также использовали другой подход для экспериментов и написали проприетарный (извините, не могу поделиться) демультипликатор, который уменьшает .ts до необработанных кадров формата h.264, которые мы затем декодируем и представляем. Это работает, но требует значительных ресурсов. Следующим исследованием будет переупаковка raw h.264 в формат .mp4 и посмотреть, насколько дорог этот шаг.

4. Я получил это, работая с локальными файлами без подключения к Интернету. Вы можете запустить HTTP-сервер на iPhone, а затем отправить файлы на iPhone через localhost. Я немного изменил проект HTTP-сервера iPhone на cocoawithlove.com/2009/07 / … для обслуживания файлов ts и списка воспроизведения.

5. @TomBrito TIA расширяется до Заранее спасибо.

Ответ №1:

Эта проблема раздражала нас тоже долгое время. Мы, наконец, решили написать инструмент для преобразования списка ts в файл mp4. Он заключается в использовании TSDemux для демультирования и объединения видео / аудио, а затем генерации файла mp4 с помощью GPAC.

Это действительно отвечает на ваш вопрос, но это может быть способом сделать то, что вы хотите сделать. Этот инструмент находится на Github, не стесняйтесь попробовать: https://github.com/Keemotion/TS2MP4

Комментарии:

1. Я хочу использовать библиотеку, которую вы написали, но в выходном файле mp4 нет звука. Существует проблема с открытым github ( github.com/Keemotion/TS2MP4/issues/6 ), в котором описывается проблема. Не хотите ли взглянуть на это? Очень признателен.

2. Нет, мы это еще не исправили и пока не планируем над этим работать. Не стесняйтесь поработать над этим и отправить запрос на извлечение.

3. Работает ли эта библиотека по-прежнему должным образом, я клонировал репозиторий, и даже podfile нуждается в обновлении, чтобы иметь надлежащее рабочее пространство? Даже я получаю несколько ошибок файла, которых не существует, например «#include<gpac / download.h»

4. Это было в 2014 году, то есть 6 лет назад. Эта библиотека больше не поддерживается.

Ответ №2:

На самом деле вы можете создавать AVURLAssets непосредственно из базовых ts-файлов и воспроизводить их напрямую, очень похоже на то, как вы воспроизводили бы mov или mp4-файл.

Для каждого ts-файла требуются некоторые накладные расходы, поэтому лучше всего просто объединить файлы в один большой ts-файл (на основе содержимого вашего m3u8) и воспроизвести этот большой файл.

Есть пара ошибок: AVCompositions, созданные с использованием AVAssets на основе ts-файлов, требуют много памяти, поэтому избегайте AVCompositions, кроме небольших файлов. Вы не можете использовать AVAssets на основе ts-файла в эталонном фильме.

Комментарии:

1. Мои ts-файлы hevc / ac3 AVURLAssets не воспроизводятся. Я не могу обернуть их в, AVCompositions поскольку у них нет tracks . Возможно, ему не нравится ac3.

2. Это не работает, протестировано с файлом h264 aac ts на iOS 13. Ошибка: «Не удается открыть» userInfo={NSLocalizedFailureReason = Этот формат мультимедиа не поддерживается. …