Можно ли заставить AVFoundation воспроизводить локальный файл .ts? - PullRequest
11 голосов
/ 13 апреля 2011

Очевидно, что 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, чтобы актив возвращал состояние дорожек ресурса (подготовка к воспроизведению)?

ТИА!

Ответы [ 2 ]

8 голосов
/ 28 февраля 2014

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

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

0 голосов
/ 06 апреля 2017

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

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

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

...