במדריך הזה מוסבר איך להטמיע סימון של מיקום בסרטון באמצעות IMA DAI SDK כשמשתמשים בהצגת מודעות דינמיות (DAI) בשידורים של סרטונים על פי דרישה (VOD). ההנחה היא שיש לכם הטמעה תקינה של IMA DAI, כמו זו שמוצגת במאמר תחילת העבודה.
מה זה סימון באמצעות סימנייה?
סימון מיקום הוא היכולת לשמור נקודה ספציפית בתוכן ואז לחזור אליה. נניח שמשתמש צופה בחמש דקות של תוכן, יוצא משידור הווידאו ואז חוזר אליו. הוספת סימנייה שומרת את המיקום של המשתמש בשידור, כך שהשידור יכול להמשיך מהמקום שבו הוא הפסיק, ולספק לצופים חוויה חלקה.
הוספת סימניות ב-DAI מאחורי הקלעים
כשמוסיפים לסימנייה סטרימינג של DAI, צריך לתעד את מזהה הסטרימינג ואת השעה שבה המשתמש עוזב את הסרטון. כשהמשתמש חוזר, צריך לשלוח שוב בקשה לסטרימינג ולחפש את השעה שנשמרה. מכיוון שלכל מופע של הזרם המבוקש יכולים להיות הפסקות פרסום באורכים שונים, שמירת הזמן של הזרם לא תעבוד. מה שאתם באמת רוצים לעשות זה להמשיך מאותו מיקום בתוכן.
שיטות המרה שיעזרו לכם
ערכת IMA DAI SDK מספקת זוג שיטות לבקשת זמן התוכן עבור זמן נתון בסטרימינג, וזמן בסטרימינג עבור זמן נתון של התוכן. באמצעות שיטות ההמרה האלה אפשר לאחסן את השעה בתוכן שסומן בסימנייה, ואז לעבור אל השעה המתאימה בשידור במופע החדש של השידור. בהמשך מוסבר על הגישה, כולל קישור לאפליקציה לדוגמה שבה מוצגת הטמעה של סימון דפים במועדפים.
שמירת סימניות
שמירת סימנייה כשהפעילות מושהית.
Objective-C
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.contentPlayer pause];
// Ignore this if we're presenting a modal view (e.g. in-app clickthrough).
if ([self.navigationController.viewControllers indexOfObject:self] == NSNotFound) {
// Don't save bookmark if we're playing a live stream.
if (self.video.streamType != StreamTypeLive) {
NSTimeInterval contentTime = [self.streamManager
contentTimeForStreamTime:CMTimeGetSeconds(self.contentPlayer.currentTime)];
[self.delegate videoViewController:self didReportSavedTime:contentTime forVideo:self.video];
}
Swift
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
contentPlayer.pause()
if isMovingFromParent {
// Only save bookmark if we're playing a VOD stream.
if let vodStream = stream as? VODStream, let streamManager = streamManager {
let contentTime = streamManager.contentTime(
forStreamTime: contentPlayer.currentTime().seconds)
if contentTime.isFinite, contentTime > 0 {
delegate?.videoViewController(self, didReportBookmarkedTime: contentTime, for: vodStream)
}
}
if trackingContent {
removeContentPlayerObservers()
}
streamManager?.destroy()
adsLoader?.contentComplete()
streamManager = nil
adsLoader = nil
}
}
הסימניות בטעינה
טוענים את הסימנייה כשמבקשים שוב להפעיל שידור. היא חלק מההטמעה של ממשק VideoStreamPlayer.
Objective-C
case kIMAAdEvent_STREAM_LOADED: {
if (self.video.streamType == StreamTypeVOD) {
[self addContentPlayerObservers];
if (self.video.savedTime > 0) {
NSTimeInterval streamTime =
[self.streamManager streamTimeForContentTime:self.video.savedTime];
[self.IMAVideoDisplay seekStreamToTime:streamTime];
self.video.savedTime = 0;
}
}
Swift
case .STREAM_LOADED:
guard let stream else { return }
addContentPlayerObservers()
if let vodStream = stream as? VODStream, vodStream.bookmarkTime > 0 {
bookmarkStreamTime = streamManager.streamTime(forContentTime: vodStream.bookmarkTime)
if let time = bookmarkStreamTime {
pendingBookmarkSeek = true
logMessage(
"STREAM_LOADED: Bookmark pending for contentTime: \(String(format: "%.2f", vodStream.bookmarkTime)) (streamTime: \(String(format: "%.2f", time)))"
)
vodStream.bookmarkTime = 0
}
}