Хобрук: Ваш путь к мастерству в программировании

Разработка библиотеки для неподдерживаемых контейнеров с аппаратным ускорением на iOS (и Airplay)

Я пытаюсь собрать библиотеку с открытым исходным кодом, которая позволяет устройствам iOS воспроизводить файлы с неподдерживаемыми контейнерами, если поддерживаются форматы/кодеки дорожек. например: видеофайл Matroska (MKV) с видеодорожкой H264 и звуковой дорожкой AAC. Я делаю приложение, которое, безусловно, может использовать эту функциональность, и я уверен, что есть много других, которые выиграют от этого. Любая помощь, которую вы можете оказать (комментируя здесь или, что еще лучше, сотрудничая со мной), очень ценится. Вот где я нахожусь до сих пор:

Я провел небольшое исследование, пытаясь выяснить, как такие проигрыватели, как AVPlayerHD или Infuse, могут воспроизводить нестандартные контейнеры и при этом иметь аппаратное ускорение. Похоже, что они перекодируют небольшие фрагменты всего видеофайла и вместо этого воспроизводят их последовательно.

Это хорошее решение. Но если вы хотите передать это видео на Apple TV, все пойдет не так, как планировалось, поскольку видео на самом деле представляет собой набор небольших фрагментов, воспроизводимых в виде списка воспроизведения. На этом сайте есть гораздо больше информации, но по своей сути потоковое вещание на Apple TV — это, по сути, прогрессивная загрузка воспроизводимый файл MP4/MPV.

Я думаю, что что-то вроде потокового прокси - это путь. Что касается игровой стороны, я исследовал AVSampleBufferDisplayLayer (дополнительная информация здесь) как способ воспроизведения видеодорожки. Я еще не добрался до аудио. Все становится интереснее, когда вы думаете о стороне AirPlay: имея «контейнерный прокси», мы можем сделать так, чтобы любой файл выглядел так, как будто он имеет правильный контейнер без последствий перекодирования размера файла.

Похоже, что GStreamer может быть хорошей отправной точкой для прокси. Мне нужно прочитать об этом; Я никогда не использовал его раньше. Подходит ли этот подход для библиотеки, которую можно использовать для приложений App Store?

Спасибо!

27.12.2014

Ответы:


1

Наконец-то появилось дополнительное время, чтобы просмотреть GStreamer. Особенно эта статья о том, как он уже обновлен до использовать аппаратное декодирование, предоставляемое iOS 8. Так что нет необходимости развивать это; GStreamer кажется ответом.

Спасибо!

28.12.2014

2

В iOS 8 больше нет необходимости в «выброшенном» решении. Вам нужно просто настроить сеанс декодирования видео и передать NALU.

https://developer.apple.com/videos/wwdc/2014/#513

27.12.2014
  • Да, я связал это в третьем абзаце моего исходного поста. Но это не решает проблему AirPlay. Похоже, GStreamer — это то, что нужно. 28.12.2014
  • Новые материалы

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..

    Расистский и сексистский робот, обученный в Интернете
    Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

    Управление состоянием в микрофронтендах
    Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..