במדריך הזה נסביר איך להפעיל שידור חי או שידור VOD עם הצגת מודעות Pod ב-DAI באמצעות IMA DAI SDK ל-tvOS עם נגן וידאו. כדי לראות או לעקוב אחרי שילוב לדוגמה שהושלם, הורידו את האפליקציה לדוגמה של Pod Serving (Obj C או Swift).
סקירה כללית על הצגת מודעות ברצף (Pod) ב-IMA DAI
כדי להטמיע את Pod Serving באמצעות IMA DAI SDK ל-tvOS, צריך להשתמש בשני רכיבים עיקריים:
StreamRequest: אובייקט שמגדיר בקשת סטרימינג לשרתי הפרסום של Google. כדי להפעיל הצגת מודעות ברצף, צריך ליצור את המודעות באמצעותIMAPodStreamRequestאוIMAPodVODStreamRequest. בשתי השיטות צריך קוד רשת, ובשיטה שלIMAPodStreamRequestצריך גם מפתח נכס בהתאמה אישית. לא חובה להשתמש במפתח API.IMAStreamManager: אובייקט שמטפל בתקשורת בין שידור הווידאו לבין IMA DAI SDK, למשל הפעלת פינגים למעקב והעברת אירועים בשידור לבעל האפליקציה.
דרישות מוקדמות
לפני שמתחילים, צריך:
- Xcode מגרסה 13 ואילך.
- שיטה להתקנת IMA SDK:
- Swift Package Manager (מועדף)
- עותק להורדה של IMA SDK ל-tvOS
- אפליקציית tvOS שכבר מוגדרת עם IMA DAI SDK להפעלת שידורי וידאו עם מודעות DAI. אם אין לכם אפליקציה כזו, מומלץ להשתמש ב-tvOS DAI BasicExample כנקודת התחלה. ב-BasicExample יש את בסיס הקוד שאליו מתייחס המדריך הזה. מידע נוסף על הטמעת IMA DAI SDK זמין במדריך למתחילים.
הגדרת המשתנים של הצגת מודעות ברצף
מבצעים את כל השינויים להצגת מודעות ברצף ב-ViewController.swift ב-Swift או ב-ViewController.m ב-Objective-C. קטעי הקוד במדריך הזה כתובים בשפת Swift כברירת מחדל. השלב הראשון הוא לעדכן את המשתנים הקבועים.
מוסיפים את הקבועים הבאים של בקשות לשידור רצף מודעות:
STREAM_URL(משמש רק לשידורים חיים): כתובת ה-URL של שידור הווידאו שסופקה על ידי הכלי להטמעת מודעות ותגי מעקב בקובצי פלייליסט או על ידי שותף צד שלישי שמשתמש בהצגת מודעות ברצף. לפני ששולחים בקשה, צריך להזין את מזהה השידור שסופק על ידי IMA DAI SDK. במקרה הזה, כתובת ה-URL של הסטרימינג כוללת פלייסהולדר,"[[STREAMID]]", שצריך להחליף במזהה הסטרימינג לפני ששולחים בקשה.-
NETWORK_CODE: קוד הרשת של החשבון שלכם ב-Ad Manager 360. CUSTOM_ASSET_KEY(משמש רק לשידורים חיים): מפתח הנכס המותאם אישית שמזהה את האירוע של הצגת מודעות ברצף ב-Ad Manager 360. הכלי להטמעת מודעות ותגי מעקב בקובצי פלייליסט או שותף צד שלישי להצגת מודעות Pod יכולים ליצור את זה.API_KEY(משמש רק לשידורים חיים): מפתח API אופציונלי שיכול להיות נדרש כדי לאחזר מזהה שידור מ-IMA DAI SDK.
משנים את קטע המשתנה של הדוגמה כך שיתאים לקטע הבא:
...
class ViewController:
UIViewController,
IMAAdsLoaderDelegate,
IMAStreamManagerDelegate,
AVPlayerViewControllerDelegate
{
static let streamUrl = ""
static let networkCode = ""
static let customAssetKey = ""
static let APIKey = ""
static let backupStreamURLString = ""
var adsLoader: IMAAdsLoader?
...
יצירת בקשה לשידור חי או לשידור VOD של מקבץ מודעות
הצגת מודעות בשידור חי
משנים את ה-method requestStream כדי ליצור בקשה לשידור חי של Pod, על ידי יצירת מופע של IMAPodStreamRequest.
...
func requestStream() {
guard let playerViewController = self.playerViewController else return
guard let adContainerView = self.adContainerView else return
guard let adsLoader = self.adsLoader else return
self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
adDisplayContainer = IMAAdDisplayContainer(
adContainer: adContainerView, viewController: self)
// Create a podserving stream request.
request = IMAPodStreamRequest(
networkCode: self.networkCode,
customAssetKey: self.customAssetKey,
adDisplayContainer: adDisplayContainer,
videoDisplay: self.videoDisplay,
userContext: nil)
adsLoader.requestStream(with: request)
}
...
הצגת קבוצות של מודעות בשידורי VOD
משנים את ה-method requestStream כדי ליצור בקשה ל-VOD pod stream על ידי יצירת מופע של IMAPodVODStreamRequest.
...
func requestStream() {
guard let playerViewController = self.playerViewController else return
guard let adContainerView = self.adContainerView else return
guard let adsLoader = self.adsLoader else return
self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
adDisplayContainer = IMAAdDisplayContainer(
adContainer: adContainerView, viewController: self)
// Create a podserving stream request.
request = IMAPodVODStreamRequest(
networkCode: self.networkCode,
adDisplayContainer: adDisplayContainer,
videoDisplay: self.videoDisplay,
userContext: nil)
adsLoader.requestStream(with: request)
}
...
עריכה והגדרה של כתובת ה-URL של השידור
הצגת מודעות בשידור חי
משנים את השיטות של IMAAdsLoaderDelegate, ומשתמשים ב-streamManager.streamId כדי לקבל את מזהה הסטרימינג. לאחר מכן, מזינים את מזהה מקור הנתונים ב-STREAM_URL, במקום "[[STREAMID]]". אחרי השינוי, מגדירים את כתובת ה-URL החדשה של השידור באמצעות videoDisplay.loadStream().
...
// MARK: - IMAAdsLoaderDelegate
func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
let streamManager = adsLoadedData.streamManager
let streamId = streamManager.streamId
let urlString = streamUrl.replacingOccurrences(of: "[[STREAMID]]", with: streamId)
let loadedStreamUrl = URL(string:urlString)
self.videoDisplay.loadStream(loadedStreamUrl, subtitles:@[])
self.videoDisplay.play()
streamManager.delegate = self
streamManager.initialize(with: nil)
self.streamManager = streamManager
}
...
הצגת מודעות ב-Pod בשידור VOD
משנים את השיטות של IMAAdsLoaderDelegate, ומשתמשים ב-streamManager.streamId כדי לקבל את מזהה השידור. לאחר מכן, מבקשים כתובת URL של שידור משותף הטכנולוגיה שלכם לווידאו (VTP) וקוראים ל-IMAStreamManager.loadThirdPartyStream() כדי ש-IMA יטען את כתובת ה-URL של השידור ואת הכתוביות שמוחזרות על ידי ה-TVP.
...
// MARK: - IMAAdsLoaderDelegate
func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
let streamManager = adsLoadedData.streamManager
let streamId = streamManager.streamId
// 'vtpInterface' is a place holder for your own video technology partner
// (VTP) API calls.
let streamUrl = vtpInterface.requestStreamURL(streamID)
self.streamManager.loadThirdPartyStream(streamUrl, streamSubtitles:@[])
streamManager.delegate = self
streamManager.initialize(with: nil)
self.streamManager = streamManager
}
ניקוי נכסי IMA DAI
אחרי שסיימתם לבקש ולהציג מודעות לרשת המדיה בסטרימינג של הצגת מודעות ברצף באמצעות IMA DAI SDK, מומלץ לנקות את כל המשאבים אחרי שהסשן של הצגת המודעות ברצף מסתיים. מפעילים את IMAStreamManager.destroy() כדי להפסיק את הפעלת השידור, להפסיק את כל המעקב אחרי ביצועי המודעות ולשחרר את כל נכסי השידור שנטענו.
דוגמאות נוספות לשימוש ב-tvOS SDK זמינות ב-GitHub.