2013-02-26 2 views
0

Может кто-нибудь указать мне на документацию, которая поможет мне получить правильные значения SPS и PPS для iPhone.Значения SPS для потока H 264 в iPhone

+0

Вы говорите о потоке видео H264, закодированном iphone? – Aki

+0

есть. Правильно. –

ответ

2

Вопрос немного неясно ...

Picture Parameter Set описана в последнем ITU-T release стандарта в главе 7.3.2.2

Sequence Parameter Set описана в разделе 7.3.2.1.

1

Я уверен, что вы знаете, но вы можете сохранять только закодированное видео H264 в файл (.mp4, .mov) на iOS. Пока нет доступа к закодированным видеокадрам из кода. Поэтому, если вы хотите создать файл mp4 с кодированным видео, вам необходимо использовать AVAssetWriter. У Apple есть хороший example code о том, как это сделать.

Я не знаю ни одного места, где публикуются различные SPS/PPS; поскольку они варьируются в зависимости от настроек сжатия, размера изображения и того, кодируете ли вы видео в портретном или альбомном режиме. Вы можете использовать приведенный выше примерный код (RosyWriter) для создания небольших файлов .mp4 с вашими настройками кодировки; и затем я бы использовал шестнадцатеричный редактор, чтобы найти SPS/PPS вручную. Обратите внимание, что SPS/PPS направится в конец файла после потока H264 как часть более крупной информационной структуры mp4. Вы можете найти дополнительную информацию о своей структуре в Интернете.

Вот несколько SPS/PPS, которые я нашел полезными для своего проекта. Некоторые из них могут работать для вас, но если вы не можете, вы всегда можете создать mp4 с вашими настройками кодировки H264 и найти необходимые SPS/PPS. Мое видео было закодировано с помощью AVVideoProfileLevelH264Baseline30, и вот СФС/PPS для различных видео размеров мне нужно:

SPS:

// For AVCaptureSessionPresetLow(144x192) AVCaptureSessionLandscape on Iphone4S, Iphone5 
char iphone_sps[] = {0x67, 0x4D, 0x00, 0x0C, 0xAB, 0x41, 0x82, 0x74, 0xD4, 0x04, 0x04, 0x18, 0x08}; 

// For AVCaptureSessionPresetLow(144x192), AVCaptureVideoOrientationPortrait on all Ipads 
char ipad_sps[] = {0x67, 0x4D, 0x00, 0x0C, 0xAB, 0x41, 0x23, 0x34, 0xD4, 0x04, 0x04, 0x18, 0x08}; 

// Iphone 4G AVCaptureSessionPresetLow (144x192), AVCaptureVideoOrientationPortrait 
char iphone4g_sps[] = {0x67, 0x42, 0x00, 0x1E, 0x8D, 0x68, 0x24, 0x66, 0x9A, 0x83, 0x00, 0x83, 0x01}; 

// For AVCaptureSessionPreset352x288 (352x288), AVCaptureVideoOrientationLandscape 
char iphone_sps[] = {0x67, 0x42, 0x00, 0x1E, 0xAB, 0x40, 0xB0, 0x4B, 0x4D, 0x40, 0x40, 0x41, 0x80, 0x80}; 

// For AVCaptureSessionPreset352x288 (352x288), AVCaptureVideoOrientationPortrait 
char ipad_sps[] = {0x67, 0x42, 0x00, 0x1E, 0xAB, 0x40, 0xB0, 0x4B, 0x4D, 0x40, 0x40, 0x41, 0x80, 0x80}; 

PPS:

char pps[] = {0x28, 0xCE, 0x3C, 0x80}; 
char iphone4g_pps[] = {0x68, 0xCE, 0x09, 0xC8}; 
+0

Где вы их нашли? –

+0

Как я описал в своем ответе, SPS/PPS были в видео только файлы mp4, которые я сгенерировал с помощью классов avfoundation/avassetwriter – Aki

1

Вы можете кодировать один кадр в файл, а затем извлечь sps и pps из этого файла. У меня есть пример, который показывает, как это сделать в http://www.gdcl.co.uk/2013/02/20/iOS-Video-Encoding.html

+0

Ты мой спаситель @Geraint! Я искал подходящую запись об этом целую вечность, и у вас даже есть отличный образец кода и очень сжатый маркированный список! –

+0

Возможно ли это в случае с iOs 9 через 3 года? Это кажется почти невероятным. Я могу получить данные h264 через сокет udp и легко декодировать его в аппаратном обеспечении, но если я хочу отправить данные h264 с камеры, мне нужно сначала записать его в файл, а затем прочитать из файла? Таким образом, единственный способ дозировать данные камеры без этой задержки закодирован в программном обеспечении, например, с использованием FFMpeg? – asendra

+0

Нет, это больше не нужно с ios 8. Вы можете напрямую использовать кодировщик VideoToolbox и декодер apis. –

Смежные вопросы