Воспроизведение фильма в формате h.264, передаваемого через сокет, на iOS с помощью AVFoundation.

Я работаю над небольшим приложением для iPhone, которое транслирует киноконтент по сетевому соединению с использованием обычных сокетов. Видео в формате H.264. Однако у меня возникают трудности с воспроизведением/декодированием данных. Я рассматривал возможность использования FFMPEG, но лицензия делает его непригодным для проекта. Я изучал фреймворк Apple AVFoundation(в частности, AVPlayer), который, кажется, может обрабатывать контент h264, однако я могу найти только методы для запуска фильма. с использованием URL-адреса, а не путем проверки буфера памяти, переданного из сети.

Я провел некоторые тесты, чтобы это произошло, используя следующие подходы:

  1. Воспроизведение фильма с помощью обычного AVPlayer. Каждый раз, когда данные поступают в сеть, они записываются в файл с помощью fopen с режимом добавления. Затем ресурс AVPlayerперезагружается/создается заново с обновленными данными. Кажется, что с этим подходом есть две проблемы: во-первых, экран на короткое время становится черным, пока первый ресурс выгружается, а новый загружается. Во-вторых, я не знаю точно, где остановилось воспроизведение, поэтому я не уверен, как узнать, с какого места начать воспроизведение нового актива.
  2. Второй подход заключается в записи данных в файл, как и в первом подходе, но с той разницей, что данные загружаются во второй актив. Затем используется AVQueuedPlayer, где второй ресурс вставляется/ставится в очередь в проигрывателе, а затем вызывается после выполнения буферизации. Затем первый актив можно выгрузить без черного экрана. Однако при таком подходе еще сложнее (чем при первом подходе) выяснить, с чего начать отыгрыш нового актива.

Кто-нибудь делал что-то подобное и заработало? Есть ли правильный способ сделать это, используя AVFoundation?

13
задан Daniel 6 August 2012 в 04:09
поделиться