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