תחילת העבודה עם IMA DAI SDK

ערכות ה-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.