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 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.
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.
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 de 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 de MPD
type
está definido comodynamic
.profile
está definido comourn: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 atributopublishTime
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 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
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 elementoRepresentation
.- Si están presentes, los elementos
ContentProtection
deAdaptationSet
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
niSegmentList
.
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
deSegmentTimeline
pueden contener el atributot
, que se usa para las URLs de contenido multimedia.- Si no se proporciona ningún valor, se presupone que es
0
para el primer elementoS
. Para los siguientes elementosS
, se presupone que el valor es la suma del tiempo de presentación del elementoS
anterior y la duración contigua (el valor de [t
+d
× (r
+ 1) ] del elementoS
anterior). $Time$
y$Number$
se admiten en archivos de manifiesto de varios periodos.s
tartNumber
deSegmentTemplate
no 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
SegmentTimeline
si 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
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
yCUE-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>
- Elementos
- 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
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 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). |
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
- 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 de MPD
type
está definido comodynamic
.profiles
está definido comourn: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 elementoAdaptationSet
.
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 elementoEventStream
. - Los elementos de
Event
solo pueden añadirse al final de un elementoEventStream
.
Validaciones de elementos de AdaptationSet
AdaptationSet
tiene al menos un elementoRepresentation
.- Si están presentes, los elementos
ContentProtection
deAdaptationSet
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
niSegmentList
.
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
deSegmentTimeline
pueden contener el atributot
, que se usa para las URLs de contenido multimedia.- Si no se proporciona ningún valor, se presupone que es
0
para el primer elementoS
. Para los siguientes elementosS
, se presupone que el valor es la suma del tiempo de presentación del elementoS
anterior y la duración contigua (el valor de [t
+d
× (r
+ 1) ] del elementoS
anterior). $Time$
es compatible con los archivos de manifiesto de un solo periodo.$Number$
todavía no se admite.s
tartNumber
deSegmentTemplate
no 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
SegmentTimeline
si 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
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
- Validaciones de splice_insert
- Validaciones de time_signal
- Validaciones de tiempo de presentación
- Periodos y eventos de mensajes de puntos 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
Binary
del elementoSignal
de un evento.- Se admite
splice_insert
. - Se admite
time_signal
con comandossegmentation_descriptor
.
- Se admite
- Los elementos de
EventStream
que contienen eventos con marcadores SCTE-35 tienenschemeIdUri
definido comourn:scte:scte35:2014:xml+bin
. - El espacio de nombres
Signal
debe estar definido comohttp://www.scte.org/schemas/35/2016
. - En el caso de los puntos de salida, debe definirse el valor de
presentationTime
enEvent
. - En el caso de los puntos de entrada, debe definirse el valor de
presentationTime
enEvent
y no debe establecerse la duración. - Los elementos de
Event
enEventStream
deben 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 un punto de salida
splice_insert
que tieneout_of_network_indicator
definido como1
. - Hay un punto de entrada
splice_insert
que tieneout_of_network_indicator
definido como0
. - Los puntos de entrada son opcionales si el elemento de
Event
que contiene el punto de salida essplice_insert
y tiene un valor distinto de 0 enduration
.- 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 depresentationTime
+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.
- La inserción dinámica de anuncios de Google interpreta un punto de entrada implícito
Validaciones de time_signal
- Hay un punto de salida
time_signal
cuyosegmentation_descriptor
ysegmentation_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
cuyosegmentation_descriptor
ysegmentation_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
delMPD
, sumando el valor depresentationTime
deEvent
definido portimescale
deEventStream
al valor destart
dePeriod
.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
deEvent
/timescale
deEventStream
.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 elementoPeriod
es la suma depresentationTime
yduration
del punto de salida opresentationTime
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.
- Si se proporciona un punto de entrada para un punto de salida que tiene
- La inserción dinámica de anuncios de Google ignora los campos
splice_time
,break_duration
,auto_return
ysplice_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
osegmentation_event_id
) y el atributoid
del evento no se tienen en cuenta. - Los mensajes de punto de salida
splice_insert
solo deben finalizar por un mensaje de punto de entradasplice_insert
siauto_return
no está definido. - Los mensajes de punto de salida
time_signal
solo deben finalizar por un mensaje de punto de entradatime_signal
con 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>