Analyse du format FLV

Analyse du format FLV


table des matières

  1. Présentation de FVL
  2. Diagramme d'analyse du cadre
  3. En-tête FLV
  4. Corps FLV

Recommandation du blog (je pense qu'il suffit de lire ceci directement, le mien est un supplément): explication détaillée au format flv + exemple d'analyse


1. Présentation de FVL

  1. FLV (Flash Video) est un format de diffusion multimédia lancé par Adobe. En raison de la petite taille et du conditionnement simple des fichiers audio et vidéo emballés, il convient parfaitement à une utilisation sur Internet. La plupart des sites vidéo grand public dans le passé prennent en charge FLV. Le suffixe des fichiers encapsulés au format FLV est .flv.
  2. Le format de package FLV est composé d'un en-tête de fichier et d'un corps de fichier.
  3. Le corps FLV se compose d'une paire de (champ Taille de la balise précédente + balise). Le champ Taille de la balise précédente est disposé avant la balise et occupe 4 octets. La taille de la balise précédente enregistre la taille de la balise précédente, qui est utilisée pour le traitement de lecture inversée. La valeur du premier Pervious Tag Size après l'en-tête FLV est 0.
  4. Les balises peuvent généralement être divisées en 3 types: type de données script (image), type de données audio et type de données vidéo. Les données FLV sont stockées dans un ordre grand-boutiste, ce qui nécessite une attention particulière lors de l'analyse.
  5. La structure d'un fichier FLV standard est la suivante:
    Insérez la description de l'image ici
  6. La structure de contenu détaillée du fichier FLV est la suivante:
    Insérez la description de l'image ici

2. Diagramme d'analyse de la trame

Insérez la description de l'image ici


3. En-tête FLV

  1. Remarque: dans le type de données ci-dessous, UI signifie la mise en forme d'entiers non signés, et le nombre qui suit signifie combien de bits il s'agit. Comme UI8, cela signifie une mise en forme non signée et la longueur est d'un octet. UI24 est de trois octets et UI [8 * n] représente plusieurs octets. UB représente un champ de bits et UB5 représente 5 bits d'un octet. Vous pouvez vous référer à la structure du champ de bits en c.
  2. L'en-tête FLV occupe 9 octets, qui est utilisé pour identifier le fichier comme le type FLV et le flux audio et vidéo stocké suivant. Un fichier FLV, chaque type de balise appartient à un flux, c'est-à-dire qu'un fichier FLV ne peut contenir qu'au plus un flux audio et un flux vidéo. Il n'y a pas plusieurs flux audio et vidéo indépendants en un seul. État du fichier .

1. La structure de l'en-tête FLV est la suivante:

Insérez la description de l'image ici


4. Corps FLV

  1. Après l'en-tête FLV, corps du fichier FLV. Le corps du fichier FLV est composé d'une série de pointeurs arrière + balises. Le pointeur arrière représente la taille de la balise précédente (la longueur des données en octets de la balise précédente), qui occupe 4 octets.
    Insérez la description de l'image ici

1. Balise FLV

  1. Chaque balise est également composée de deux parties: l'en-tête de balise et les données de balise. L'en-tête de balise stocke des informations telles que le type de balise actuel et la longueur des données de balise.
1. en-tête de balise
  1. L'en-tête d'étiquette occupe généralement 11 octets d'espace mémoire. La structure des balises FLV est la suivante:
    Insérez la description de l'image ici
  2. Remarque:
  3. Dans le fichier flv, Timestamp et TimestampExtended épellent dts. Autrement dit, le temps de décodage. Timestamp et TimestampExtended épellent les dts en ms. (S'il n'y a pas de trame B, bien sûr, dts est égal à pts)
  4. CompositionTime représente la valeur de décalage de PTS par rapport à DTS, dans le 14e ~16e octet de chaque balise vidéo . Temps d'affichage (pts) = temps de décodage (du 5e au 8e octets de la balise) + CompositionTime.
  5. L'unité de CompositionTime est également ms
  6. Les données de script sont les données décrivant les informations de la vidéo ou de l'audio, telles que la largeur, la hauteur, l'heure, etc. Il n'y a généralement qu'une seule métadonnée dans un fichier. Les balises audio et vidéo sont des informations audio et vidéo, l'échantillonnage, le canal, la fréquence , codage et autres informations.
2. Structure des données de balise de script (type de script, type de trame)
  1. Ce type de balise est appelé balise MetaData, qui stocke certaines méta-informations sur la vidéo et l'audio FLV, telles que la durée, la largeur, la hauteur, etc. Habituellement, ce type de balise sera utilisé comme première balise du fichier FLV, et il n'y a qu'une seule balise, après l'en-tête de fichier. La structure de ce type de données de balise est la suivante:
    Insérez la description de l'image ici
  2. Le premier paquet AMF: le premier octet représente le type de paquet AMF, généralement 0x02, qui représente une chaîne de caractères. Les 2-3 premiers octets sont la valeur de type UI16, qui identifie la longueur de la chaîne, généralement 0x000A (longueur "onMetaData"). Le dernier octet est une chaîne spécifique, généralement "onMetaData" (6F, 6E, 4D, 65, 74, 61, 44, 61, 74, 61).
  3. Le deuxième paquet AMF: le premier octet représente le type de paquet AMF, généralement 0x08, qui représente un tableau. Les 2 à 5 premiers octets sont des valeurs de type UI32, indiquant le nombre d'éléments du tableau. Ce qui suit est l'encapsulation de chaque élément du tableau, qui est une paire de nom d'élément et de valeur. Les éléments de tableau habituels sont indiqués dans le tableau suivant.
    Insérez la description de l'image ici
3. Structure des données de balises audio (type audio)
  1. À partir de la zone Données d'étiquette audio:
    1. Le premier octet contient les informations de paramètre des données audio,
    2. Le deuxième octet commence par les données de flux audio.
  2. (Ces deux octets appartiennent à la partie données de la balise, pas à la partie en-tête)
  3. Le premier octet est l'information audio (regardez attentivement la spécification et trouvez que pour les fichiers AAC, le champ le plus utile est SoundFormat), le format est le suivant:
    Insérez la description de l'image ici
  4. Le deuxième octet commence par des données audio (il faut juger si les données sont des données audio réelles ou des informations de configuration audio)
    Insérez la description de l'image ici
    Insérez la description de l'image ici
  5. S'il s'agit de données AAC, s'il s'agit de AAC RAW, les données de balise [3] sont les données de trame AAC réelles du début.
    Insérez la description de l'image ici
4. Structure des données de balise vidéo (type vidéo)
  1. Le début des données de balise vidéo:
    1. Le premier octet contient les informations de paramètre des données vidéo.
    2. Le deuxième octet commence par les données de flux vidéo.
  2. Le premier octet contient des informations vidéo au format suivant:
    Insérez la description de l'image ici
  3. Les données vidéo commencent au deuxième octet
    4.
    Insérez la description de l'image ici
  4. CompositionTemps en millisecondes
    1. CompositionTime Les 14e à 16e octets de chaque tag vidéo (le tag entier) (s'il s'agit du décalage des données de tag [3] ~[5], [0], [1] [2: AVCPackettype]) (indiquant le PTS par rapport au décalage DTS valeur).
    2. L'unité de CompositionTime est ms: temps d'affichage = temps de décodage (le 5e au 8e octets de la balise, index de position [4] ~[7]) + CompositionTime
      Insérez la description de l'image ici
      f

Je suppose que tu aimes

Origine blog.csdn.net/weixin_41910694/article/details/109564752
conseillé
Classement