Résumé

  • RFC 3533 a fait de la page Ogg une unité repérable et contrôlable grâce au motif OggS, au numéro de flux, à la séquence, à la table de segments et au CRC.
  • Cette page pouvait pourtant ne contenir qu’un fragment de paquet : sa validité ne prouvait ni la continuité du média, ni son temps, ni son origine, ni sa lecture effective.

Le cas le plus instructif n’est pas une page corrompue. C’est une page impeccable qui arrive trop tard. Son en-tête est cohérent, son CRC correspond, mais le premier paquet qu’elle porte a commencé dans une page précédente qui manque. Le contrôle dit vrai ; c’est l’interprétation trop large de ce contrôle qui mentirait.

Publié en mai 2003 dans la série indépendante avec le statut Informational, RFC 3533 décrit la version 0 du format d’encapsulation Ogg. Le document ne définit pas un codec. Les encodeurs produisent des flux logiques, découpés en paquets. Ogg fragmente ces paquets en segments, regroupe des segments en pages et entrelace les pages d’un ou plusieurs flux logiques dans un flux physique. Le conteneur organise des frontières sans s’approprier le sens du contenu.

Le motif de capture OggS, long de quatre octets, offre un point de reprise après une zone endommagée. Le décodeur doit ensuite lire l’en-tête, comprendre la table de segments, calculer la taille de page et vérifier le CRC. Ce CRC de 32 bits emploie le polynôme 0x04c11db7. L’erratum 8825, désormais Verified, précise que le calcul porte sur l’en-tête avec le champ CRC mis à zéro et sur le contenu complet de la page. Ce n’est donc pas un simple contrôle d’en-tête. Ce n’est toujours pas une signature.

La table de laçage révèle la limite. Une valeur 255 annonce que le paquet se poursuit dans un autre segment ; une valeur inférieure à 255 en marque la fin. Zéro peut représenter un paquet vide ou terminer un paquet dont la longueur est un multiple exact de 255. Un drapeau indique en outre que le premier paquet de la page est la continuation d’une page antérieure. Le CRC de la page présente peut être correct alors que le début indispensable du paquet a disparu. La page est intacte, mais l’unité livrée au codec ne l’est pas.

Le numéro de séquence augmente séparément pour chaque flux logique. Il permet de repérer une perte de page au milieu d’un entrelacement audio, vidéo ou autre. Il ne fabrique pas les octets perdus. Même une séquence continue ne démontre pas que l’application a conservé chaque page, reconstitué chaque paquet, accepté les en-têtes du codec ou produit un son. Elle documente une continuité de numéros à un endroit du parcours.

Le numéro de série du flux logique sert au démultiplexage. RFC 3533 le décrit comme aléatoire et sans rapport avec le contenu ou l’encodeur. Il ne nomme donc ni l’œuvre, ni l’auteur, ni l’appareil, ni le compte, ni le détenteur des droits. En faire une preuve de provenance reviendrait à confondre une étiquette de routage locale avec une identité durable.

Les drapeaux BOS et EOS donnent une structure supplémentaire. La page BOS contient les éléments qui identifient le codec selon le media mapping ; d’autres paquets d’en-tête peuvent suivre avant les données. Une page EOS peut être vide de contenu et ne porter qu’une position et le drapeau final. Les flux groupés commencent ensemble et sont entrelacés ; les flux chaînés se succèdent. Ces marques rendent la construction lisible, mais elles ne certifient pas que tout le programme attendu se trouve entre elles.

La position granulaire ne possède pas de durée universelle. RFC 3533 affirme qu’Ogg n’a pas de notion du temps : le champ est un repère croissant et sans unité dont le codec et son mapping définissent la signification. Il peut compter des échantillons audio ou des images vidéo ; la valeur spéciale moins un signale qu’aucun paquet ne s’achève sur la page. Seule une couche connaissant le codec peut convertir ce repère en temps.

Les mappings Opus ultérieurs rendent cette séparation concrète. RFC 7845, puis RFC 9639 qui le remplace, définissent pour Opus une horloge granulaire à 48 kHz, le pré-saut, l’élagage final et des règles de recherche. Ces décisions n’étaient pas contenues implicitement dans l’en-tête Ogg originel. Elles viennent du contrat entre le conteneur et ce codec particulier.

La nomenclature MIME montre une autre frontière. RFC 3534 a enregistré application/ogg. RFC 5334 l’a ensuite rendu obsolète, a redéfini cet usage et ajouté audio/ogg et video/ogg; le registre IANA conserve ces types. Un type correct aide un logiciel à choisir un traitement. Il ne prouve pas qu’un objet précis possède tous ses paquets, un codec pris en charge, des pistes synchronisées ou une sortie rendue.

La sécurité n’est pas dissimulée derrière le CRC. RFC 3533 ne fournit aucun chiffrement ni aucune signature générique pour le conteneur ou ses flux. Il peut transporter un contenu signé ou chiffré si un format supérieur le prévoit. Le texte avertit aussi les implémentations qu’elles doivent gérer les flux manipulés, les dépassements de tampon et les risques analogues. Une page syntaxiquement valide n’absout pas le code qui traitera ensuite ses longueurs et son état de codec.

Le registre d’errata exige enfin une précision de statut. L’erratum 6796, Verified, remplace « pages » par « segments » dans un exemple. L’erratum 8825, lui aussi Verified, lève l’ambiguïté sur la couverture du CRC. L’erratum technique 8824 estime que les paramètres exacts de CRC32 restent insuffisamment spécifiés, mais il est seulement Reported. Le signaler est rigoureux ; le présenter comme une modification acquise ne le serait pas.

Une chaîne de preuve complète distingue donc : octets reçus, motif retrouvé, longueur analysée, CRC vérifié, séquence contrôlée pour chaque flux, paquets reconstruits, mapping reconnu, en-têtes du codec acceptés, positions converties, flux synchronisés, images ou échantillons décodés, sortie rendue et résultat observé. RFC 3533 a rendu les premiers maillons robustes. Sa leçon durable est de ne pas leur attribuer les derniers.

Sources