במדריך הזה מוסבר איך להפעיל שידור חי או שידור וידאו על פי דרישה (VOD) עם הצגת מודעות ברצף באמצעות IMA DAI SDK ל-tvOS עם נגן וידאו. כדי לראות או לעקוב אחרי שילוב לדוגמה שהושלם, הורידו את האפליקציה לדוגמה של Pod Serving (Obj C או Swift).
סקירה כללית על הצגת מודעות ברצף ב-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)
}
...
הצגת מודעות ב-Pod בשידור 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() כדי להפסיק את הפעלת השידור, להפסיק את כל המעקב אחרי ביצועים של מודעות ולשחרר את כל נכסי השידור שנטענו.
דוגמאות נוספות לשימוש ב-SDK של tvOS זמינות ב-GitHub.