Получать размер кадра из необработанного потока mpeg4?

Кто-нибудь знает, как я могу получить размер кадра видео mpeg4 (не h264, то есть Mpeg4 часть 2) из ​​потока битового видео? В настоящее время я пишу пользовательский источник мультимедиа для Windows Media Foundation, я должен предоставить медиатип, который требует размер кадра. это не работает без этого. есть идеи? Спасибо

1 ответ

Решение

Я не понимаю тебя. Вы пытаетесь узнать ширину и высоту передаваемого видео? Если это так (и я думаю, что это "измерение", которое вы ищете) вот как:

  1. Разобрать поток для этого целого числа 000001B0(hex) это всегда первое, что вы получаете потоком. Если нет, посмотрите SDP потока (если есть, и найдите config= поле, и вот оно... только теперь это строка Base16!
  2. Прочитайте все байты, пока не получите целое число 000001B6(Шестнадцатеричный)
  3. Вы должны получить что-то вроде этого (hex): 000001B0F5000001B5891300000100000001200086C40FA28 A021E0A2
  4. Это "заголовок конфигурации потока" или фрейм, или что-то еще, точное имя - последовательность видеообъектов. Он содержит всю информацию, необходимую декодеру для декодирования видеопотока.
  5. Прочитайте последние 4 байта (в моем примере они разделены одним пробелом - A021E0A2)
  6. Теперь рассмотрим эти байты как одно 32-разрядное целое число без знака...
  7. Чтобы получить ширину, прочитайте первые 8 бит, а затем умножьте то, что вы получите, на 4
  8. Пропустить следующие 7 бит
  9. Чтобы получить высоту, прочитайте следующие 9 бит
  10. В псевдокоде:

      WIDTH = readBitsUnsigned(array, 8) * 4;
      readBitsUnsigned(array, 7);
      HEIGHT = readBitsUnsigned(array, 9);
    

Там вы идете... ширина и высота. (:

Другие вопросы по тегам