הגדרה באמצעות שירות Pod DAI

בחירת פלטפורמה: HTML5 Android iOS tvOS Cast Roku

במדריך הזה נסביר איך להפעיל שידור חי או שידור 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:
  • אפליקציית 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.