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 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; }); } }
به روز رسانی وقفه های تبلیغاتی
هنگامی که تبلیغات شروع به پخش می کنند، 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 TaskonSkipAd(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());
پس از پایان آگهی، باید سرعت پخش قبلی را از سر بگیرید.
دوخت سمت سرور
برای دوخت سمت سرور ، تبلیغات جاسازی شدهاند، بنابراین انتظار میرود سرور یک جریان واحد را ارائه دهد که هم محتوا و هم تبلیغات را در بر میگیرد. در این حالت، پخش میتواند به طور عادی به پیشرفت خود ادامه دهد، زیرا جدول زمانی علاوه بر محتوا، مدت زمان تبلیغ را نیز در بر میگیرد.