Resumen

  • RFC 3533 convirtió cada página Ogg en una unidad reconocible y comprobable mediante OggS, un encabezado, números de flujo y secuencia, una tabla de segmentos y un CRC.
  • Un paquete podía atravesar varias páginas; por eso una página correcta podía depender de bytes perdidos antes y no demostraba integridad del medio, autenticidad, tiempo o reproducción.

Una suma de comprobación verde suele cerrar conversaciones demasiado pronto. En Ogg debía abrir otra: ¿qué, exactamente, acababa de pasar la prueba? RFC 3533 daba una respuesta precisa. Había pasado una página, no necesariamente el paquete que el códec necesitaba y mucho menos la experiencia multimedia completa.

El RFC apareció en mayo de 2003, con categoría Informational y origen en la serie independiente. Definía la versión 0 del formato de encapsulación Ogg. Los codificadores producían flujos lógicos divididos en paquetes. Ogg fragmentaba esos paquetes en segmentos, reunía segmentos contiguos en páginas y entrelazaba páginas de varios flujos lógicos dentro de un flujo físico. Esa función de contenedor era deliberadamente distinta de la función del códec.

El patrón de captura OggS ayudaba a encontrar un comienzo de página y a recuperar la sincronización después de una zona dañada. Encontrarlo no bastaba: el lector tenía que analizar el encabezado, conocer la tabla de segmentos, calcular la longitud real y comparar el CRC. El campo de 32 bits usa el polinomio 0x04c11db7. El erratum 8825, ya Verified, aclara que el cálculo cubre el encabezado con el campo CRC a cero y también el contenido de la página. La prueba protege ambos conjuntos de bytes contra corrupción accidental; no acredita quién los creó.

La clave está en los valores de enlazado. Un valor 255 indica que el paquete sigue en otro segmento; un valor menor termina el paquete. El cero puede representar un paquete vacío o cerrar uno cuya longitud sea múltiplo exacto de 255. Además, una bandera avisa de que el primer paquete de la página continúa desde la página anterior. Por diseño, un paquete puede ocupar varias páginas. Si la anterior desaparece, la página actual todavía puede superar su CRC mientras conserva solamente el final inútil de un paquete.

El número de secuencia aporta evidencia de pérdida. Aumenta de manera independiente dentro de cada flujo lógico, incluso cuando páginas de audio, vídeo y metadatos se entrelazan en el flujo físico. Un salto permite localizar una ausencia, pero no reconstruye los bytes. Una secuencia sin saltos tampoco prueba que la aplicación procesara los paquetes, entendiera el códec o entregara la salida. Es una prueba sobre el orden observado, no sobre toda la cadena.

Algo parecido ocurre con el número de serie. Su función es permitir que el demultiplexor devuelva cada página al flujo lógico correcto. RFC 3533 señala que se genera aleatoriamente y no está relacionado con el contenido ni con el codificador. No es identidad de obra, autor, cuenta, equipo o propietario. Si una base de datos lo convierte en procedencia, está agregando una semántica que el formato jamás prometió.

Las banderas BOS y EOS delimitan un flujo lógico. La primera página aporta el identificador de códec según el mapeo de medios; pueden seguir otros encabezados antes de los datos. La página EOS incluso puede no llevar contenido. En la agrupación, distintos flujos empiezan juntos y sus páginas se intercalan. En el encadenamiento, flujos físicos completos se suceden sin solaparse. La estructura permite ordenar el recipiente, no certificar que su interior esté completo.

El campo granule position exige todavía más cautela. Ogg no tiene concepto de tiempo, dice el RFC. Solo conserva marcadores crecientes y sin unidad. El mapeo específico decide si cuentan muestras, fotogramas u otra cosa, y la aplicación que conoce el códec hace la conversión temporal. El valor menos uno señala que en esa página no termina ningún paquete. Leer esos ocho bytes como segundos universales sería una interpretación inventada.

La evolución de Opus lo confirma. RFC 7845 definió el mapeo de Opus en Ogg, y RFC 9639 lo sustituyó con reglas actuales. Allí aparecen el reloj de gránulos de 48 kHz, el pre-skip, el recorte final y la búsqueda. Son decisiones de ese mapeo, no propiedades automáticas del contenedor. RFC 6716 define el códec; los RFC de mapeo explican cómo encaja en Ogg. Cada documento controla una parte distinta de la evidencia.

Las etiquetas MIME también están acotadas. RFC 3534 registró application/ogg; RFC 5334 lo dejó obsoleto, redefinió el uso y añadió audio/ogg y video/ogg. El registro de IANA mantiene las asignaciones. Una etiqueta correcta orienta la selección del programa, pero no demuestra que el archivo concreto tenga todos los paquetes, que sus pistas estén sincronizadas o que el dispositivo pueda reproducirlo.

El CRC tampoco es seguridad criptográfica. RFC 3533 declara que Ogg no ofrece cifrado ni firma genéricos, aunque pueda transportar contenido protegido por otra capa. También advierte contra flujos manipulados, desbordamientos de búfer y fallos semejantes. Un atacante puede construir bytes que pasen una prueba accidental y después exploten su interpretación. La validación de página debe preceder, no sustituir, la defensa del analizador y del códec.

El historial de errata ilustra cómo conservar incertidumbre. El 6796, Verified, corrige “páginas” por “segmentos” en un ejemplo. El 8825, también Verified, aclara la cobertura del CRC. El 8824 sostiene que la parametrización exacta de CRC32 está poco especificada, pero su estado sigue siendo Reported. Citarlo como cuestión abierta es correcto; presentarlo como texto normativo corregido no lo sería.

Una recepción defendible conserva recibos distintos: bytes capturados, límite de página encontrado, tabla analizada, CRC verificado, continuidad por flujo, paquetes reconstruidos, mapeo seleccionado, encabezados de códec aceptados, posiciones convertidas, flujos sincronizados, cuadros decodificados, salida renderizada y resultado observado. El logro de RFC 3533 fue hacer robusta la primera mitad sin fingir que equivalía a la segunda.

Fuentes