ذخیره و بارگیری نشانکهای جریان آگهی، ذخیره و بارگیری نشانکهای جریان آگهی، ذخیره و بارگیری نشانکهای جریان آگهی، ذخیره و بارگیری نشانکهای جریان آگهی
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
این راهنما نحوه پیادهسازی نشانکگذاری را با استفاده از 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;
}
}
}
نمونه برنامه
نمونه برنامه
جز در مواردی که غیر از این ذکر شده باشد،محتوای این صفحه تحت مجوز Creative Commons Attribution 4.0 License است. نمونه کدها نیز دارای مجوز Apache 2.0 License است. برای اطلاع از جزئیات، به خطمشیهای سایت Google Developers مراجعه کنید. جاوا علامت تجاری ثبتشده Oracle و/یا شرکتهای وابسته به آن است.
تاریخ آخرین بهروزرسانی 2025-08-21 بهوقت ساعت هماهنگ جهانی.
[null,null,["تاریخ آخرین بهروزرسانی 2025-08-21 بهوقت ساعت هماهنگ جهانی."],[[["\u003cp\u003eThis guide explains how to implement bookmarking in video-on-demand (VOD) streams using the IMA DAI SDK for a seamless viewing experience.\u003c/p\u003e\n"],["\u003cp\u003eBookmarking involves saving the user's content time, not just the stream time, to ensure accurate resumption upon return.\u003c/p\u003e\n"],["\u003cp\u003eThe IMA DAI SDK provides methods to convert between stream time and content time, which are crucial for bookmarking functionality.\u003c/p\u003e\n"],["\u003cp\u003eSaving bookmarks involves recording the content time when the user pauses the video, while loading bookmarks requires seeking to the corresponding stream time in the new stream instance.\u003c/p\u003e\n"],["\u003cp\u003eA sample app demonstrating bookmarking implementation is available on GitHub.\u003c/p\u003e\n"]]],["Bookmarking in Dynamic Ad Insertion (DAI) involves saving a user's position in a video stream and resuming from that point. Instead of saving stream time, the system records the content time using conversion methods provided by the IMA DAI SDK. When the user leaves, the content time is saved. Upon return, the saved content time is used to calculate the new stream time, allowing seeking to the correct point in the stream. The process is demonstrated with sample code and a provided sample application.\n"],null,["# Save and load ad stream bookmarks\n\nThis guide shows how to implement bookmarking using the IMA DAI SDK\nwhen using Dynamic Ad Insertion (DAI) for video-on-demand (VOD) streams.\nThis assumes a working IMA DAI implementation, such as the one presented in\n\n\n[Get Started](/interactive-media-ads/docs/sdks/ios/dai-quickstart).\n\n\nWhat is bookmarking?\n--------------------\n\nBookmarking is the ability to save and then return to a specific point\nin the content stream. Suppose a user watches five minutes of content,\nleaves the video stream, and then returns to it. Bookmarking saves the\nuser's position in the stream so the stream can pick up from where it\nleft off, providing a seamless experience to the viewer.\n\nDAI bookmarking under the hood\n------------------------------\n\nWhen bookmarking a DAI stream, you must record the stream id and time\nwhen the user leaves the video. When the user returns, re-request the\nstream and seek to the saved time. Since each instance of the requested\nstream can have ad breaks of different durations simply saving the stream\ntime won't work. What you really want to do is continue from the same\n**content time**.\n\nConversion methods to the rescue\n--------------------------------\n\nThe IMA DAI SDK provides a pair of methods to request the **content time**\nfor a given **stream time** and the **stream time** for a given **content\ntime** . Using these conversion methods you can store the bookmarked\n**content time** and then seek to the corresponding **stream time** in\nthe new instance of the stream. Here's the approach, including a link\nto a sample app that shows a working bookmarking implementation.\n\nSaving bookmarks\n----------------\n\nSave a bookmark when the Activity is paused. \n\n - (void)viewWillDisappear:(BOOL)animated {\n [super viewWillDisappear:animated];\n [self.contentPlayer pause];\n // Ignore this if you're presenting a modal view (e.g. in-app clickthrough).\n if ([self.navigationController.viewControllers indexOfObject:self] ==\n NSNotFound) {\n NSTimeInterval contentTime =\n [self.streamManager contentTimeForStreamTime:CMTimeGetSeconds(\n self.contentPlayer.currentTime)];\n self.video.savedTime = contentTime;\n ...\n }\n }\n }\n\nLoading bookmarks\n-----------------\n\nLoad the bookmark when re-requesting a stream. It's part of implementing\nthe `VideoStreamPlayer` interface. \n\n - (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event {\n ...\n case kIMAAdEvent_STREAM_LOADED: {\n if (self.video.savedTime \u003e 0) {\n NSTimeInterval streamTime =\n [self.streamManager streamTimeForContentTime:self.video.savedTime];\n [self.IMAVideoDisplay.playerItem\n seekToTime:CMTimeMakeWithSeconds(streamTime, NSEC_PER_SEC)];\n self.video.savedTime = 0;\n }\n }\n }\n\nSample app\n----------\n\n[Sample app](//github.com/googleads/googleads-ima-ios-dai)"]]