ערכות ה-SDK של IMA מאפשרות לשלב בקלות מודעות מולטימדיה באתרים ובאפליקציות שלכם. ערכות IMA SDK יכולות לבקש מודעות מכל שרת מודעות שתואם ל-VAST ולנהל את הפעלת המודעות באפליקציות שלכם. בעזרת ערכות IMA DAI SDK, אפליקציות בקשה לשידור וידאו של מודעה ותוכן – VOD או תוכן בשידור חי. לאחר מכן ה-SDK מחזיר סטרימינג משולב של מודעות וידאו, כך שלא יהיה צורך לנהל את המעבר בין מודעות וידאו בתוכן בתוך האפליקציה.
איך בוחרים את פתרון DAI שמעניין אתכם
הצגת מודעות דינמיות (DAI) ב-Pod
המדריך הזה מדגים איך להפעיל שידור חי או VOD של מודעות דינמיות (DAI) באמצעות IMA DAI SDK ל-tvOS עם נגן וידאו פשוט. אם רוצים לעקוב אחרי יחד עם הדוגמה שהושלמה, מורידים את האפליקציה לדוגמה להצגת Pod (Obj C או Swift).
סקירה כללית על הצגת מודעות ב-IMA DAI Pod
כדי להטמיע הצגת מודעות ברצף באמצעות IMA DAI SDK ל-tvOS, צריך שני רכיבים עיקריים:
StreamRequest
: אובייקט שמגדיר בקשת סטרימינג לשרתים של Google לפרסום. יש ליצור באמצעות אחד מהשנייםIMAPodStreamRequest
אוIMAPodVODStreamRequest
כדי לאפשר הצגת Pod. בשתי השיטות נדרשים קוד רשת, וגם ב-IMAPodStreamRequest
נדרש מפתח נכס מותאם אישית. מפתח API הוא אופציונלי.IMAStreamManager
: אובייקט שמטפל בתקשורת בין מקור הווידאו ל-IMA DAI SDK, למשל הפעלת פינגים למעקב והעברת אירועי מקור לבעלים של אתר החדשות.
דרישות מוקדמות
לפני שמתחילים, צריך את הדברים הבאים:
- Xcode 13 ואילך.
- CocoaPods (מועדף), Swift Package Manager, או עותק של ההורדה IMA DAI SDK ל-tvOS.
- אפליקציית tvOS שכבר מוגדרת עם IMA DAI SDK כדי להפעיל שידורי וידאו עם מודעות DAI. אם עדיין אין לכם אפליקציה כזו, מומלץ להשתמש ב-tvOS DAI BasicExample כנקודת התחלה. ב-BasicExample יש את קוד המקור שמוזכר במדריך הזה. מידע נוסף על הטמעת IMA DAI SDK זמין במדריך למתחילים.
הגדרת משתני ההצגה של pod
כל השינויים שנדרשים להצגת Pod מתבצעים ב-ViewController.swift
ב-
SWIFT או ViewController.m
ב-Objective-C. ברירת המחדל של קטעי הקוד במדריך הזה היא שימוש בשפת Swift. השלב הראשון הוא לעדכן את
עם משתנים קבועים.
אלה קבועי הבקשה של מקור הנתונים של רצף המודעות שצריך להוסיף:
STREAM_URL
(משמש רק לשידורים חיים): כתובת ה-URL של סטרימינג הווידאו שסופקה על ידי מנתח המניפסט או על ידי שותף צד שלישי באמצעות הצגת מודעות ברצף. לפני שליחת הבקשה, תתבקשו להזין את מזהה הסטרימינג שסופק על ידי IMA DAI SDK. במקרה הזה, כתובת ה-URL של השידור כוללת placeholder,"[[STREAMID]]"
, שמוחלף במזהה מקור הנתונים, לפני שיוצרים בקשה.NETWORK_CODE
: קוד הרשת של חשבון Ad Manager 360.CUSTOM_ASSET_KEY
(משמש רק בשידורים חיים): מפתח הנכס המותאם אישית מזהה את אירוע הצגת ה-pod ב-Ad Manager 360. אפשר ליצור אותו באמצעות הכלי לעיבוד המניפסט או באמצעות שותף צד שלישי להצגת מודעות במודולים.API_KEY
(משמש רק בשידורים חיים): מפתח API אופציונלי שאפשר שנדרשים כדי לאחזר מזהה מקור נתונים מ-IMA DAI SDK.
משנים את קטע המשתנים שבדוגמה כך שיתאים לקטע הבא:
...
class ViewController:
UIViewController,
IMAAdsLoaderDelegate,
IMAStreamManagerDelegate,
AVPlayerViewControllerDelegate
{
static let streamUrl =
"https://encodersim.sandbox.google.com/masterPlaylist/9c654d63-5373-4673-8c8d-6d92b66b9d46/master.m3u8?gen-seg-redirect=true&network=51636543&event=google-sample&pids=devrel4628000,devrel896000,devrel3528000,devrel1428000,devrel2628000,devrel1928000&seg-host=dai.google.com&stream_id=[[STREAMID]]"
static let networkCode = "51636543"
static let customAssetKey = "google-sample"
static let APIKey = ""
static let backupStreamURLString =
"http://googleimadev-vh.akamaihd.net/i/big_buck_bunny/bbb-,480p,720p,1080p,.mov.csmil/master.m3u8"
var adsLoader: IMAAdsLoader?
...
יצירת בקשה לשידור חי או ל-Pod של VOD
הצגת מודעות ברצף של שידורים חיים
צריך לשנות את השיטה 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
משנים את השיטה requestStream
כדי ליצור בקשה להעברת נתונים של רצף VOD, על ידי יצירה של 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
}
...
הצגת מודעות ברצף של מודעות 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
}
זהו! עכשיו אתה מבקש ומציג מודעות בזרם הצגת Pod עם IMA DAI SDK ל-tvOS. כדי לראות דוגמאות נוספות של IMA DAI SDK שבו נעשה שימוש, חפשו את הדוגמאות ב-GitHub.