Pausas publicitarias

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 AdBreakClipInfos y AdBreakInfos se puede recuperar desde MediaInfo:

Kotlin
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
    }
  }
}
.
.
Java
public class MyMediaLoadCommandCallback extends MediaLoadCommandCallback {
  @Override
  public Task onLoad(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:

Kotlin
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)
.
.
Java
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:

Kotlin
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})
.
.
Java
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:

Kotlin
mMediaManager.getMediaStatusModifier().setMediaCommandSupported(MediaStatus.COMMAND_SKIP_AD, true)
.
.
Java
mMediaManager.getMediaStatusModifier().setMediaCommandSupported(MediaStatus.COMMAND_SKIP_AD, true);

Para controlar el comando SKIP_AD, implementa la onSkipAd en tu MediaCommandCallback:

Kotlin
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())
.
.
Java
public class MyMediaCommandCallback extends MediaCommandCallback {
  @Override
  public Task onSkipAd(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.

Kotlin
// 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())
.
.
Java
// 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.