Получать размер кадра из необработанного потока mpeg4?
Кто-нибудь знает, как я могу получить размер кадра видео mpeg4 (не h264, то есть Mpeg4 часть 2) из потока битового видео? В настоящее время я пишу пользовательский источник мультимедиа для Windows Media Foundation, я должен предоставить медиатип, который требует размер кадра. это не работает без этого. есть идеи? Спасибо
1 ответ
Решение
Я не понимаю тебя. Вы пытаетесь узнать ширину и высоту передаваемого видео? Если это так (и я думаю, что это "измерение", которое вы ищете) вот как:
- Разобрать поток для этого целого числа
000001B0
(hex) это всегда первое, что вы получаете потоком. Если нет, посмотрите SDP потока (если есть, и найдитеconfig=
поле, и вот оно... только теперь это строка Base16! - Прочитайте все байты, пока не получите целое число
000001B6
(Шестнадцатеричный) - Вы должны получить что-то вроде этого (hex):
000001B0F5000001B5891300000100000001200086C40FA28 A021E0A2
- Это "заголовок конфигурации потока" или фрейм, или что-то еще, точное имя - последовательность видеообъектов. Он содержит всю информацию, необходимую декодеру для декодирования видеопотока.
- Прочитайте последние 4 байта (в моем примере они разделены одним пробелом -
A021E0A2
) - Теперь рассмотрим эти байты как одно 32-разрядное целое число без знака...
- Чтобы получить ширину, прочитайте первые 8 бит, а затем умножьте то, что вы получите, на 4
- Пропустить следующие 7 бит
- Чтобы получить высоту, прочитайте следующие 9 бит
В псевдокоде:
WIDTH = readBitsUnsigned(array, 8) * 4; readBitsUnsigned(array, 7); HEIGHT = readBitsUnsigned(array, 9);
Там вы идете... ширина и высота. (: