Notificación

Disponible para los editores y partners de Google Ad Manager 360 que tengan un contrato avanzado y cumplan los requisitos.

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 tanto de varios periodos como 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 las 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 de los de un solo periodo. Además, si usa un archivo de manifiesto de un solo periodo, el apéndice muestra la forma en que 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 del MPD

  • Type está definido como dynamic.
  • Profile está definido como urn:mpeg:dash:profile:isoff-live:2011.
  • El valor de availabilityStartTime debe ser distinto de cero y no cambiar entre encuestas sucesivas del MPD.
  • El valor de publishTime debe ser distinto de cero y aumentar o permanecer 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 debe ser 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 deben cambiar 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
  • P
  • 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 marcas de salida y entrada

La inserción dinámica de anuncios de Google hace las siguientes validaciones en eventos de mensajes de marcas 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 hay al comienzo y al final de cada periodo deben prepararse de modo que cada fotograma del segmento esté incluido en el 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 del 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 (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 del MPD

  • Type está definido como dynamic.
  • Profiles está definido como urn:mpeg:dash:profile:isoff-live:2011.
  • El valor de availabilityStartTime debe ser distinto de cero y no cambiar entre encuestas sucesivas del MPD.
  • El valor de publishTime debe ser distinto de cero y aumentar o permanecer 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 debe ser 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 Event solo pueden eliminarse desde la parte superior de un elemento EventStream.
  • Los elementos 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 deben cambiar 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 lo es.
    • 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
  • P
  • 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 las marcas de salida, debe definirse el valor de presentationTime en Event.
  • En el caso de las marcas de entrada, debe definirse el valor de presentationTime en Event y no debe configurarse 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 una marca de salida, que es una oportunidad para ir a una pausa publicitaria, como una marca 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 una marca de salida splice_insert que tiene out_of_network_indicator definido como 1.
  • Hay una marca de entrada splice_insert que tiene out_of_network_indicator definido como 0.
  • Las marcas de entrada son opcionales si el elemento de Event que contiene la marca de salida es splice_insert y tiene un valor distinto de 0 en duration.
    • La inserción dinámica de anuncios de Google interpreta una marca de entrada implícita splice_insert con un tiempo de presentación compuesto por presentationTime + duration de la marca de salida.
    • Un evento de marca de entrada explícito puede finalizar una marca de salida antes de que termine su duración. Así es como se puede activar una devolución anticipada.

Validaciones de time_signal

  • Hay una marca 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 una marca 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 se admiten.
  • Time_signal no permite volver automáticamente de una pausa publicitaria con una marca de entrada explícita.

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 una marca de entrada implícita puede calcularse sumando la duración al tiempo de presentación de la marca de salida asociada. 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 ninguna marca de salida en el mismo límite de Segment que otra marca de salida o entrada.
  • Puede haber una o varias marcas 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). Las marcas de entrada duplicadas se ignoran.

Periodos y eventos de mensajes de marcas de entrada y salida

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

  • El inicio del primer elemento Period está representado por el tiempo de presentación de la marca de salida, y el inicio del segundo elemento Period es la suma de presentationTime y duration de la marca de salida o el elemento presentationTime de la marca de entrada, si se proporciona.
    • Si se proporciona una marca de entrada para una marca de salida que tiene un elemento 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 marca de salida durante toda la duración de la pausa.

Esto no significa que el primer Event de EventStream sea siempre un mensaje de marca 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 marca de salida terminan con el siguiente mensaje de marca 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 marca de salida splice_insert solo deben finalizar con un mensaje de marca de entrada splice_insert si auto_return no está definido.
  • Los mensajes de marca de salida time_signal solo deben finalizar con un mensaje de marca de entrada time_signal con el mismo segmentation_type_id.
Los mensajes de marca de salida que vayan inmediatamente después de otra marca 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
Maximiza tus ingresos con consejos personalizados

Visite la página Consejos de optimización para Google Ad Manager, donde encontrará sugerencias personalizadas que le ayudarán a maximizar sus ingresos.

Ir ahora

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