Protocolos de transmisión del reproductor de receptor web

El SDK de receptor web admite tres tipos de protocolos de transmisión en la actualidad:

DASH HTTP en vivo de transmisión y . Transmisión fluida.

En este documento, enumeramos nuestra compatibilidad con cada uno de los protocolos de transmisión. Nota La explicación de las etiquetas admitidas para cada protocolo es bastante abreviada. en comparación con la especificación de protocolo detallada. El objetivo es proporcionar descripción rápida y comprensión de cómo usar cada protocolo y qué funciones del protocolo son compatibles con los dispositivos compatibles con Cast para entregar su de transmisión continua.

Transmisión adaptable y dinámica a través de HTTP (DASH)

ISO especificación detallada de DASH.

DASH es un protocolo de transmisión con tasa de bits adaptable que permite videos de alta calidad transmitir a través de servidores HTTP(S). Un manifiesto, redactado en XML, contiene la mayor parte de la información de metadatos sobre cómo inicializar y descargar el video contenido. Los conceptos clave que admite el reproductor web son <Period>, <AdaptationSet>, <Representation> y <SegmentTemplate> <SegmentList>, <BaseUrl> y <ContentProtection>.

Un manifiesto DASH comienza con una etiqueta raíz <MPD> y, dentro, incluye uno o más etiquetas <Period>, que representan un contenido de transmisión. Las etiquetas <Period> permiten ordenar diferentes piezas de contenido de transmisión y a menudo se usan para separar contenido principal y publicidad contenido de video consecutivos.

Un <AdaptationSet> en <MPD> es un conjunto de representaciones para un tipo de transmisión multimedia, en la mayoría de los casos, video, audio o subtítulos. El más Los mimetipos comúnmente admitidos son "video/mp4", "audio/mp4" y "texto/vtt". Los se pueden incluir <ContentComponent contentType="$TYPE$"> opcionales por debajo de <AdaptationSet>.

Dentro de cada <AdaptationSet>, se debe incluir una lista de etiquetas <Representation> presente, y el reproductor del receptor web usará la información de codecs para inicializar el búfer de origen de ECM y la información de bandwidth en elegir automáticamente la representación o tasa de bits correctas para reproducir.

Para cada <Representation>, los segmentos de medios se describen usando lo siguiente: una <BaseURL> para la representación de un solo segmento, <SegmentList> para la representación una lista de segmentos (similar a HLS) o <SegmentTemplate>.

En el caso de las <SegmentTemplate>, indica cómo el segmento de inicialización y los segmentos de medios se pueden representar mediante plantillas. En el siguiente ejemplo $Number$ indica el número de segmento como está disponible en la CDN. Así que se traduce a seg1.m4s, seg2.m4s, etc. a medida que la reproducción continúa.

<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:ns2="http://www.w3.org/1999/xlink"
  profiles="urn:mpeg:dash:profile:isoff-live:2011,http://dashif.org/guidelines/dash264" type="static"
  publishTime="2016-10-05T22:07:14.859Z" mediaPresentationDuration="P1DT0H0M0.000S" minBufferTime="P0DT0H0M7.500S">
  <Period id="P0">
    <AdaptationSet lang="en" segmentAlignment="true">
      <ContentComponent id="1" contentType="audio"/>
      <SegmentTemplate media="seg$Number$.m4s" initialization="seginit.mp4"
        duration="10000" startNumber="1" timescale="1000" presentationTimeOffset="0"/>
      <Representation id="1" bandwidth="150123" audioSamplingRate="44100"
        mimeType="audio/mp4" codecs="mp4a.40.2" startWithSAP="1">
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
        <BaseURL>http://www.google.com/testVideo</BaseURL>
      </Representation>
    </AdaptationSet>
    <AdaptationSet segmentAlignment="true">
      <ContentComponent id="1" contentType="video"/>
      <SegmentTemplate media="seg$Number$.m4s" initialization="seginit.mp4"
        duration="10000" startNumber="1" timescale="1000" presentationTimeOffset="0"/>
      <Representation id="1" bandwidth="212191" width="384" height="208" sar="26:27"
        frameRate="25" mimeType="video/mp4" codecs="avc1.42c01f" startWithSAP="1">
        <BaseURL>http://www.google.com/testVideo/bitrate1/</BaseURL>
      </Representation>
      <Representation id="1" bandwidth="366954" width="512" height="288" sar="1:1"
        frameRate="25" mimeType="video/mp4" codecs="avc1.42c01f" startWithSAP="1">
        <BaseURL>http://www.google.com/testVideo/bitrate2/</BaseURL>
      </Representation>
      <Representation id="1" bandwidth="673914" width="640" height="352" sar="44:45"
        frameRate="25" mimeType="video/mp4" codecs="avc1.42c01f" startWithSAP="1">
        <BaseURL>http://www.google.com/testVideo/bitrate3/</BaseURL>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>

Para una <SegmentTemplate>, es común usar la etiqueta <SegmentTimeline> para indican la longitud de cada segmento y qué segmentos se repiten. Un objeto timescale (unidades para representar un segundo) a menudo se incluyen como parte de los atributos de <SegmentTemplate> para poder calcular el tiempo del segmento según esta unidad. En el siguiente ejemplo, la etiqueta <S> hace referencia a una etiqueta de segmento, El atributo d especifica la longitud del segmento y el atributo r. especifica cuántos segmentos de la misma duración se repiten para que $Time$ puedan calcularse adecuadamente para descargar el segmento de medios, como se especifica en el atributo media.

<SegmentTemplate>
  timescale="48000"
  initialization="$RepresentationID$-init.dash"
  media="$RepresentationID$-$Time$.dash"
    startNumber="1">
    <SegmentTimeline>
      <S t="0" d="96256" r="2" />
      <S d="95232"