Im работает над небольшим iPhone-приложением, которое передает потоковое видео по сетевому соединению с использованием обычных сокетов. Видео находится в формате H.264
. Однако у меня возникают трудности с воспроизведением/декодированием данных. Я рассматривал возможность использования FFMPEG
, но лицензия делает его непригодным для проекта. Я изучал структуру яблок AVFoundation
(в частности, AVPlayer
), которая, похоже, способна обрабатывать содержимое h264, однако Im может только найти методы для запуска фильма с использованием URL-адреса - не путем проверки буфера памяти, переданного из сеть.
Я делал несколько тестов, чтобы это произошло в любом случае, используя следующие подходы:
- Воспроизведение фильма с помощью обычного
AVPlayer
. Каждый раз, когда данные принимаются в сети, их записывают в файл, используя fopen с append-mode. РесурсAVPlayer
затем перезагружается/воссоздается с обновленными данными. Кажется, есть два вопроса с этим подходом: во-первых, экран становится черным на короткое мгновение, в то время как первый актив выгружается и новый загружается. Во-вторых, я не знаю точно, где игра остановилась, поэтому я не знаю, как я найду подходящее место, чтобы начать играть с новым активом. - Второй подход заключается в том, чтобы записать данные в файл, как в первом подходе, но с той разницей, что данные загружаются во второй актив. Затем используется
AVQueuedPlayer
, когда второй актив вставлен/поставлен в очередь в проигрыватель, а затем вызывается, когда выполняется буферизация. Первый актив может быть выгружен без черного экрана. Однако, используя этот подход, он еще более хлопотно (чем первый подход), чтобы узнать, с чего начать играть новый актив.
Кто-нибудь сделал что-то подобное и заставило его работать? Есть ли способ сделать это с помощью AVFoundation
?