2010-07-14 17 views
2

Est-ce que quelqu'un sait comment je peux récupérer la dimension de trame d'une vidéo mpeg4 (non h264, c'est-à-dire Mpeg4 partie 2) à partir du flux binaire vidéo brut? Je suis en train d'écrire une source multimédia personnalisée pour Windows Media Foundation, je dois fournir un média qui a besoin de la taille de l'image. ça ne marche pas sans ça. des idées? merciObtenir la dimension de trame à partir du flux mpeg4 brut?

Répondre

3

Je ne vous comprends pas. Essayez-vous de connaître la largeur et la hauteur de la vidéo diffusée? Si oui (et je suppose que c'est la « dimension » que vous cherchez) Voici comment:

  1. analyser le flux pour cet entier 000001B0 (hex) est toujours la première chose que vous obtenez en flux continu. Si non, voir le SDP du flux (si vous en avez, et recherchez config= champ, et il est ... seulement maintenant c'est une chaîne Base16!
  2. Lire tous les octets jusqu'à ce que vous obtenez à l'entier 000001B6 (hex)
  3. Vous devriez obtenir quelque chose comme ça (hex): 000001B0F5000001B5891300000100000001200086C40FA28 A021E0A2
  4. Ceci est la « tête de configuration du flux » ou un cadre ou autre, le nom exact est la séquence d'objets vidéo Il contient toutes les informations d'un décodeur devrait. décoder le flux vidéo
  5. Lire les 4 derniers octets (dans mon exemple, ils sont séparés par un espace - A021E0A2)
  6. N OW observer ces octets comme un entier non signé 32 bits ...
  7. Pour obtenir largeur lire les 8 premiers bits, puis multiplier ce que vous obtenez avec 4
  8. Sauter 7 bits suivants
  9. Pour obtenir hauteur lu 9 bits suivants
  10. En code pseudo:

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

Et voilà ... largeur et hauteur.()

+1

Est-ce correct? J'essaie de décoder les images d'un flux que je connais est de 1280 x 1024. Avec cette logique, la largeur ne peut pas être supérieure à 1020, et la hauteur ne peut être supérieure à 511. – Ninjammer

+0

par 8 au lieu de 4, et HEIGHT devrait multiplier par 2 aussi pour cet entier lu à partir des 5 derniers octets au lieu de 4 octets. –