Ir 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.
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.
Requisitos del archivo de manifiesto y del contenido
Para archivos de manifiesto de varios periodosExpectativas 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
- Validaciones de elementos de Period
- Validaciones de elementos de AdaptationSet
- Validaciones de elementos de Representation
- SegmentTemplate con validaciones de tiempo
- Validaciones de componentes temporales
Validaciones de elementos del MPD
Typeestá definido comodynamic.Profileestá definido comourn:mpeg:dash:profile:isoff-live:2011.- El valor de
availabilityStartTimedebe ser distinto de cero y no cambiar entre encuestas sucesivas del MPD. - El valor de
publishTimedebe ser distinto de cero y aumentar o permanecer igual entre encuestas sucesivas. Sin embargo, el valor del atributopublishTimedebe 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
startdebe 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,P3DT3H1M30Srepresentarí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.
Periodtiene al menos un elementoAdaptationSet.- 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
Periodsolo se pueden quitar de la parte superior del MPD. - Los elementos de
Periodsolo 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
AdaptationSettiene al menos un elementoRepresentation.- Si están presentes, los elementos
ContentProtectiondeAdaptationSety 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
Idno debe estar vacío.- No debe haber elementos
SegmentBaseniSegmentList.
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
SdeSegmentTimelinepueden contener el atributot, que se usa para las URLs de contenido multimedia.- Si no se proporciona ningún valor, se presupone que es
0para el primer elementoS. Para los siguientes elementosS, se presupone que el valor es la suma del tiempo de presentación del elementoSanterior y la duración contigua (el valor de [t+d× (r+ 1) ] del elementoSanterior). $Time$y$Number$se admiten en archivos de manifiesto de varios periodos.StartNumberdeSegmentTemplateno se utiliza.
- Si no se proporciona ningún valor, se presupone que es
- Entre encuestas sucesivas del MPD:
- Los segmentos solo pueden eliminarse de la parte superior de
SegmentTimelinesi salen de las instantáneas de la ventana de DVR. - Los segmentos solo pueden añadirse al final de
SegmentTimeline.
- Los segmentos solo pueden eliminarse de la parte superior de
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
P0Y0MP0Y0M2DP2DPT3HPT0H3MP0Y0M0DT0H0M1.000SP0Y0M1DT2H4M10SPT0.000000001S
Ejemplos de formato de hora no válidos
PPT2007-03-01P5Y0M1DT2H4M1.000SP0Y1.5M1DT2H4M1.000SP0YiM1DT2H4M1.000SP0Y0M.3DT0H0M1.000S3hPT100,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-OUTyCUE-INde 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-OUTde 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
EventStreamde 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 coincidirtodo 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
EventStreamde 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 coincidirtodo 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> - Elementos
- La duración de la pausa publicitaria que se indica en el evento
CUE-OUTdebería ser la suma de la duración de todos los segmentos de los periodos de pausa publicitaria.
Marcadores de anuncios admitidos
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>
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
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>
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.
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.
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). |
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
- Validaciones de elementos de Period
- Validaciones de elementos de EventStream
- Validaciones de elementos de AdaptationSet
- Validaciones de elementos de Representation
- SegmentTemplate con validaciones de tiempo
- Validaciones de componentes temporales
Validaciones de elementos del MPD
Typeestá definido comodynamic.Profilesestá definido comourn:mpeg:dash:profile:isoff-live:2011.- El valor de
availabilityStartTimedebe ser distinto de cero y no cambiar entre encuestas sucesivas del MPD. - El valor de
publishTimedebe 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
startdebe ser mayor o igual a cero. Periodtiene al menos un elementoAdaptationSet.
Ejemplo
<Period start="PT0S">
<AdaptationSet …>
…
</AdaptationSet>
<AdaptationSet …>
…
</AdaptationSet>
</Period>
Validaciones de elementos de EventStream
Entre encuestas sucesivas del MPD:
- Los elementos
Eventsolo pueden eliminarse desde la parte superior de un elementoEventStream. - Los elementos
Eventsolo pueden añadirse al final de un elementoEventStream.
Validaciones de elementos de AdaptationSet
AdaptationSettiene al menos un elementoRepresentation.- Si están presentes, los elementos
ContentProtectiondeAdaptationSety 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
Idno debe estar vacío.- No debe haber elementos
SegmentBaseniSegmentList.
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
SdeSegmentTimelinepueden contener el atributot, que se usa para las URLs de contenido multimedia.- Si no se proporciona ningún valor, se presupone que es
0para el primer elementoS. Para los siguientes elementosS, se presupone que el valor es la suma del tiempo de presentación del elementoSanterior y la duración contigua (el valor de [t+d× (r+ 1) ] del elementoSanterior). $Time$es compatible con los archivos de manifiesto de un solo periodo.$Number$todavía no lo es.StartNumberdeSegmentTemplateno se utiliza.
- Si no se proporciona ningún valor, se presupone que es
- Entre encuestas sucesivas del MPD:
- Los segmentos solo pueden eliminarse de la parte superior de
SegmentTimelinesi salen de las instantáneas de la ventana de DVR. - Los segmentos solo pueden añadirse al final de
SegmentTimeline.
- Los segmentos solo pueden eliminarse de la parte superior de
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
P0Y0MP0Y0M2DP2DPT3HPT0H3MP0Y0M0DT0H0M1.000SP0Y0M1DT2H4M10SPT0.000000001S
Ejemplos de formato de hora no válidos
PPT2007-03-01P5Y0M1DT2H4M1.000SP0Y1.5M1DT2H4M1.000SP0YiM1DT2H4M1.000SP0Y0M.3DT0H0M1.000S3hPT100,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
- Validaciones de splice_insert
- Validaciones de time_signal
- Validaciones de tiempo de presentación
- Periodos y eventos de mensajes de marcas de entrada y salida
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
Binarydel elementoSignalde un evento.- Se admite
splice_insert. - Se admite
time_signalcon comandossegmentation_descriptor.
- Se admite
- Los elementos de
EventStreamque contienen eventos con marcadores SCTE-35 tienenschemeIdUridefinido comourn:scte:scte35:2014:xml+bin. - El espacio de nombres
Signaldebe estar definido comohttp://www.scte.org/schemas/35/2016. - En el caso de las marcas de salida, debe definirse el valor de
presentationTimeenEvent. - En el caso de las marcas de entrada, debe definirse el valor de
presentationTimeenEventy no debe configurarse la duración. - Los elementos de
EventenEventStreamdeben estar ordenados porpresentationTime.
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_insertque tieneout_of_network_indicatordefinido como1. - Hay una marca de entrada
splice_insertque tieneout_of_network_indicatordefinido como0. - Las marcas de entrada son opcionales si el elemento de
Eventque contiene la marca de salida essplice_inserty tiene un valor distinto de 0 enduration.- La inserción dinámica de anuncios de Google interpreta una marca de entrada implícita
splice_insertcon un tiempo de presentación compuesto porpresentationTime+durationde 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.
- La inserción dinámica de anuncios de Google interpreta una marca de entrada implícita
Validaciones de time_signal
- Hay una marca de salida
time_signalcuyosegmentation_descriptorysegmentation_type_idcorresponde 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_signalcuyosegmentation_descriptorysegmentation_type_idcorresponde 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_idsno se admiten. Time_signalno 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
availabilityStartTimedelMPD, sumando el valor depresentationTimedeEvent, definido portimescaledeEventStream, al valor destartdePeriod.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:
durationdeEvent/timescaledeEventStream.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
Segmentque 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
Periodestá representado por el tiempo de presentación de la marca de salida, y el inicio del segundo elementoPeriodes la suma depresentationTimeydurationde la marca de salida o el elementopresentationTimede la marca de entrada, si se proporciona.- Si se proporciona una marca de entrada para una marca de salida que tiene un elemento
duration,Periodse dividirá usando el punto de empalme anterior.
- Si se proporciona una marca de entrada para una marca de salida que tiene un elemento
- La inserción dinámica de anuncios de Google ignora los campos
splice_time,break_duration,auto_returnysplice_immediate_flagen 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_idosegmentation_event_id) y el atributoiddel evento no se tienen en cuenta. - Los mensajes de marca de salida
splice_insertsolo deben finalizar con un mensaje de marca de entradasplice_insertsiauto_returnno está definido. - Los mensajes de marca de salida
time_signalsolo deben finalizar con un mensaje de marca de entradatime_signalcon el mismosegmentation_type_id.
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 |
||
|---|---|---|
|
2.1.0 |
Compatibilidad con varios periodos |
|
|
1.47.3 |
Compatibilidad con varios periodos |
|
| 1.11.17 | Compatibilidad con un solo periodo | |
|
Jugadores |
||
|---|---|---|
|
Shaka |
Recomendado para pruebas |
|
|
Bitmovin |
||
|
ExoPlayer |
||
|
Dash.js |
||
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>