Este guia descreve os marcadores de anúncios aceitos pela API Video Stitcher. A API Video Stitcher identifica os limites do intervalo de anúncio por marcadores de anúncio no manifesto HLS/DASH de origem de uma transmissão ao vivo e realiza a junção de anúncios em um intervalo de anúncio para cada sessão da transmissão ao vivo.
Antes de começar
Verifique se você está familiarizado com os conceitos e a terminologia introdutórias na API Video Stitcher. Para mais informações, consulte a visão geral técnica.
Consulte a especificação SCTE-35 Digital Program Insertion Cueing Message For Cable.
Comandos SCTE-35
Os marcadores de anúncios de transmissões ao vivo são representados por indicadores SCTE-35 padrão. Na lista de comandos SCTE-35, a API Video Stitcher oferece suporte aos dois seguintes comandos:
splice_insert
time_signal
Com time_signal
, você pode fornecer outros metadados arbitrários para o
intervalo de anúncio associado no primeiro identificador de programa exclusivo (UPID) da segmentação.
A API Video Stitcher espera que o segmentation_upid_type
seja 0x0C
, que
significa MPU()
. O private_data
no MPU()
precisa ser uma string JSON codificada em base64, em que determinadas chaves JSON são reservadas para os seguintes fins
específicos:
%%AD_TAG_ID%%
: especifica a tag de anúncio a ser usada no intervalo de anúncio. O ID da tag de anúncio precisa ser uma das chaves naadTagMacros
da sessão ao vivo.%%SLATE_ID%%
: especifica a placa a ser usada para o intervalo de anúncio. O ID da prancha precisa corresponder ao ID de uma prancha que já foi criada no mesmo projeto do Google Cloud.
Todos os outros pares de chave-valor no payload do UPID são usados para a substituição de macros de tags de anúncios.
Por exemplo, se um URI da tag de anúncio for https://example.com?key=[foo]
e o private_data
for eyJmb28iOiJiYXIifQ==
, que é a representação base64 de {"foo":"bar"}
,
a API Video Stitcher vai substituir [foo]
por bar
e fazer uma solicitação de tag de anúncio
para https://example.com?key=bar
.
Integração do Google Ad Manager
No fluxo de trabalho de integração do Google Ad Manager, as mensagens SCTE35 podem conter alguns valores que podem ser substituídos na tag de anúncio. Consulte a lista de macros compatíveis.
Verifique se o adTagUri
registrado na configuração ativa
contém as macros escolhidas.
Por exemplo, se a mensagem SCTE35 transmitir um valor para
%%SPLICE_INSERT_EVENT_ID%%
, verifique se a macro existe no adTagUri
, conforme
ilustrado no exemplo a seguir:
AD_TAG_URI¯o=%%SPLICE_INSERT_EVENT_ID%%
Quando a API Video Stitcher solicita os metadados do anúncio e a mensagem splice_insert
SCTE35 tem splice_insert_event_id
definido como 123
, ela usa a seguinte tag de anúncio:
AD_TAG_URI¯o=123
Marcadores de anúncios HLS
EXT-X-DATERANGE
O uso de #EXT-X-DATERANGE
é especificado na
especificação HTTP Live Streaming:
- Uma tag
#EXT-X-DATERANGE
com o atributoSCTE35-OUT
indica o ponto de união de início imediato de um intervalo de anúncio. - Uma tag
#EXT-X-DATERANGE
com o atributoSCTE35-IN
indica o ponto de emenda imediato de um intervalo de anúncio. - Os valores de
SCTE35-OUT
eSCTE35-IN
devem ser codificados em hexadecimal.
Exemplo:
#EXT-X-DATERANGE:ID="111",START-DATE=START_DATE,SCTE35-OUT=0xFC302000000000000000FFF00F050000006F7FFF7E002932E0000000000000235EE5EF
...
#EXT-X-DATERANGE:ID="111",START-DATE=START_DATE,END-DATE=END_DATE,SCTE35-IN=0xFC302000000000000000FFF00F050000006F7F7F7E002932E0000000000000D56C4036
EXT-X-CUE-OUT e EXT-X-CUE-IN
Uma tag #EXT-X-CUE-OUT
indica o início imediato de um intervalo de anúncio, e
uma tag #EXT-X-CUE-IN
indica o fim imediato de um intervalo de anúncio.
Uma tag #EXT-OATCLS-SCTE35
pode ser usada para a mensagem SCTE-35, e o valor deve ser codificado em base64.
Exemplo (sem mensagem SCTE-35):
#EXT-X-CUE-OUT:DURATION=30
...
#EXT-X-CUE-IN
Exemplo (com mensagem SCTE-35):
#EXT-OATCLS-SCTE35:/DBBAAAAAAAAAP/wBQb+AAaXgAArAilDVUVJAAAAb3//AAApMuAMFXslJUFEX1RBR19JRCUlOnRhZy0xfTQAALOJefk=
#EXT-X-CUE-OUT:30
...
#EXT-X-CUE-IN
Se a duração de uma tag EXT-X-CUE-OUT
for especificada, esse valor
terá precedência, mesmo que a duração do intervalo de anúncio na mensagem SCTE-35 entre em conflito
com ele. Se a duração da tag EXT-X-CUE-OUT
não for especificada e uma for
especificada na mensagem SCTE-35 associada, o valor da mensagem
SCTE-35 será usado.
Marcadores de anúncio DASH
No momento, a API Video Stitcher só oferece suporte a manifestos DASH de vários períodos. Em
um manifesto DASH de vários períodos, um intervalo de anúncio precisa ser representado por um
Period
com um fluxo de eventos que contenha um marcador de saída. Um marcador de ponto de início não é
necessário, porque o fim do período de intervalo de anúncio indica o fim do intervalo de anúncio.
Se vários eventos de saída forem apresentados em um fluxo de eventos SCTE-35 de um período de intervalo de anúncio, a API Video Stitcher vai usar apenas o primeiro. O horário de apresentação do evento de saída é ignorado porque o horário de início do intervalo é o mesmo do início do período.
Confira a seguir uma lista de schemeIdUri
com suporte para um fluxo de eventos SCTE-35:
urn:scte:scte35:2014:xml+bin
urn:scte:scte35:2013:xml
urn:scte:scte35:2014:xml+bin
Um stream de eventos em que schemeIdUri
está definido como urn:scte:scte35:2014:xml+bin
contém eventos que representam mensagens SCTE-35 em binário codificado em base64.
Exemplo:
<Period start="PT444334H55M0.010S" id="break-1">
<EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin" timescale="90000">
<Event presentationTime="0" duration="5400000" id="1">
<Signal xmlns="urn:scte:scte35:2014:xml+bin">
<Binary xmlns="urn:scte:scte35:2014:xml+bin">/DBTAAAAAAAAAP/wBQb+AAaXgAA9AjtDVUVJAAAAAH//AABSZcAMJ3siJSVBRF9UQUdfSUQlJSI6InRhZy0xIiwiZGFzaCI6InRydWUifTQAABxkspA=</Binary>
</Signal>
</Event>
</EventStream>
...
</Period>
urn:scte:scte35:2013:xml
Um fluxo de eventos em que schemeIdUri
está definido como urn:scte:scte35:2013:xml
contém eventos que representam mensagens SCTE-35 em XML claro.
Exemplo:
<Period start="PT444334H55M0.010S" id="break-1">
<EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
<Event duration="5400000">
<scte35:SpliceInfoSection protocolVersion="0" ptsAdjustment="140429" tier="4095">
<scte35:SpliceInsert spliceEventId="1" spliceEventCancelIndicator="false" outOfNetworkIndicator="true" spliceImmediateFlag="false" uniqueProgramId="1" availNum="1" availsExpected="1">
<scte35:Program><scte35:SpliceTime ptsTime="5672624400"/></scte35:Program>
<scte35:BreakDuration autoReturn="true" duration="5400000"/>
</scte35:SpliceInsert>
</scte35:SpliceInfoSection>
</Event>
</EventStream>
...
</Period>
Notificação antecipada de intervalo de anúncio para transmissões ao vivo
Para a costura ao vivo, as tags de anúncios são processadas de forma síncrona quando a API Video Stitcher recebe o marcador de anúncio de saída no manifesto de uma transmissão ao vivo. Esse processamento síncrono aciona um grande número de solicitações de tag de anúncio e causa longos atrasos nas solicitações de reprodução da sessão ao vivo se o fluxo estiver muito populoso.
A notificação antecipada de intervalo de anúncio (EABN) dá à API Video Stitcher mais tempo para preparar anúncios ao notificar a API sobre um intervalo de anúncio próximo.
Notificação antecipada de intervalo de anúncio HLS
Para notificar a API sobre um intervalo de anúncio futuro e permitir que ela prepare os anúncios com antecedência, a playlist HLS de uma transmissão ao vivo precisa:
- Use
#EXT-X-DATERANGE
ouEXT-X-CUE-OUT
como marcador do anúncio - Repetir um marcador de anúncio de saída no manifesto de origem da transmissão ao vivo
#EXT-X-DATERANGE
Quando o codificador da fonte programa um intervalo de anúncio, ele pode inserir um
marcador de saída #EXT-X-DATERANGE
no manifesto da fonte. O atributo
X-TYPE
do marcador indica o tipo de marcador de anúncio. Para a notificação intervalo de anúncio antecipado, o valor de X-TYPE
precisa ser EABN
. O atributo
START-TIME
do marcador indica o horário de início real ou planejado do intervalo de intervalo de anúncio.
O atributo DURATION
do marcador é necessário para indicar a duração do
intervalo de anúncio. Esse marcador é chamado de saída de EBAN.
No início do intervalo de anúncio, o codificador da origem precisa inserir um
marcador de saída #EXT-X-DATERANGE
no manifesto da origem. O atributo ID
do marcador precisa ser o mesmo que a saída de EABN correspondente. O START-TIME
do marcador precisa ser igual ao tempo de mídia do segmento em que esse marcador
é inserido. Esse marcador é chamado de saída imediata.
O exemplo de manifesto a seguir contém uma saída de sinalização EABN, uma saída de sinalização imediata e uma entrada de sinalização:
#EXTM3U
#EXT-X-TARGETDURATION:4
#EXT-X-VERSION:7
#EXT-X-PROGRAM-DATE-TIME:2020-11-08T21:11:20.976Z
#EXT-X-MEDIA-SEQUENCE:239959
#EXT-X-DISCONTINUITY-SEQUENCE:2
#EXT-X-DATERANGE:ID="2415919105",X-TYPE="EABN",START-DATE="2020-11-08T21:11:28.976Z",DURATION=29.988,SCTE35-OUT=0xFC303...
#EXTINF:4.000,
1028/segment_239959.ts
#EXTINF:4.000,
1028/segment_239960.ts
#EXT-X-DATERANGE:ID="2415919105",START-DATE="2020-11-08T21:11:28.976Z",DURATION=29.988,SCTE35-OUT=0xFC303...
#EXTINF:4.000,
1028/segment_239961.ts
#EXTINF:4.000,
1028/segment_239962.ts
#EXTINF:4.000,
1028/segment_239963.ts
...
#EXT-X-DATERANGE:ID="2415919105",END-DATE="2020-11-08T21:11:48.976Z",SCTE35-IN=0xFC303...
#EXTINF:4.000,
1028/segment_239968.ts
#EXT-X-CUE-OUT
- Usar
#EXT-X-CUE-OUT
como marcador do anúncio - Repetir um marcador de anúncio de saída no manifesto de origem da transmissão ao vivo
Quando o codificador de origem programa um intervalo de anúncio, ele também pode inserir um
marcador de saída #EXT-X-CUE-OUT
no manifesto de origem. O atributo
X-TYPE
do marcador indica o tipo de marcador de anúncio. Para a notificação intervalo de anúncio antecipado, o valor de X-TYPE
precisa ser EABN
. O atributo
DURATION
do marcador precisa indicar a duração do intervalo de anúncio.
Esse marcador é chamado de saída de EBAN.
No início do intervalo de anúncio, o codificador da origem precisa inserir um
marcador de saída #EXT-X-CUE-OUT
no manifesto da origem. O atributo ID
do marcador precisa ser o mesmo que a saída de EABN correspondente. Esse marcador
é chamado de saída imediata.
O exemplo de manifesto a seguir contém uma saída de sinalização EABN, uma saída de sinalização imediata e uma entrada de sinalização:
#EXTM3U
#EXT-X-TARGETDURATION:4
#EXT-X-VERSION:7
#EXT-X-PROGRAM-DATE-TIME:2020-11-08T21:11:20.976Z
#EXT-X-MEDIA-SEQUENCE:239959
#EXT-X-DISCONTINUITY-SEQUENCE:2
#EXT-OATCLS-SCTE35:0xFC303...
#EXT-X-CUE-OUT:ID="2415919105",X-TYPE="EABN",DURATION=29.988
#EXTINF:4.000,
1028/segment_239959.ts
#EXTINF:4.000,
1028/segment_239960.ts
#EXT-OATCLS-SCTE35:0xFC303...
#EXT-X-CUE-OUT:ID="2415919105",DURATION=29.988
#EXTINF:4.000,
1028/segment_239961.ts
#EXTINF:4.000,
1028/segment_239962.ts
#EXTINF:4.000,
1028/segment_239963.ts
...
#EXT-X-CUE-IN:ID="2415919105"
#EXTINF:4.000,
1028/segment_239968.ts
Notificação antecipada de intervalo de anúncio do DASH
Para notificar a API sobre um intervalo de anúncio que vai acontecer para que ela possa preparar os anúncios com antecedência,
um manifesto de transmissão ao vivo DASH precisa repetir o evento de marcador de anúncio no Main Period
e
no Ad Break Period
.
A primeira aparição no Main Period
notifica a API de um intervalo de anúncio
iminente, e a segunda aparição no Ad Break Period
indica o
início imediato do intervalo de anúncio.
Confira a seguir um exemplo de manifesto:
<MPD>
<Period id="1">
<!-- Main Period -->
<EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
<Event duration="5400000" presentationTime="53460000" id="1">
<scte35:SpliceInfoSection>
<scte35:SpliceInsert outOfNetworkIndicator="true" spliceImmediateFlag="true">
<scte35:BreakDuration autoReturn="true" duration="5400000"/>
</scte35:SpliceInsert>
</scte35:SpliceInfoSection>
</Event>
</EventStream>
...
</Period>
<Period start="PT9M54S" id="2">
<!-- Ad Break Period -->
<EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
<Event duration="5400000" id="1">
<scte35:SpliceInfoSection>
<scte35:SpliceInsert outOfNetworkIndicator="true" spliceImmediateFlag="true">
<scte35:BreakDuration autoReturn="true" duration="5400000"/>
</scte35:SpliceInsert>
</scte35:SpliceInfoSection>
</Event>
</EventStream>
...
</Period>
<Period start="PT10M54S" id="3">
<!-- Main Period -->
...
</Period>
</MPD>
A seguir
Saiba como concluir tarefas específicas da API Video Stitcher.