این راهنما نحوه پیادهسازی نشانکگذاری را با استفاده از IMA DAI SDK هنگام استفاده از درج آگهی پویا (DAI) برای جریانهای ویدیویی بر اساس تقاضا (VOD) نشان میدهد. این یک پیاده سازی IMA DAI را فرض می کند، مانند آنچه در Get Started ارائه شده است.
نشانه گذاری چیست؟
نشانک گذاری توانایی ذخیره و سپس بازگشت به یک نقطه خاص در جریان محتوا است. فرض کنید کاربر پنج دقیقه محتوا را تماشا می کند، جریان ویدیو را ترک می کند و سپس به آن باز می گردد. نشانکگذاری موقعیت کاربر را در جریان ذخیره میکند تا جریان بتواند از جایی که متوقف شده است ادامه یابد و تجربهای بینظیر برای بیننده فراهم کند.
نشانه گذاری DAI در زیر کاپوت
هنگام نشانه گذاری یک جریان DAI، باید شناسه جریان و زمان خروج کاربر از ویدیو را ضبط کنید. پس از بازگشت کاربر، جریان را دوباره درخواست کنید و زمان ذخیره شده را جستجو کنید. از آنجایی که هر نمونه از جریان درخواستی میتواند دارای وقفههای تبلیغاتی با مدت زمان متفاوت باشد، صرفهجویی در زمان پخش کار نخواهد کرد. کاری که واقعاً می خواهید انجام دهید این است که از همان زمان محتوا ادامه دهید.
روش های تبدیل به نجات
IMA DAI SDK یک جفت روش برای درخواست زمان محتوا برای یک زمان پخش جریانی معین و زمان پخش برای یک زمان محتوا ارائه می دهد. با استفاده از این روشهای تبدیل، میتوانید زمان محتوای نشانهگذاریشده را ذخیره کنید و سپس زمان پخش متناظر را در نمونه جدید جریان جستجو کنید. در اینجا این رویکرد است، از جمله پیوندی به یک برنامه نمونه که اجرای نشانهگذاری کارآمد را نشان میدهد.
ذخیره نشانک ها
هنگامی که فعالیت متوقف می شود، یک نشانک ذخیره کنید.
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.contentPlayer pause];
// Ignore this if you're presenting a modal view (e.g. in-app clickthrough).
if ([self.navigationController.viewControllers indexOfObject:self] ==
NSNotFound) {
NSTimeInterval contentTime =
[self.streamManager contentTimeForStreamTime:CMTimeGetSeconds(
self.contentPlayer.currentTime)];
self.video.savedTime = contentTime;
...
}
}
}
در حال بارگیری نشانک ها
هنگام درخواست مجدد جریان، نشانک را بارگیری کنید. این بخشی از پیاده سازی رابط VideoStreamPlayer
است.
- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event {
...
case kIMAAdEvent_STREAM_LOADED: {
if (self.video.savedTime > 0) {
NSTimeInterval streamTime =
[self.streamManager streamTimeForContentTime:self.video.savedTime];
[self.IMAVideoDisplay.playerItem
seekToTime:CMTimeMakeWithSeconds(streamTime, NSEC_PER_SEC)];
self.video.savedTime = 0;
}
}
}