SABR en el extractor
SABR es el protocolo de entrega de YouTube basado en sesiones. El protocolo, su motivación, UMP, BotGuard y la atestación se describen en la guía de SABR. Esta página muestra el paquete actual services/youtube/sabr de PipePipeExtractor y separa extracción, peticiones, decodificación y ensamblaje de medios.
Dónde encaja
Cuando la respuesta del player MWEB contiene formatos SABR, YoutubeStreamExtractor.buildSabrStreams() los expone con DeliveryMethod.SABR. No hay una URL de medios por formato. El flujo lleva serverAbrStreamingUrl como referencia común, mientras el cliente selecciona formatos y conduce la sesión con YoutubeSabrRequest.
La división actual es:
YoutubeStreamExtractoranalizastreamingData, resuelve en un solo lote los parámetros JavaScriptny las firmas, y creaYoutubeSabrInfoy los metadatos de los flujos SABR;YoutubeSabrSessionyYoutubeSabrRequestHelpercodifican y envían cada transacción, siguen redirecciones y políticas, conservan cookies, contextos y metadatos de directo, y aplican recuperación limitada;SabrStreamingResponseReaderySabrMediaSegmentCollectordecodifican la envoltura UMP y ensamblan segmentos terminados, con un archivo de spool opcional para segmentos grandes sin compresión;- la capa de aplicación consume los segmentos y proporciona un PO token cuando YouTube lo solicita. El extractor no acuña ese token ni renderiza medios.
En PipePipeClient, SabrSessionHelper valida los metadatos del extractor y crea la sesión, SabrMediaBridge convierte las peticiones de segmentos de Media3 en peticiones preparation/playback, y SabrRequestCoordinator serializa reintentos, backoff y recuperación de atestación. Las descargas reutilizan la misma sesión mediante SabrDownloader y después remultiplexan los archivos de audio/vídeo. El proveedor DOM local suministra el PO token; no es una segunda implementación de SABR.
Orden recomendado
- Iniciar una sesión — análisis de la respuesta del player,
YoutubeSabrInfo, creación de peticiones y estado entre llamadas. - La petición —
VideoPlaybackAbrRequest, formatos preferidos y seleccionados, rangos almacenados y wire format protobuf. - UMP y decodificación — framing, identificadores de partes y el
YoutubeSabrResponseproducido por el decodificador. - Medios, segmentos e índice — headers, payloads comprimidos, ensamblaje y líneas temporales de inicialización.
- El driver de sesión — semántica de una transacción, redirecciones, backoff, atestación y límites de recuperación.
- Referencia de control parts — partes de control que reconoce
SabrResponseDecoder.
Mapa actual de clases
| Área | Clases actuales |
|---|---|
| Respuesta del player | YoutubeStreamExtractor, YoutubeSabrInfo, YoutubeSabrInfo.Format |
| Sesión y peticiones | YoutubeSabrSession, YoutubeSabrRequest, YoutubeSabrRequest.Track, YoutubeSabrRequestHelper |
| Respuesta y UMP | YoutubeSabrResponse, SabrResponseDecoder, SabrStreamingResponseReader, UmpReader, SabrProto |
| Ensamblaje de medios | SabrMediaSegment, SabrMediaSegmentCollector, SabrMediaHeader, SabrFormatInitializationMetadata |
| Líneas temporales | YoutubeSabrFormatTimeline, SabrSegmentIndex, SabrMp4SegmentIndexParser, SabrWebmSegmentIndexParser |
| Diagnóstico | YoutubeSabrSessionDiagnostics, YoutubeSabrSession.TraceSnapshot |
| Errores | SabrProtocolException, SabrRecoverableException, SabrAttestationException |
El mapa solo enumera clases que existen en el código actual de PipePipeExtractor. La documentación antigua citaba clases de probe, perfiles y estado de flujo que ya no forman parte de este paquete.
La frontera
El extractor sabe describir y conducir una transacción SABR, pero no convierte la respuesta en audio o vídeo decodificados. Para las formas de las peticiones y respuestas, BotGuard y la atestación, continúa con la guía de SABR.
