Notificación

Solo disponible en Google Ad Manager 360.

Streaming adaptativo dinámico basado en HTTP (DASH)

Codificación de pausas publicitarias de emisiones en directo (DASH)

 marcadorIr a: Requisitos del archivo de manifiesto y del contenido | Paquetes, plataformas y reproductores

Diferencias entre los archivos de manifiesto de un solo periodo y los de varios periodos

En Ad Manager se pueden ingerir archivos de manifiesto de varios periodos y de un solo periodo para DASH.

Con los archivos de manifiesto de un solo periodo, los editores proporcionan una emisión de DASH con un solo periodo que incluye todo el contenido y oportunidades de pausas publicitarias, en lugar de varios periodos que los diferencien. La inserción dinámica de anuncios admite los archivos de manifiesto de un solo periodo convirtiéndolos en varios en cada obtención.

Al configurar una emisión en directo en Google Ad Manager y seleccionar "DASH" como formato de streaming, puede seleccionar si el archivo de manifiesto se proporciona como uno de un solo periodo o de varios.

Selector del tipo de archivo de manifiesto de DASH en la interfaz de Ad Manager.

Utilice esta guía para conocer las expectativas de los archivos de manifiesto de varios periodos y los de un solo periodo. Además, si usa un archivo de manifiesto de un solo periodo, el apéndice muestra cómo la inserción dinámica de anuncios convierte un archivo de manifiesto de un solo periodo en uno de varios periodos.

La inserción dinámica de anuncios de Google no admite la división de segmentos. En este artículo solo se describe cómo acondicionar el archivo de manifiesto.

Requisitos del archivo de manifiesto y del contenido

Para archivos de manifiesto de varios periodos

Expectativas en cuanto a un archivo de manifiesto MPEG-DASH de varios periodos

La inserción dinámica de anuncios de Google hace las siguientes validaciones en el MPD sin procesar:

Validaciones de elementos de MPD

  • type está definido como dynamic.
  • profile está definido como urn:mpeg:dash:profile:isoff-live:2011.
  • El valor de availabilityStartTime es distinto de cero y no cambia entre encuestas sucesivas del MPD.
  • El valor de publishTime es distinto de cero, y aumenta o permanece igual entre encuestas sucesivas. Sin embargo, el valor del atributo publishTime debe ajustarse a la hora actual en cada actualización.
  • Debe usarse HTTPS en todo el contenido DASH al que se haga referencia en un mismo MPD.

Ejemplo

<MPD xmlns="urn:mpeg:dash:schema:mpd:2011"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" type="dynamic"
profiles="urn:mpeg:dash:profile:isoff-live:2011"
availabilityStartTime="2022-01-01T10:00:00Z"
publishTime="2022-01-01T10:00:00Z"
minimumUpdatePeriod="PT25S" timeShiftBufferDepth="PTM0S" maxSegmentDuration="PT2S"
minBufferTime="PT2S">
  <Period …>
    …
  </Period>
  …
</MPD>

Validaciones de elementos de Period

  • El valor de start es mayor o igual a cero.

    De esta forma, se pueden admitir las duraciones de la norma ISO-8601 que, de manera opcional, pueden incluir un campo de día entero. Por ejemplo, P3DT3H1M30S representaría 3 días, 3 horas, 1 minuto y 30 segundos.

    Las representaciones de duración de año, mes y semana de la norma ISO-8601 ya no están disponibles.

  • Period tiene al menos un elemento AdaptationSet.
  • Los esquemas de direccionamientos están limitados a plantillas con direccionamientos basados en número y tiempo.

Ejemplo

<Period start="PT0S">
  <AdaptationSet …>
    …
  </AdaptationSet>
  <AdaptationSet …>
    …
  </AdaptationSet>
</Period>

Entre encuestas sucesivas del MPD:

  • Los elementos de Period solo se pueden quitar de la parte superior del MPD.
  • Los elementos de Period solo se pueden añadir al final del MPD.
  • Solo se pueden actualizar el primer y el último periodo del MPD. Los demás no se deben modificar. Estas actualizaciones deben hacerse únicamente para lo siguiente:
    • Quitar segmentos o eventos de la parte superior del primer periodo.
    • Añadir segmentos o eventos nuevos al final del último periodo.

Validaciones de elementos de AdaptationSet

  • AdaptationSet tiene al menos un elemento Representation.
  • Si están presentes, los elementos ContentProtection de AdaptationSet y los elementos secundarios no cambian entre encuestas sucesivas del MPD.

Ejemplo

<AdaptationSet mimeType="video/mp4" startWithSAP="1"
contentType="video" par="16:9"
minWidth="640" maxWidth="640" minHeight="360" maxHeight="360"
maxFrameRate="60/2"
segmentAlignment="true">
  <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>
  <ContentComponent id="0" contentType="video" />
  <Representation …>
    …
  </Representation>
  <Representation …>
    …
  </Representation>
</AdaptationSet>

Validaciones de elementos de Representation

  • id no debe estar vacío.
  • No debe haber elementos SegmentBase ni SegmentList.

Ejemplo

<Representation width="640" height="360" sar="1:1" frameRate="60/2"
codecs="avc1.64001e" id="V300" bandwidth="300000">
  …
</Representation>

SegmentTemplate con validaciones de tiempo

  • Los elementos S de SegmentTimeline pueden contener el atributo t, que se usa para las URLs de contenido multimedia.
    • Si no se proporciona ningún valor, se presupone que es 0 para el primer elemento S. Para los siguientes elementos S, se presupone que el valor es la suma del tiempo de presentación del elemento S anterior y la duración contigua (el valor de [t + d × (r + 1) ] del elemento S anterior).
    • $Time$ y $Number$ se admiten en archivos de manifiesto de varios periodos.
    • startNumber de SegmentTemplate no se utiliza.
  • Entre encuestas sucesivas del MPD:
    • Los segmentos solo pueden eliminarse de la parte superior de SegmentTimeline si salen de las instantáneas de la ventana de DVR.
    • Los segmentos solo pueden añadirse al final de SegmentTimeline.

Ejemplo

<SegmentTemplate timescale="90000" initialization="$RepresentationID$/init.mp4"
media="$RepresentationID$/$Time$.m4s">
  <SegmentTimeline>
    <S t="0" d="270000" r="20" />
  </SegmentTimeline>
</SegmentTimeline>

Validaciones de componentes temporales

La inserción dinámica de anuncios de Google es compatible con la parte del componente de tiempo de la norma ISO-8601 y admite el componente de día entero opcional: P0Y0M[n]DT[n]H[n]M[n]S. El componente de días se convierte en duración teniendo en cuenta que 1 día = 24 horas, y se añade al componente de tiempo. El nanosegundo es la granularidad más baja que se reconoce.

Ejemplos de formato de hora válidos
  • P0Y0M
  • P0Y0M2D
  • P2D
  • PT3H
  • PT0H3M
  • P0Y0M0DT0H0M1.000S
  • P0Y0M1DT2H4M10S
  • PT0.000000001S
Ejemplos de formato de hora no válidos
  • U
  • PT
  • 2007-03-01
  • P5Y0M1DT2H4M1.000S
  • P0Y1.5M1DT2H4M1.000S
  • P0YiM1DT2H4M1.000S
  • P0Y0M.3DT0H0M1.000S
  • 3h
  • PT100,000H

Expectativas en cuanto a los eventos de mensajes de puntos de salida y entrada

La inserción dinámica de anuncios de Google hace las siguientes validaciones en eventos de mensajes de puntos de salida y entrada. El contenido debe acondicionarse previamente de la siguiente forma:

  • Los recursos multimedia deben dividirse en varios periodos, y en las señales CUE-OUT y CUE-IN de cada mid-roll deben indicarse comienzos y finales de esos periodos.
  • Los segmentos de contenido que haya al principio y al final de cada periodo deben prepararse de modo que todos sus fotogramas estén incluidos en ese periodo.
  • Los puntos de inserción deben alinearse con un fotograma clave o IDR, que debe estar al inicio del periodo. En consecuencia, es posible que los periodos tengan que terminar con un segmento breve si un punto de inserción no se encuentra dentro de un límite natural.

Señalización de pausas publicitarias

  • Todo el contenido que esté relacionado con una pausa publicitaria debe incluirse en uno o varios periodos consecutivos, que solo pueden tener los segmentos de contenido que se van a sustituir.
  • Los indicadores CUE-OUT de las pausas publicitarias deben indicarse en el archivo de manifiesto de MPD, tal y como se muestra en uno de los siguientes ejemplos:

    Ejemplo 1

    • Elementos EventStream de SCTE-35
    • schemeIdUri="urn:scte:scte35:2014:xml+bin"
    • Definido en el estándar DASH.

    <MPD>

    <Period start="PT0S" id="1">

       <!-- Periodo de contenido -->

       ...

    </Period>

    <Period start="PT32S" id="2">

        <!-- Periodo de pausa publicitaria -->

        <!-- El primer segmento de este periodo corresponde al inicio de la pausa publicitaria,

        y la pausa publicitaria termina con el último segmento -->

        <EventStream timescale="90000"

        schemeIdUri="urn:scte:scte35:2014:xml+bin">

         <Event duration="2520000" id="1">

         <!-- La duración especificada en este evento debe coincidir

         todo lo posible con la duración del periodo -->

            <Signal xmlns="http://www.scte.org/schemas/35/2016"

             <Binary>

               /DAlAAAAAAAAAP/wFAUAAAAEf+/+kybGyP4BSvaQAAEBAQAArky/3g==

             <Binary>

           </Signal>

          </Event>

        </EventStream> 

    </Period>

    <Period start="PT60S" id="3"> 

       <!-- Periodo de contenido -->

       ...

       </Period>

    </MPD>

    Ejemplo 2

    • Elementos EventStream de SCTE-35
    • schemeIdUri="urn:scte:scte35:2013:xml"
    • Definido en el estándar DASH.

    <MPD>

    <Period start="PT0S" id="1">

       <!-- Periodo de contenido -->

       ...

    </Period>

    <Period start="PT32S" id="2">

        <!-- Periodo de pausa publicitaria -->

        <!-- El primer segmento de este periodo corresponde al inicio de la pausa publicitaria,

        y la pausa publicitaria termina con el último segmento -->

       <EventStream timescale="90000"

       schemeIdUri="urn:scte:scte35:2013:xml">

         <Event duration="2520000" id="1">

         <!-- La duración especificada en este evento debe coincidir

           todo lo posible con la duración del periodo -->

           <SpliceInfoSection xmlns="urn:scte:scte35:2013:xml">

              <SpliceInsert outOfNetworkIndicator="true" 

              spliceImmediateFlag="true">

                <BreakDuration autoReturn="true"

                duration="2520000"/>

                </SpliceInsert>

            </SpliceInfoSection>

          </Event>

        </EventStream> 

    </Period>

    <Period start="PT60S" id="3"> 

        <!-- Periodo de contenido -->

        ...

    </Period>

    </MPD>

  • La duración de la pausa publicitaria que se indica en el evento CUE-OUT debería ser la suma de la duración de todos los segmentos de los periodos de pausa publicitaria.

Marcadores de anuncios admitidos

Comando splice_insert del SCTE-35 XML

En DASH, las etiquetas CUE van acompañadas de límites de elementos Period XML. Las etiquetas CUE se proporcionan como elementos Event dentro de elementos EventStream en un Period. Este límite adicional es suficiente para identificar la etiqueta. Además, dado que las pausas publicitarias están marcadas por límites Period, no se necesita ninguna etiqueta CUE-IN explícita.

En este ejemplo se muestra una etiqueta SCTE35 basada en XML para DASH. Es parecido al del comando splice_insert de SCTE-35 binario, salvo que los datos se analizan y se presentan como archivos XML en vez de como archivos binarios.

Ejemplo

<Period>

  <EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">

     <Event duration="2520000" id="1">

       <SpliceInfoSection xmlns="urn:scte:scte35:2013:xml">

          <SpliceInsert outOfNetworkIndicator="true" spliceImmediateFlag="true">

          <BreakDuration autoReturn="true" duration="2520000"/>

          </SpliceInsert>

        </SpliceInfoSection>

      </Event>

    </EventStream>

</Period>

Comando Time Signal del SCTE-35 XML

En DASH, las etiquetas CUE van acompañadas de límites de elementos Period XML. Las etiquetas CUE se proporcionan como elementos Event dentro de elementos EventStream en un Period. Este límite adicional es suficiente para identificar la etiqueta. Además, dado que las pausas publicitarias están marcadas por límites Period, no se necesita ninguna etiqueta CUE-IN explícita.

En este ejemplo se muestra una etiqueta SCTE35 basada en XML para DASH. Es parecido al del comando Time Signal de SCTE-35 binario, salvo que los datos se analizan y se presentan como archivos XML en vez de como archivos binarios.

Ejemplo

<Period>

  <EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">

     <Event duration="2520000" id="1">

       <SpliceInfoSection xmlns="urn:scte:scte35:2013:xml">

          <TimeSignal outOfNetworkIndicator="true" spliceImmediateFlag="true">

             <SpliceTime ptsTime="123123"/>

          </TimeSignal>

          <SegmentationDescriptor  segmentationEventId="123123" segmentationEventCancelIndicator="false" segmentationDuration="123123">

             <DeliveryRestrictions webDeliveryAllowedFlag="false" noRegionalBlackoutFlag="true" archiveAllowedFlag="false" deviceRestrictions="3"/>            

             <SegmentationUpid segmentationUpidType="14" segmentationTypeId="52" >11111</SegmentationUpid>

          </SegmentationDescriptor>

        </SpliceInfoSection>

      </Event>

    </EventStream>

</Period>

SegmentationTypeId, que indica el tipo de señal de tiempo.

El valor SegmentationTypeId siguiente se reconoce como una señal de tiempo CUE-OUT válida:

34: inicio de la pausa
48: inicio del anuncio del proveedor
52: inicio de la oportunidad de emplazamiento del proveedor

El valor SegmentationTypeId siguiente se reconoce como una señal de tiempo CUE-IN válida:

35: fin de la pausa
49: fin del anuncio del proveedor
53: fin de la oportunidad de emplazamiento del proveedor

Comando splice_insert del SCTE-35 binario

En DASH, las etiquetas CUE van acompañadas de límites de elementos Period XML. Las etiquetas CUE se proporcionan como elementos Event dentro de elementos EventStream en un Period. Este límite adicional es suficiente para identificar la etiqueta. Además, dado que las pausas publicitarias están marcadas por límites Period, no se necesita ninguna etiqueta CUE-IN explícita.

En este ejemplo se muestra una etiqueta SCTE35 binaria para DASH.

Ejemplo

<Period>

    <EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin">

      <Event duration="2520000" id="1">

       <Signal xmlns="http://www.scte.org/schemas/35/2016">

         <Binary>

         /DAlAAAAAAAAAP/wFAUAAAAEf+/+kybGyP4BSvaQAAEBAQAArky/3g==

         </Binary>

       </Signal>

      </Event>

    </EventStream>

 ...

<Period>

Comando time_signal del SCTE-35 binario: inicio/finalización de la pausa

Los datos binarios de SCTE-35 (codificados en base64) se deben decodificar y analizar para determinar si contienen algún parámetro CUE-OUT/CUE-IN válido e información de segmentación de las pausas.

Por ejemplo, los datos binarios siguientes contienen una señal CUE-OUT válida:

Ejemplo

<Period>

    <EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin">

      <Event duration="2520000" id="1">

       <Signal xmlns="http://www.scte.org/schemas/35/2016">

         <Binary>

           /DAsAAAAAyiYAP/wBQb/PVbrDQAWAhRDVUVJB48zWH//AAEuGvsAACIAAdRJqiI=

         </Binary>

       </Signal>

      </Event>

    </EventStream>

 ...

<Period>

Una vez decodificado, el mensaje contiene los campos siguientes:

  • splice_command_type, con valor de 6, indica que se trata de una señal de tiempo.
  • segmentation_type_id, que indica el tipo de señal de tiempo.

El valor segmentation_type_id siguiente se reconoce como una señal de tiempo CUE-OUT válida:

34: inicio de la pausa.

El valor segmentation_type_id siguiente (cuando splice_command_type = 6) se reconoce como una señal de tiempo CUE-IN válida:

35: fin de la pausa.

Comando time_signal del SCTE-35 binario: Inicio/finalización de anuncio del proveedor

Los datos binarios de SCTE-35 (codificados en base64) se deben decodificar y analizar para determinar si contienen algún parámetro CUE-OUT/CUE-IN válido e información de segmentación de las pausas.

Por ejemplo, los datos binarios siguientes contienen una señal CUE-OUT válida:

Ejemplo

<Period>

    <EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin">

      <Event duration="2520000" id="1">

       <Signal xmlns="http://www.scte.org/schemas/35/2016">

         <Binary>

           /DBcAAAAAAAAAP/wBQb//ciI8QBGAh1DVUVJXQk9EX+fAQ5FUDAxODAzODQwMDY2NiEEZAIZQ1VFSV0JPRF/3wABLit7AQVDMTQ2NDABAQEKQ1VFSQCAMTUwKnPhdcU=

         </Binary>

       </Signal>

      </Event>

    </EventStream>

 ...

<Period>

Una vez decodificado, el mensaje contiene los campos siguientes:

  • splice_command_type, con valor de 6, indica que se trata de una señal de tiempo.
  • segmentation_type_id, que indica el tipo de señal de tiempo.

El valor segmentation_type_id siguiente se reconoce como una señal de tiempo CUE-OUT válida:

48: inicio del anuncio del proveedor.

El valor segmentation_type_id siguiente (cuando splice_command_type = 6) se reconoce como una señal de tiempo CUE-IN válida:

49: fin del anuncio del proveedor.

Comando time_signal del SCTE-35 binario: oportunidad de emplazamiento del proveedor

Los datos binarios de SCTE-35 (codificados en base64) se deben decodificar y analizar para determinar si contienen algún parámetro CUE-OUT/CUE-IN válido e información de segmentación de las pausas.

Por ejemplo, los datos binarios siguientes contienen una señal CUE-OUT válida:

Ejemplo

<Period>

    <EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin">

      <Event duration="2520000" id="1">

       <Signal xmlns="http://www.scte.org/schemas/35/2016">

         <Binary>

           /DA0AAAAAAAA///wBQb+cr0AUAAeAhxDVUVJSAAAjn/PAAGlmbAICAAAAAAsoKGKNAIAmsnRfg==

         </Binary>

       </Signal>

      </Event>

    </EventStream>

 ...

<Period>

Una vez decodificado, el mensaje contiene los campos siguientes:

  • splice_command_type, con valor de 6, indica que se trata de una señal de tiempo.
  • segmentation_type_id, que indica el tipo de señal de tiempo.

El valor segmentation_type_id siguiente se reconoce como una señal de tiempo CUE-OUT válida:

52: inicio de la oportunidad de emplazamiento del proveedor.

El valor segmentation_type_id siguiente (cuando splice_command_type = 6) se reconoce como una señal de tiempo CUE-IN válida:

53: fin de la oportunidad de emplazamiento del proveedor.

Macros de etiquetas SCTE-35

Si su feed incluye las etiquetas EXT-OATCLS-SCTE35 o EXT-X-DATERANGE, los metadatos se extraen automáticamente y están disponibles mediante pares clave-valor personalizados. Al generar etiquetas de anuncio, debe configurar esos pares clave-valor e insertarlos como macros.

Cuando esté configurando los nuevos pares clave-valor personalizados de los campos SCTE-35, utilice una clave personalizada (por ejemplo, "scte35") y establezca el valor en las macros que corresponden al tipo de campo disponible en el feed:

Macro Descripción
%%SPLICE_INSERT_EVENT_ID%% Los números enteros sin firma del mensaje SCTE35 se convierten en números decimales en las cadenas.
%%SPLICE_INSERT_UPID%%
%%TIME_SIGNAL_EVENT_ID%%
%%TIME_SIGNAL_UPID%% Se muestra como hexadecimal en minúsculas, sin el prefijo 0x.
%%TIME_SIGNAL_UPID_RAW%% Inserta bytes sin procesar del mensaje SCTE y sin hacer una conversión hexadecimal (la cadena inicial debe ser una cadena codificada en UTF-8 válida).
%%AFMM_CBC%% Extrae el código de pausa publicitaria de los datos del punto de unión (es un requisito de las especificaciones de la asociación francesa AF2M).
El contenido de DASH debe seguir todas las reglas especificadas en los Requisitos y directrices de oferta de servicios de los puntos de interoperabilidad de DASH-IF.
Para archivos de manifiesto de un solo periodo

Expectativas en cuanto a un archivo de manifiesto MPEG-DASH de un solo periodo

La inserción dinámica de anuncios de Google hace las siguientes validaciones en el MPD sin procesar:

Validaciones de elementos de MPD

  • type está definido como dynamic.
  • profiles está definido como urn:mpeg:dash:profile:isoff-live:2011.
  • El valor de availabilityStartTime es distinto de cero y no cambia entre encuestas sucesivas del MPD.
  • El valor de publishTime es distinto de cero, y aumenta o permanece igual entre encuestas sucesivas.
  • El MPD tiene únicamente un elemento Period.
  • Debe usarse HTTPS en todo el contenido DASH al que se haga referencia en un mismo MPD.

Ejemplo

<MPD xmlns="urn:mpeg:dash:schema:mpd:2011"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" type="dynamic"
profiles="urn:mpeg:dash:profile:isoff-live:2011"
availabilityStartTime="2022-01-01T10:00:00Z"
publishTime="2022-01-01T10:00:00Z"
minimumUpdatePeriod="PT25S" timeShiftBufferDepth="PTM0S" maxSegmentDuration="PT2S"
minBufferTime="PT2S">
  <Period …>
    …
  </Period>
  …
</MPD>

Validaciones de elementos de Period

  • El valor de start es mayor o igual a cero.
  • Period tiene al menos un elemento AdaptationSet.

Ejemplo

<Period start="PT0S">
  <AdaptationSet …>
    …
  </AdaptationSet>
  <AdaptationSet …>
    …
  </AdaptationSet>
</Period>

Validaciones de elementos de EventStream

Entre encuestas sucesivas del MPD:

  • Los elementos de Event solo pueden eliminarse desde la parte superior de un elemento EventStream.
  • Los elementos de Event solo pueden añadirse al final de un elemento EventStream.

Validaciones de elementos de AdaptationSet

  • AdaptationSet tiene al menos un elemento Representation.
  • Si están presentes, los elementos ContentProtection de AdaptationSet y los elementos secundarios no cambian entre encuestas sucesivas del MPD.

Ejemplo

<AdaptationSet mimeType="video/mp4" startWithSAP="1"
contentType="video" par="16:9"
minWidth="640" maxWidth="640" minHeight="360" maxHeight="360"
maxFrameRate="60/2"
segmentAlignment="true">
  <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>
  <ContentComponent id="0" contentType="video" />
  <Representation …>
    …
  </Representation>
  <Representation …>
    …
  </Representation>
</AdaptationSet>

Validaciones de elementos de Representation

  • id no debe estar vacío.
  • No debe haber elementos SegmentBase ni SegmentList.

Ejemplo

<Representation width="640" height="360" sar="1:1" frameRate="60/2"
codecs="avc1.64001e" id="V300" bandwidth="300000">
  …
</Representation>

SegmentTemplate con validaciones de $Time$

  • Los elementos S de SegmentTimeline pueden contener el atributo t, que se usa para las URLs de contenido multimedia.
    • Si no se proporciona ningún valor, se presupone que es 0 para el primer elemento S. Para los siguientes elementos S, se presupone que el valor es la suma del tiempo de presentación del elemento S anterior y la duración contigua (el valor de [t + d × (r + 1) ] del elemento S anterior).
    • $Time$ es compatible con los archivos de manifiesto de un solo periodo. $Number$ todavía no se admite.
    • startNumber de SegmentTemplate no se utiliza.
  • Entre encuestas sucesivas del MPD:
    • Los segmentos solo pueden eliminarse de la parte superior de SegmentTimeline si salen de las instantáneas de la ventana de DVR.
    • Los segmentos solo pueden añadirse al final de SegmentTimeline.

Ejemplo

<SegmentTemplate timescale="90000" initialization="$RepresentationID$/init.mp4"
media="$RepresentationID$/$Time$.m4s">
  <SegmentTimeline>
    <S t="0" d="270000" r="20" />
  </SegmentTimeline>
</SegmentTimeline>

Validaciones de componentes temporales

La inserción dinámica de anuncios de Google es compatible con la parte del componente de tiempo de la norma ISO-8601 y admite el componente de día entero opcional: P0Y0M[n]DT[n]H[n]M[n]S. El componente de días se convierte en duración teniendo en cuenta que 1 día = 24 horas, y se añade al componente de tiempo. El nanosegundo es la granularidad más baja que se reconoce.

Ejemplos de formato de hora válidos
  • P0Y0M
  • P0Y0M2D
  • P2D
  • PT3H
  • PT0H3M
  • P0Y0M0DT0H0M1.000S
  • P0Y0M1DT2H4M10S
  • PT0.000000001S
Ejemplos de formato de hora no válidos
  • U
  • PT
  • 2007-03-01
  • P5Y0M1DT2H4M1.000S
  • P0Y1.5M1DT2H4M1.000S
  • P0YiM1DT2H4M1.000S
  • P0Y0M.3DT0H0M1.000S
  • 3h
  • PT100,000H

Expectativas en cuanto a los marcadores SCTE-35 de entrada

La inserción dinámica de anuncios de Google hace las siguientes validaciones en los marcadores SCTE-35 de entrada:

Validaciones de puntos de empalme

La inserción dinámica de anuncios de Google solo reconoce los puntos de empalme como marcadores SCTE-35 incluidos en elementos de Event del MPD de DASH si cumplen las siguientes validaciones:

  • Los datos SCTE-35 codificados de base64 deben incluirse en el elemento Binary del elemento Signal de un evento.
    • Se admite splice_insert.
    • Se admite time_signal con comandos segmentation_descriptor.
  • Los elementos de EventStream que contienen eventos con marcadores SCTE-35 tienen schemeIdUri definido como urn:scte:scte35:2014:xml+bin.
  • El espacio de nombres Signal debe estar definido como http://www.scte.org/schemas/35/2016.
  • En el caso de los puntos de salida, debe definirse el valor de presentationTime en Event.
  • En el caso de los puntos de entrada, debe definirse el valor de presentationTime en Event y no debe establecerse la duración.
  • Los elementos de Event en EventStream deben estar ordenados por presentationTime.
Los puntos de empalme ofrecen la posibilidad de cambiar de una fuente de emisión a otra. Un punto de empalme puede ser tanto un punto de salida, que es una oportunidad para ir a una pausa publicitaria, como un punto de entrada, que es una oportunidad para volver de una pausa publicitaria.

En este contexto, los puntos de empalme se utilizan para dividir Period en contenido independiente y separar los elementos de Period en función de las fechas de presentación o la duración de los puntos del empalme. Estos puntos de empalme los proporcionan los elementos de Event con marcadores SCTE-35.

Validaciones de splice_insert

  • Hay un punto de salida splice_insert que tiene out_of_network_indicator definido como 1.
  • Hay un punto de entrada splice_insert que tiene out_of_network_indicator definido como 0.
  • Los puntos de entrada son opcionales si el elemento de Event que contiene el punto de salida es splice_insert y tiene un valor distinto de 0 en duration.
    • La inserción dinámica de anuncios de Google interpreta un punto de entrada implícito splice_insert con un tiempo de presentación del punto de salida de presentationTime + duration.
    • Un evento de punto de entrada explícito puede finalizar un punto de salida antes de que termine su duración. Así es como se puede activar una devolución anticipada.

Validaciones de time_signal

  • Hay un punto de salida time_signal cuyo segmentation_descriptor y segmentation_type_id corresponde a lo siguiente:
    • 34: inicio de la pausa
    • 48: inicio del anuncio del proveedor
    • 52: inicio de la oportunidad de emplazamiento del proveedor
  • Hay un punto de entrada time_signal cuyo segmentation_descriptor y segmentation_type_id corresponde a lo siguiente:
    • 35: fin de la pausa
    • 49: fin del anuncio del proveedor
    • 53: fin de la oportunidad de emplazamiento del proveedor
  • Los demás segmentation_type_ids no son compatibles.
  • time_signal no permite volver automáticamente de una pausa publicitaria con un punto de entrada explícito.

Validaciones de tiempo de presentación

Como la inserción dinámica de anuncios de Google no admite la división de segmentos, el tiempo de presentación del punto de empalme solo puede estar a 100 ms del límite del segmento más cercano.

  • El tiempo de presentación de un punto de empalme puede determinarse a partir del elemento availabilityStartTime del MPD, sumando el valor de presentationTime de Event definido por timescale de EventStream al valor de start de Period.

    El tiempo de presentación de un punto de entrada implícito puede calcularse sumando la duración al tiempo de presentación del punto de salida asociado. La duración de un punto de empalme se calcula de la siguiente forma: duration de Event / timescale de EventStream.

    En este contexto, las duraciones y tiempos PTS proporcionados en la señal SCTE-35 no se utilizan para calcular la duración ni el tiempo de presentación.

  • No debe haber ningún punto de salida en el mismo límite de Segment que otro punto de salida o entrada.
  • Puede haber uno o varios puntos de entrada en el mismo límite de Segment (por ejemplo, si se activa una pausa anticipada al mismo tiempo que el final real de la pausa). Los puntos de entrada duplicados se ignoran de forma eficaz.

Periodos y eventos de mensajes de puntos de entrada y salida

Los nuevos elementos Period se insertarán tanto al inicio como al final del evento de punto de salida (o al inicio de los eventos de punto de salida y de entrada) cuando se cree una presentación de varios periodos del archivo de manifiesto de un solo periodo.

  • El inicio del primer elemento Period está representado por la hora de presentación del punto de salida, y el inicio del segundo elemento Period es la suma de presentationTime y duration del punto de salida o presentationTime del punto de entrada, si se proporciona.
    • Si se proporciona un punto de entrada para un punto de salida que tiene duration, Period se dividirá usando el punto de empalme anterior.
  • La inserción dinámica de anuncios de Google ignora los campos splice_time, break_duration, auto_return y splice_immediate_flag en los mensajes SCTE-35.

Debe haber un elemento Event que indique un mensaje de punto de salida durante toda la duración de la pausa.

Esto no significa que el primer Event de EventStream sea siempre un mensaje de punto de salida. Si tiene una ventana de DVR de entrada lo suficientemente larga, puede que haya eventos que pertenezcan a pausas anteriores.

Los mensajes de punto de salida terminan con el siguiente mensaje de punto de entrada.

  • El ID de empalme de SCTE-35 (splice_event_id o segmentation_event_id) y el atributo id del evento no se tienen en cuenta.
  • Los mensajes de punto de salida splice_insert solo deben finalizar por un mensaje de punto de entrada splice_insert si auto_return no está definido.
  • Los mensajes de punto de salida time_signal solo deben finalizar por un mensaje de punto de entrada time_signal con el mismo segmentation_type_id.
Los mensajes de punto de salida que vayan inmediatamente después de otro punto de salida antes de que finalice su duración cerrarán la pausa inicial e iniciarán otra (es decir, se creará otro Period).

Ejemplo

<EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin" timescale="600" presentationTimeOffset="991724821200">

  <Event presentationTime="992568282204" duration="18073" id="1615447966">

    <Signal xmlns="http://www.scte.org/schemas/35/2016">

      <Binary>/DAbAAAAAAAAAP/wCgUAAAAAf98AAAAAAAAHeq0Q</Binary>

    </Signal>

  </Event>

  <Event presentationTime="992568300277" id="1085695472">

    <Signal xmlns="http://www.scte.org/schemas/35/2016">

      <Binary>/DAbAAAAAAAAAP/wCgUAAAAAf18AAAAAAAAqqkN1</Binary>

    </Signal>

  </Event>

</EventStream>

Plataformas, empaquetadores y reproductores admitidos

Plataformas

Dispositivos/navegadores

Versión

DRM

Navegador Chrome

66 y posteriores

Widevine

Navegador Firefox

60 y posteriores

Widevine

Microsoft Edge

18

PlayReady

Android

4.4 y posteriores

Widevine

Chromecast

Gen2, Ultra (API de CAF)

Widevine

Roku

3, 4 (firmware 8.1)

PlayReady

 

Empaquetadores

Shaka

2.1.0

Compatibilidad con varios periodos

Bitmovin

1.47.3

Compatibilidad con varios periodos

Unified Streaming

1.11.17 Compatibilidad con un solo periodo
 

Jugadores

Shaka

2.4.2

Recomendado para pruebas

Bitmovin

v7

 

ExoPlayer

2.8.2

 

Dash.js

2.0

 

Apéndice

Si usa un archivo de manifiesto de un solo periodo, en estos ejemplos se muestra cómo la inserción dinámica de anuncios convierte un archivo de manifiesto de un solo periodo en uno de varios periodos.

Ejemplo de entrada de un archivo de manifiesto de un solo periodo

<?xml version="1.0" encoding="UTF-8"?>

<MPD availabilityStartTime="2017-01-01T10:00:00Z" id="id1" maxSegmentDuration="PT2S" minBufferTime="PT2S" minimumUpdatePeriod="PT25S" profiles="urn:mpeg:dash:profile:isoff-live:2011" publishTime="2017-01-01T10:00:00Z" timeShiftBufferDepth="PT5M" type="dynamic" ns1:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:ns1="http://www.w3.org/2001/XMLSchema-instance">

  <BaseURL>http://example.com/dash/</BaseURL>

  <Period id="1" start="PT0S">

    <EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2014:xml+bin">

      <Event duration="2700000" presentationTime="270000" id="1">

        <Signal xmlns="http://www.scte.org/schemas/35/2016">

          <Binary>/DAlAAAAAAAAAP/wFAUAAA+if+/+INAJ0P4AKTLgAAAAAAAA9UTkTA==</Binary>

        </Signal>

      </Event>

      <Event presentationTime="2970000" id="2">

        <Signal xmlns="http://www.scte.org/schemas/35/2016">

          <Binary>/DAgAAAAAAAAAP/wDwUAAA+if0/+IPk8sAAAAAAAAH3XbUE=</Binary>

        </Signal>

      </Event>

    </EventStream>

    <AdaptationSet contentType="audio" lang="eng" mimeType="audio/mp4" segmentAlignment="true" startWithSAP="1">

      <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main" />

      <SegmentTemplate timescale="44100" initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/$Number$.m4s">

        <SegmentTimeline>

          <S t="0" d="132300" r="20" />

        </SegmentTimeline>

      </SegmentTemplate>

      <Representation audioSamplingRate="48000" bandwidth="48000" codecs="mp4a.40.2" id="A48">

        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2" />

      </Representation>

    </AdaptationSet>

    <AdaptationSet contentType="video" maxFrameRate="60/2" maxHeight="360" maxWidth="640" mimeType="video/mp4" minHeight="360" minWidth="640" par="16:9" segmentAlignment="true" startWithSAP="1">

      <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main" />

      <SegmentTemplate timescale="90000" initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/$Number$.m4s">

        <SegmentTimeline>

          <S t="0" d="270000" r="20" />

        </SegmentTimeline>

      </SegmentTemplate>

      <Representation bandwidth="300000" codecs="avc1.64001e" frameRate="60/2" height="360" id="V300" sar="1:1" width="640" />

    </AdaptationSet>

  </Period>

</MPD>

Ejemplo de salida de un archivo de manifiesto de varios periodos

<?xml version="1.0" encoding="UTF-8"?>

<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:XMLSchema-instance="http://www.w3.org/2001/XMLSchema-instance" XMLSchema-instance:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" id="id1" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="dynamic" availabilityStartTime="2017-01-01T10:00:00Z" publishTime="2017-01-01T10:00:00Z" minimumUpdatePeriod="PT25S" minBufferTime="PT2S" timeShiftBufferDepth="PT5M0S" maxSegmentDuration="PT2S">

  <BaseURL>http://example.com/dash/</BaseURL>

  <Period id="0s" start="PT0S">

    <AdaptationSet mimeType="audio/mp4" startWithSAP="1" lang="eng" contentType="audio" segmentAlignment="true">

      <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>

      <SegmentTemplate timescale="44100" presentationTimeOffset="0" media="$RepresentationID$/$Number$.m4s" initialization="$RepresentationID$/init.mp4">

        <SegmentTimeline>

          <S d="132300"></S>

        </SegmentTimeline>

      </SegmentTemplate>

      <Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="A48" bandwidth="48000">

        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration>

      </Representation>

    </AdaptationSet>

    <AdaptationSet mimeType="video/mp4" startWithSAP="1" contentType="video" par="16:9" minWidth="640" maxWidth="640" minHeight="360" maxHeight="360" maxFrameRate="60/2" segmentAlignment="true">

      <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>

      <SegmentTemplate timescale="90000" presentationTimeOffset="0" media="$RepresentationID$/$Number$.m4s" initialization="$RepresentationID$/init.mp4">

        <SegmentTimeline>

          <S d="270000"></S>

        </SegmentTimeline>

      </SegmentTemplate>

      <Representation width="640" height="360" sar="1:1" frameRate="60/2" codecs="avc1.64001e" id="V300" bandwidth="300000"></Representation>

    </AdaptationSet>

  </Period>

  <Period id="3s" start="PT3S">

    <EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin" timescale="90000">

      <Event duration="2700000" id="1">

        <Signal xmlns="http://www.scte.org/schemas/35/2016">

          <Binary>/DAlAAAAAAAAAP/wFAUAAA+if+/+INAJ0P4AKTLgAAAAAAAA9UTkTA==</Binary>

        </Signal>

      </Event>

    </EventStream>

    <AdaptationSet mimeType="audio/mp4" startWithSAP="1" lang="eng" contentType="audio" segmentAlignment="true">

      <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>

      <SegmentTemplate timescale="44100" presentationTimeOffset="132300" media="$RepresentationID$/$Number$.m4s" initialization="$RepresentationID$/init.mp4">

        <SegmentTimeline>

          <S t="132300" d="132300" r="9"></S>

        </SegmentTimeline>

      </SegmentTemplate>

      <Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="A48" bandwidth="48000">

        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration>

      </Representation>

    </AdaptationSet>

    <AdaptationSet mimeType="video/mp4" startWithSAP="1" contentType="video" par="16:9" minWidth="640" maxWidth="640" minHeight="360" maxHeight="360" maxFrameRate="60/2" segmentAlignment="true">

      <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>

      <SegmentTemplate timescale="90000" presentationTimeOffset="270000" media="$RepresentationID$/$Number$.m4s" initialization="$RepresentationID$/init.mp4">

        <SegmentTimeline>

          <S t="270000" d="270000" r="9"></S>

        </SegmentTimeline>

      </SegmentTemplate>

      <Representation width="640" height="360" sar="1:1" frameRate="60/2" codecs="avc1.64001e" id="V300" bandwidth="300000"></Representation>

    </AdaptationSet>

  </Period>

  <Period id="33s" start="PT33S">

    <EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin" timescale="90000">

      <Event id="2">

        <Signal xmlns="http://www.scte.org/schemas/35/2016">

          <Binary>/DAgAAAAAAAAAP/wDwUAAA+if0/+IPk8sAAAAAAAAH3XbUE=</Binary>

        </Signal>

      </Event>

    </EventStream>

    <AdaptationSet mimeType="audio/mp4" startWithSAP="1" lang="eng" contentType="audio" segmentAlignment="true">

      <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>

      <SegmentTemplate timescale="44100" presentationTimeOffset="1455300" media="$RepresentationID$/$Number$.m4s" initialization="$RepresentationID$/init.mp4">

        <SegmentTimeline>

          <S t="1455300" d="132300" r="9"></S>

        </SegmentTimeline>

      </SegmentTemplate>

      <Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="A48" bandwidth="48000">

        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration>

      </Representation>

    </AdaptationSet>

    <AdaptationSet mimeType="video/mp4" startWithSAP="1" contentType="video" par="16:9" minWidth="640" maxWidth="640" minHeight="360" maxHeight="360" maxFrameRate="60/2" segmentAlignment="true">

      <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>

      <SegmentTemplate timescale="90000" presentationTimeOffset="2970000" media="$RepresentationID$/$Number$.m4s" initialization="$RepresentationID$/init.mp4">

        <SegmentTimeline>

          <S t="2970000" d="270000" r="9"></S>

        </SegmentTimeline>

      </SegmentTemplate>

      <Representation width="640" height="360" sar="1:1" frameRate="60/2" codecs="avc1.64001e" id="V300" bandwidth="300000"></Representation>

    </AdaptationSet>

  </Period>

</MPD>

Si tiene algún problema relacionado con la solución de problemas o las interrupciones de la inserción dinámica de anuncios, póngase en contacto con el equipo de Asistencia para editores.

¿Te ha resultado útil esta información?

¿Cómo podemos mejorar esta página?
true
Empezar a usar la inserción dinámica de anuncios

Nuestra guía para entregar una experiencia de anuncio fluida en contenido de vídeo en directo, lineal y bajo demanda.
Consultar la guía

Búsqueda
Borrar búsqueda
Cerrar búsqueda
Menú principal
10063050173738985007
true
Buscar en el Centro de ayuda
true
true
true
true
true
148
false
false