El SDK de receptor de Android TV incluye compatibilidad nativa con pausas publicitarias y anuncios complementarios. anuncios en un flujo de medios determinado.
Consulta la descripción general de las pausas publicitarias del receptor web. para obtener más información sobre el funcionamiento de las pausas publicitarias.
Controla la carga con pausas publicitarias
En tu app para Android TV, las pausas se incluyen en
MediaLoadRequestData
Las solicitudes de carga se pueden procesar normalmente, y el
AdBreakClipInfo
s
y
AdBreakInfo
s
se puede recuperar desde
MediaInfo
:
class MyMediaLoadCommandCallback : MediaLoadCommandCallback() { override fun onLoad( senderId: String?, loadRequestData: MediaLoadRequestData ): Task{ return Tasks.call { // Resolve the entity into your data structure and load media. val mediaInfo = loadRequestData.mediaInfo ... myPrepareAdBreaks(mediaInfo.adBreakClips, mediaInfo.adBreaks) // Update media metadata and state (this clears all previous status // overrides). castReceiverContext.getMediaStatusModifier() .setDataFromLoad(mediaInfo) // Ad breaks are set on the modifier. castReceiverContext.getMediaManager().broadcastMediaStatus() // Return the resolved MediaLoadRequestData to indicate load success. return loadRequestData } } }
public class MyMediaLoadCommandCallback extends MediaLoadCommandCallback { @Override public TaskonLoad(String senderId, MediaLoadRequestData loadRequestData) { return Tasks.call(() -> { // Resolve the entity into your data structure and load media. MediaInfo mediaInfo = loadRequestData.getMediaInfo(); ... myPrepareAdBreaks(mediaInfo.getAdBreakClips(), mediaInfo.getAdBreaks()); // Update media metadata and state (this clears all previous status // overrides). castReceiverContext.getMediaStatusModifier() .setDataFromLoad(mediaInfo); // Ad breaks are set on the modifier. castReceiverContext.getMediaManager().broadcastMediaStatus(); // Return the resolved MediaLoadRequestData to indicate load success. return loadRequestData; }); } }
Actualizando pausas publicitarias
Cuando los anuncios comiencen a reproducirse, actualiza la
AdBreakStatus
en la
MediaStatusModifier
para transmitir que tu app comenzó a reproducir anuncios:
val breakStatus = AdBreakStatus.Builder() .setBreakId("b1") .setBreakClipId("bc1") .setCurrentBreakClipTimeInMs(breakClipProgress) .setCurrentBreakTimeInMs(breakProgress) .setWhenSkippableInMs(5000) // Set this field so that the ad break clip is skippable .build() castReceiverContext.getMediaStatusModifier() .setAdBreakStatus(breakStatus)
AdBreakStatus breakStatus = new AdBreakStatus.Builder() .setBreakId("b1") .setBreakClipId("bc1") .setCurrentBreakClipTimeInMs(breakClipProgress) .setCurrentBreakTimeInMs(breakProgress) .setWhenSkippableInMs(5000) // Set this field so that the ad break clip is skippable .build(); castReceiverContext.getMediaStatusModifier() .setAdBreakStatus(breakStatus);
También puedes modificar de forma dinámica las pausas publicitarias después de que se carga un elemento. Para ello, sigue estos pasos:
var breakClip1: AdBreakClipInfo = ... var breakClip2: AdBreakClipInfo = ... var breakClip3: AdBreakClipInfo = ... var break1: AdBreakInfo = ... var break2: AdBreakInfo = ... mediaManager.getMediaStatusModifier().getMediaInfoModifier() .setAdBreakClips({breakClip1, breakClip2, breakClip3}) .setAdBreaks({break1, break2})
AdBreakClipInfo breakClip1 = ... AdBreakClipInfo breakClip2 = ... AdBreakClipInfo breakClip3 = ... AdBreakInfo break1 = ... AdBreakInfo break2 = ... mediaManager.getMediaStatusModifier().getMediaInfoModifier() .setAdBreakClips({breakClip1, breakClip2, breakClip3}) .setAdBreaks({break1, break2});
Cómo habilitar y controlar la omisión de anuncios
Cuando se esté reproduciendo una pausa publicitaria, los remitentes mostrarán un botón para omitir la actual
clip de pausa publicitaria si se puede omitir. Para permitir que un usuario omita un anuncio
clip de ruptura, usa el
MediaStatusModifier
para agregar
COMMAND_SKIP_AD
Comando multimedia:
mMediaManager.getMediaStatusModifier().setMediaCommandSupported(MediaStatus.COMMAND_SKIP_AD, true)
mMediaManager.getMediaStatusModifier().setMediaCommandSupported(MediaStatus.COMMAND_SKIP_AD, true);
Para controlar el comando SKIP_AD
, implementa la
onSkipAd
en tu
MediaCommandCallback
:
class MyMediaCommandCallback : MediaCommandCallback() { override fun onSkipAd(requestData: RequestData?): Task<Void?> { // Skip your ad ... return Tasks.forResult<Any?>(null) } } val mediaManager = CastReceiverContext.getInstance().mediaManager mediaManager.setMediaCommandCallback(MyMediaCommandCallback())
public class MyMediaCommandCallback extends MediaCommandCallback { @Override public TaskonSkipAd(RequestData requestData) { // Skip your ad ... return Tasks.forResult(null); } } MediaManager mediaManager = CastReceiverContext.getInstance().getMediaManager(); mediaManager.setMediaCommandCallback(new MyMediaCommandCallback());
Unión del cliente
Unión del cliente
es cuando los anuncios no se incorporan en la transmisión. Para Cast Connect, además de
actualizando los
AdBreakStatus
en la
MediaStatusModifier
debes configurar la velocidad de reproducción en 0 en la
PlaybackStateCompat
para que los remitentes sepan que deben inmovilizar el progreso del cronograma del contenido.
// Playback speed should be 0 if content is not playing. if (adIsPlaying) { playbackSpeed = 0.0f } val stateBuilder = PlaybackStateCompat.Builder() .setActions(AVAILABLE_MEDIA_ACTIONS) stateBuilder.setState(playbackStateCompat, position, playbackSpeed) mediaSession.setPlaybackState(stateBuilder.build())
// Playback speed should be 0 if content is not playing. if (adIsPlaying) { playbackSpeed = 0.0f; } PlaybackStateCompat.Builder stateBuilder = new PlaybackStateCompat.Builder() .setActions(AVAILABLE_MEDIA_ACTIONS); stateBuilder.setState(playbackStateCompat, position, playbackSpeed); mediaSession.setPlaybackState(stateBuilder.build());
Una vez que finalice el anuncio, deberías reanudar la velocidad de reproducción anterior.
Unión del servidor
Para unión del servidor, los anuncios están incorporados, por lo que se espera que el servidor proporcione una sola transmisión que incluye tanto el contenido como los anuncios. En este caso, la reproducción puede continuar. Se avanza normalmente, ya que el cronograma contiene la duración del anuncio. al contenido.