خرابی های تبلیغاتی

Android TV Receiver SDK دارای پشتیبانی بومی برای Ad Breaks و تبلیغات همراه در یک جریان رسانه خاص است.

برای کسب اطلاعات بیشتر در مورد نحوه عملکرد وقفه‌های تبلیغاتی ، به نمای کلی وقفه‌های تبلیغاتی گیرنده وب مراجعه کنید.

مدیریت بار با وقفه های تبلیغاتی

در برنامه Android TV شما، وقفه‌ها در MediaLoadRequestData گنجانده شده است. درخواست های بارگذاری را می توان به طور معمول پردازش کرد و AdBreakClipInfo و AdBreakInfo را می توان از 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 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;
    });
    }
}

به روز رسانی وقفه های تبلیغاتی

هنگامی که تبلیغات شروع به پخش می کنند، AdBreakStatus را در MediaStatusModifier به روز کنید تا برنامه شما شروع به پخش تبلیغات کرده است:

کاتلین
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);

همچنین می توانید پس از بارگیری یک مورد، وقفه های تبلیغاتی را به صورت پویا تغییر دهید:

کاتلین
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});

فعال کردن و مدیریت پرش آگهی

هنگامی که یک وقفه تبلیغاتی در حال پخش است، فرستنده‌ها دکمه‌ای را نشان می‌دهند که در صورت قابل رد شدن از کلیپ فعلی استراحت، رد می‌شود. برای فعال کردن توانایی کاربر برای پرش از یک کلیپ استراحت تبلیغاتی، از MediaStatusModifier برای اضافه کردن دستور رسانه COMMAND_SKIP_AD استفاده کنید:

کاتلین
mMediaManager.getMediaStatusModifier().setMediaCommandSupported(MediaStatus.COMMAND_SKIP_AD, true)
جاوا
mMediaManager.getMediaStatusModifier().setMediaCommandSupported(MediaStatus.COMMAND_SKIP_AD, true);

برای کنترل دستور SKIP_AD ، پاسخ تماس onSkipAd را در 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 Task onSkipAd(RequestData requestData) {
    // Skip your ad
    ...
    return Tasks.forResult(null);
  }
}

MediaManager mediaManager =
    CastReceiverContext.getInstance().getMediaManager();
mediaManager.setMediaCommandCallback(new MyMediaCommandCallback());

دوخت سمت مشتری

دوخت سمت مشتری جایی است که تبلیغات در جریان تعبیه نشده است. برای Cast Connect، علاوه بر به‌روزرسانی AdBreakStatus در MediaStatusModifier ، باید سرعت پخش را روی 0 در PlaybackStateCompat تنظیم کنید تا فرستندگان بدانند پیشرفت خط زمانی محتوا را ثابت کنند.

کاتلین
// 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());

پس از پایان آگهی، باید سرعت پخش قبلی را از سر بگیرید.

دوخت سمت سرور

برای دوخت سمت سرور ، تبلیغات جاسازی شده‌اند، بنابراین انتظار می‌رود سرور یک جریان واحد را ارائه دهد که هم محتوا و هم تبلیغات را در بر می‌گیرد. در این حالت، پخش می‌تواند به طور عادی به پیشرفت خود ادامه دهد، زیرا جدول زمانی علاوه بر محتوا، مدت زمان تبلیغ را نیز در بر می‌گیرد.