Проблемы с CMVideoFormatDescriptionCreateFromH264ParameterSets
Вопрос
Я пробовал создавать CMVideoFormatDescriptionRef
с CMVideoFormatDescriptionCreateFromH264ParameterSets
но это завершается ошибкой -12712 (которая, похоже, не определена ни в одном заголовке)
Я взял свои SPS и PPS из avcC
фрагмент файла mov (созданный приложением для камеры iPhone):
61 76 63 43 01 64 00 29 FF E1 00 10 67 64 00 29 AC 56 80 78 02 27 E5 9A 80
80 80 81 01 00 05 28 EE 04 F2 C0
SPS, по-видимому, является: 67 64 00 29 AC 56 80 78 02 27 E5 9A 80 80 80 81
... и ППС: 28 EE 04 F2 C0
Я предшествовал SPS и PPS с их 4-байтовыми длинами (пробовал также 1-байтовые и 2-байтовые длины с теми же результатами) и выполнил вызов следующим образом:
uint8_t sps[] = {0x00, 0x00, 0x00, 0x10, 0x67, 0x64, 0x00, 0x29, 0xAC, 0x56, 0x80, 0x78, 0x02, 0x27, 0xE5, 0x9A, 0x80, 0x80, 0x80, 0x81};
uint8_t pps[] = {0x00, 0x00, 0x00, 0x05, 0x28, 0xEE, 0x04, 0xF2, 0xC0};
uint8_t* props[] = {sps, pps};
size_t sizes[] = {0x14, 0x09}; // sizes include the 4-byte length
CMVideoFormatDescriptionRef formatDesc;
OSStatus formatCreateResult = CMVideoFormatDescriptionCreateFromH264ParameterSets(NULL, 2, props, sizes, 4, &formatDesc);
Я получаю -12712 в качестве результата каждый раз (пробовал SPS / PPS из нескольких файлов и потоков).
У тебя есть какие-нибудь идеи, что я делаю не так?(Код был проверен на Xcode6-Beta4 в симуляторе).Я бы предпочел избежать самостоятельного разбора SPS и PPS и использовать обычный CMVideoFormatDescriptionCreate :-)
Решение
Не указывайте размер в 4 байта.Ни в полезных нагрузках sps/pps, ни в значениях размера.
Другие советы
Я погуглил для тебя ;-)
Проверьте этот код Chromium
https://src.chromium.org/svn/trunk/src/content/common/gpu/media/vt_video_decode_accelerator.cc
И этот ответ о H.264 SPS/PPS NALU
Возможные местоположения для набора(ов) параметров последовательности/изображения для потока H.264