#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 = Этот формат мультимедиа не поддерживается. …