Разработка библиотеки для аппаратно-ускоренных неподдерживаемых контейнеров на iOS (и Airplay)
Я пытаюсь собрать библиотеку с открытым исходным кодом, которая позволяет устройствам iOS воспроизводить файлы с неподдерживаемыми контейнерами, если поддерживаются форматы / кодеки дорожек. Например: видео файл Matroska (MKV) с видео дорожкой H264 и звуковой дорожкой AAC. Я делаю приложение, которое наверняка могло бы использовать эту функциональность, и держу пари, что есть много других, которые выиграют от этого. Любая помощь, которую вы можете оказать (комментируя здесь или - даже лучше - сотрудничая со мной), очень ценится. Вот где я сейчас нахожусь:
Я провел небольшое исследование, пытаясь выяснить, как такие игроки, как AVPlayerHD или Infuse, могут воспроизводить нестандартные контейнеры и при этом иметь аппаратное ускорение. Кажется, что они транскодируют небольшие фрагменты всего видеофайла и воспроизводят их последовательно.
Это хорошее решение. Но если вы хотите передать это видео на Apple TV, то все будет работать не так, как планировалось, поскольку видео на самом деле представляет собой набор небольших фрагментов, которые воспроизводятся в виде списка воспроизведения. Этот сайт содержит гораздо больше информации, но по своей сути потоковая передача на Apple TV по сути является постепенной загрузкой воспроизводимого файла MP4/MPV.
Я думаю, что своего рода потоковый прокси - это путь. Что касается игровой стороны, я исследовал AVSampleBufferDisplayLayer (более подробную информацию здесь) как способ воспроизведения видео-трека. Я еще не добрался до аудио. Вещи становятся интересными, когда вы думаете об аспектах AirPlay: имея "прокси-контейнер", мы можем сделать любой файл похожим на нужный контейнер без последствий транскодирования для размера файла.
Кажется, что GStreamer может быть хорошей отправной точкой для прокси. Мне нужно прочитать об этом; Я никогда не использовал это раньше. Похоже ли это на хороший подход для библиотеки, которую можно использовать для приложений App Store?
Спасибо!
2 ответа
Наконец-то у меня появилось дополнительное время для изучения GStreamer. Особенно эта статья о том, как она уже обновлена для использования аппаратного декодирования, предоставляемого iOS 8. Так что нет необходимости развивать это; GStreamer, кажется, ответ.
Спасибо!
Решение "chucked" больше не требуется в iOS 8. Вы должны просто настроить сеанс декодирования видео и передать NALU.