Как программно определить ширину и высоту видео в файле программы mpeg-2 transport stream?
Редактировать: я использую C ++, но рад за примеры на любом языке. Изменить: Исправленный вопрос - это были, вероятно, программные потоки, которые я спрашивал о
Проверьте исходный код для libmpeg2 , декодера F / OSS MPEG2. Похоже, что ширина и высота задаются в функции mpeg2_header_sequence() в header.c. Я не уверен, как управление течет к этой конкретной функции, хотя. Я бы предложил открыть файл MPEG2 в чем-то, используя libmpeg2 (например, MPlayer ) и подключив отладчик, чтобы более точно увидеть, что он делает.
mpeg2_header_sequence()
header.c
для видео MPEG2, горизонтальный и вертикальный размер можно найти в заголовке последовательности видео (из потока битов видео). Код заголовка последовательности - 0x000001B3. Пример кода ниже. Однако он не учитывает расширение размера по горизонтали / вертикали, если оно указано в заголовке расширения последовательности.
#define VIDEO_SEQUENCE_HDR 0xB3 #define HOR_SIZE_MASK 0xFFF00000 #define HOR_SIZE_SHIFT 20 #define VER_SIZE_MASK 0x000FFF00 #define VER_SIZE_SHIFT 8 unsigned char *pTmp = tsPacket; int len = 188; int horizontal, vertical; while(len>0 && !horizontal && !vertical) { if(*pTmp == 0 && *(pTmp+1) == 0 && *(pTmp+2)== 0x01 && *(pTmp+3) == 0xB3 && (len-1) >0) { unsigned int *pHdr = (unsigned int *)pTmp; pHdr++ ; unsigned int secondByte = ntohl(*pHdr); horizontal = (secondByte & HOR_SIZE_MASK) >> HOR_SIZE_SHIFT; vertical = (secondByte & VER_SIZE_MASK) >> VER_SIZE_SHIFT; break; } pTmp++; len--; }
Если вы используете DirectX, в интерфейсе VMRWindowlessControl есть метод:
piwc->GetNativeVideoSize(&w, &h, NULL, NULL);
Или интерфейс IBasicVideo:
pivb->GetVideoSize(&w, &h);
hamishmcn сказал, что ответ Адама Розенфилда был то, что ему нужно. Это заставляет меня задуматься о точности вопроса. Транспортный поток MPEG не имеет заголовка видеопоследовательности. Этот заголовок находится в потоке программы MPEG.
У меня нет ответа. Я просто надеялся, что кто-то ответит правильно, потому что он мне нужен.
Вы еще не сказали, какой язык хотите использовать, поэтому я сомневаюсь, что вы получите какие-либо примеры кода.
Посмотрите на следующие ссылки. Первый описывает формат файла MPEG-2, другой - RFC для передачи MPEG через RTP.
http://www.fh -friedberg.de / fachbereiche / e2 / телеком труд / Zinke / мК / mpeg2beg / beginnzi.htm
http://www.ietf.org/rfc/rfc2250.txt