Подтвердить что ты не робот

Как декодировать набор параметров sprop в H264 SDP?

В чем смысл декодированных байтов 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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

Как выясняется, ответ на мой вопрос написан в этом документе: ISO/IEC 14496-10: 2005, в разделе 7.3.2.1.. И Получите его, я должен заплатить. Итак... =)

Ответ 4

Размер видео находится в строке "framesize" 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