Arhn - архитектура программирования

Как мы можем получить видеопоток в кодировке H.264 с камеры iPhone?

Я использую следующее, чтобы получить буфер образца видео:

- (void) writeSampleBufferStream:(CMSampleBufferRef)sampleBuffer ofType:(NSString *)mediaType

Теперь мой вопрос заключается в том, как я могу получить NSData в кодировке h.264 сверху sampleBuffer. Пожалуйста, предложите.

10.06.2013

Ответы:


1

Обновление за 2017 год:

Теперь вы можете выполнять потоковую передачу видео и аудио с помощью VideoToolbox API. Прочтите документацию здесь: VTCompressionSession

Исходный ответ (от 2013 г.):

Кратко: вы не можете, буфер сэмплов, который вы получаете, несжатый.

Методы аппаратного ускорения сжатия h264:

Как вы можете видеть, запись в файл не работает, запись в канал не работает, поскольку кодировщик обновляет информацию заголовка после того, как кадр или GOP были полностью записаны. Поэтому вам лучше не трогать файл, пока кодировщик пишет в него, поскольку он случайным образом перезаписывает информацию заголовка. Без этой информации заголовка видеофайл не будет воспроизводиться (он обновляет поле размера, поэтому в первом написанном заголовке указано, что файл имеет размер 0 байт). Прямая запись в область памяти в настоящее время не поддерживается. Но вы можете открыть закодированный видеофайл и демультиплексировать поток, чтобы получить данные h264 (конечно, после кодировщик закрыл файл)

10.06.2013

2

Вы можете получать необработанные видеоизображения только в цветовых форматах BGRA или YUV от AVFoundation. Однако, когда вы записываете эти кадры в mp4 через AVAssetWriter, они будут закодированы с использованием кодировки H264.

Хорошим примером кода, как это сделать, является RosyWriter< /а>

Обратите внимание, что после каждой записи AVAssetWriter вы будете знать, что один полный H264 NAL был записан в файл mp4. Вы можете написать код, который считывает полный H264 NAL после каждой записи с помощью AVAssetWriter, что даст вам доступ к кадру, закодированному H264. Это может занять некоторое время, чтобы сделать это правильно с приличной скоростью, но это выполнимо (я сделал это успешно).

Кстати, для успешного декодирования этих закодированных видеокадров вам понадобится информация H264 SPS и PPS, которая находится в другом месте файла mp4. В моем случае я фактически создаю пару тестовых файлов mp4, а затем вручную извлекаю их. Поскольку они не меняются, если вы не измените спецификации в кодировке H264, вы можете использовать их в своем коде.

Проверьте мой пост на значения SPS для потока H 264 в iPhone чтобы увидеть некоторые из SPS/PPS, которые я использовал в своем коде.

И последнее замечание: в моем случае мне пришлось передавать кадры, закодированные в формате h264, на другую конечную точку для декодирования/просмотра; поэтому мой код должен был сделать это быстро. В моем случае это было относительно быстро; но в конце концов я переключился на VP8 для кодирования/декодирования только потому, что это было намного быстрее, потому что все делалось в памяти без чтения/записи файлов.

Удачи, и, надеюсь, эта информация поможет.

12.06.2013
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..