Как декодировать наборы параметров sprop в SDP H264? - PullRequest
13 голосов
/ 04 марта 2010

Что означает декодированные байты Base64 в наборах параметров sprop в SDP для потока h264? Как узнать размер видео из этого примера?

Пример SDP:

sprop-parameter-sets=Z0IAKeNQFAe2AtwEBAaQeJEV,aM48gA==

Первая часть, декодированная из Base64 в Base16:

67 42 00 29 E3 50 14 07 B6 02 DC 04 04 06 90 78 91 15

Вторая часть (через запятую):

68 CE 3C 80

ОТВЕТ: Извлечение размеров видеопотока H264

Ответы [ 4 ]

13 голосов
/ 12 марта 2010

Требуемая спецификация доступна для бесплатного скачивания на веб-сайте МСЭ здесь: - Н.264 (03/10)

Выберите свободно загружаемый PDF, и вы найдете формат, подробно описанный в разделе 7.3.2.1.1.

Извините, я не заблудился с моим предыдущим ответом, просто не знал, что информация доступна в открытом доступе.

6 голосов
/ 16 июня 2010

Конечно, спецификация всегда лучшая, но наборы параметров sprop в SDP, как правило, состоят из ваших параметров последовательности и наборов параметров изображения, base-64, закодированных и разделенных запятой. Набор параметров последовательности и параметров изображения в основном говорит декодеру, как правильно декодировать входящий поток H264; без него вы не сможете правильно декодировать.

Написание синтаксического анализатора для SPS / PPS не так сложно, хотя для этого вам обязательно понадобится спецификация. Вам также понадобится хороший класс для чтения битов и знание того, как работает экспоненциальное кодирование Голомба для значений со знаком и без знака. См. здесь и здесь .

Наконец, код, найденный в этой теме на Doom9, был для меня неоценим - это в основном полный анализатор для элементарного потока H264. Он включает в себя класс считывателя битов, процедуры для анализа NALU, sps, pps, параметры VUI, матрицы масштабирования последовательности и т. Д. Это довольно удобный код для любого видеоинженера.

1 голос
/ 18 августа 2010

Размер видео указан в строке "frameize" SDP, не так ли? 00028 int av_strstart(const char *str, const char *pfx, const char **ptr) 00029 { 00030 while (*pfx && *pfx == *str) { 00031 pfx++; 00032 str++; 00033 } 00034 if (!*pfx && ptr) 00035 *ptr = str; 00036 return !*pfx; 00037 } 00038 p - указатель вашей строки SDP

       if (av_strstart(p, "framesize:", &p)) {
00370         char buf1[50];
00371         char *dst = buf1;
00372 
00373         // remove the protocol identifier..
00374         while (*p && *p == ' ') p++; // strip spaces.
00375         while (*p && *p != ' ') p++; // eat protocol identifier
00376         while (*p && *p == ' ') p++; // strip trailing spaces.
00377         while (*p && *p != '-' && (dst - buf1) < sizeof(buf1) - 1) {
00378             *dst++ = *p++;
00379         }
00380         *dst = '\0';
00381 
00382         // a='framesize:96 320-240'
00383         // set our parameters..
00384         codec->width = atoi(buf1);
00385         codec->height = atoi(p + 1); // skip the -
00386         codec->pix_fmt = PIX_FMT_YUV420P;
           }

ссылка: http://cekirdek.pardus.org.tr/~ismail/ffmpeg-docs/rtpdec__h264_8c-source.html#l00360

1 голос
/ 11 марта 2010

Как оказалось, ответ на мой вопрос написан в этом документе: ИСО / МЭК 14496-10: 2005 , в разделе 7.3.2.1. И получить его Мне нужно заплатить. Итак ... =)

...