שימוש ב-IMA DAI SDK ב-iOS

הפעלת סטרימינג של VOD שנרשם ב-Google Cloud Video Stitcher API

במדריך הזה מוסבר איך להשתמש ב-IMA DAI SDK ל-iOS כדי לשלוח בקשות לסשן של סטרימינג VOD ב-Google Cloud ולהפעיל אותו.

המדריך הזה מרחיב את הדוגמה הבסיסית מהמדריך למתחילים בנושא IMA DAI.

למידע על שילוב עם פלטפורמות אחרות או על שימוש ב-IMA SDKs בצד הלקוח, אפשר לעיין במאמר בנושא Interactive Media Ads SDKs.

אם רוצים לראות דוגמה לשילוב מלא או לפעול לפיה, אפשר להוריד את הדוגמה של Cloud Video Stitcher ל-Objective-C או ל-Swift.

הגדרת פרויקט ב-Google Cloud

מזינים את המשתנים הבאים לשימוש ב-IMA SDK:

מיקום
‫
האזור ב-Google Cloud שבו נוצרה ההגדרה של ה-VOD: LOCATION
מספר הפרויקט
מספר הפרויקט ב-Google Cloud שבו נעשה שימוש ב-Video Stitcher API: PROJECT_NUMBER
טוקן OAuth

אסימון OAuth לטווח קצר של חשבון שירות עם תפקיד המשתמש Video Stitcher:

OAUTH_TOKEN

מידע נוסף על יצירת טוקנים של OAuth לזמן קצר אפשר לעשות שימוש חוזר בטוקן OAuth בכמה בקשות, כל עוד תוקף הטוקן לא פג.

הקוד של הרשת

קוד הרשת ב-Ad Manager לבקשת הצגת מודעות: NETWORK_CODE

מזהה ההגדרה של VOD

מזהה ההגדרה של ה-VOD בסטרימינג של ה-VOD: VOD_CONFIG_ID

מידע נוסף על יצירת מזהה הגדרות VOD זמין במדריך Cloud stitching create a VOD config.

הקשר של המשתמש
הקשר של המשתמש למעקב אחרי בקשות. יכול להיות nil. ברירת המחדל היא nil במדריך הזה.

הגדרת הדוגמה הבסיסית

עוברים אל דף הגרסה של IMA iOS DAI ב-GitHub ומורידים את הדוגמה הבסיסית של Objective-C. הדוגמה הזו היא פרויקט iOS Xcode שמסתמך על Cocoapods לטעינת IMA DAI SDK. אם אתם משתמשים ב-Swift, ל-IMA אין אפליקציה לדוגמה ל-iOS, אבל בהמשך המדריך הזה יש קטע קוד ב-Swift שמסביר איך להטמיע IMAVideoStitcherVODStreamRequest באפליקציה שלכם.

כדי להכין את הדוגמה להפעלה, מוודאים שCocoaPods מותקן, ואז פותחים את התיקייה של הדוגמה הבסיסית במסוף ומריצים את הפקודה הבאה:

pod install --repo-update

אחרי שהפקודה הזו מסתיימת, קובץ בשם BasicExample.xcworkspace מופיע בתיקיית הפרויקט. פותחים את הקובץ הזה ב-Xcode ומריצים את הדוגמה כדי לוודא שסרטון הבדיקה והמודעות מוצגים כמצופה.

בקשה לסטרימינג של תוכן על פי דרישה (VOD)

כדי להחליף את זרם הדוגמה בזרם ה-VOD שלכם עם מודעות, צריך להשתמש ב-IMAVideoStitcherVODStreamRequest כדי ליצור סשן של מודעות ב-Google Ad Manager. אתם יכולים להשתמש בממשק המשתמש של Google Ad Manager כדי לאתר את סשנים של DAI שנוצרו לצורך מעקב וניפוי באגים.

בדוגמה הקיימת יש בקשות לשידור VOD או לשידור חי משרתי DAI של Google. כדי שהפונקציה תפעל עם Google Cloud Video Stitcher API, צריך להחליף את הפונקציה הנוכחית requestStream בפונקציה שמשתמשת במחלקה IMAVideoStitcherVODStreamRequest.

הנה דוגמה:

Objective-C

ViewController.m

...

#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>
/// The Stream's VOD config ID.
static NSString *const kVODConfigID = @"VOD_CONFIG_ID";
/// The Network Code used by the Video Stitcher API.
static NSString *const kNetworkCode = @"NETWORK_CODE";
/// The Google Cloud project using the Video Stitcher API.
static NSString *const kProjectNumber = @"PROJECT_NUMBER";
/// The Google Cloud region containing your project.
static NSString *const kLocation = @"LOCATION";
/// An OAuth Token created by a Google Cloud account with Video Stitcher API
/// permissions.
static NSString *const kOAuthToken = @"OAUTH_TOKEN";

/// Fallback URL in case something goes wrong in loading the stream. If all goes well, this will not
/// be used.
static NSString *const kBackupStreamURLString =
    @"http://googleimadev-vh.akamaihd.net/i/big_buck_bunny/bbb-,480p,720p,1080p,.mov.csmil/"
    @"master.m3u8";
@interface ViewController () <IMAAdsLoaderDelegate, IMAStreamManagerDelegate>

...

- (void)requestStream {
    // Create an ad display container for ad rendering.
    IMAAdDisplayContainer *adDisplayContainer =
        [[IMAAdDisplayContainer alloc] initWithAdContainer:self.videoView
                                            viewController:self
                                            companionSlots:nil];
    // Create an IMAAVPlayerVideoDisplay to give the SDK access to your video player.
    IMAAVPlayerVideoDisplay *imaVideoDisplay =
        [[IMAAVPlayerVideoDisplay alloc] initWithAVPlayer:self.contentPlayer];
    IMAVideoStitcherVODStreamRequest *streamRequest =
        [[IMAVideoStitcherVODStreamRequest alloc] initWithVODConfigID:kVODConfigID
                                                             region:kLocation
                                                      projectNumber:kProjectNumber
                                                         OAuthToken:kOAuthToken
                                                        networkCode:kNetworkCode
                                                 adDisplayContainer:adDisplayContainer
                                                       videoDisplay:imaVideoDisplay
                                                        userContext:nil
                                        videoStitcherSessionOptions:nil];
    [self.adsLoader requestStreamWithRequest:streamRequest];
}

...

Swift

ViewController.swift

...

class ViewController: UIViewController, IMAAdsLoaderDelegate, IMAStreamManagerDelegate {
  /// The Stream's VOD config ID.
  static let vodConfigID = "VOD_CONFIG_ID"
  /// The Network Code used by the Video Stitcher API.
  static let networkCode = "NETWORK_CODE"
  /// The Google Cloud project using the Video Stitcher API.
  static let projectNumber = "PROJECT_NUMBER"
  /// The Google Cloud region containing your project.
  static let location = "LOCATION"
  /// An OAuth Token created by a Google Cloud account with Video Stitcher API
  /// permissions.
  static let oAuthToken = "OAUTH_TOKEN"

  /// Fallback URL in case something goes wrong in loading the stream. If all goes well, this will
  /// not be used.
  static let backupStreamURLString = """
    http://googleimadev-vh.akamaihd.net/i/big_buck_bunny/\
    bbb-,480p,720p,1080p,.mov.csmil/master.m3u8
    """

  ...

  func requestStream() {
    // Create an ad display container for ad rendering.
    adDisplayContainer = IMAAdDisplayContainer(
      adContainer: videoView,
      viewController: self,
      companionSlots: nil)
    // Create an IMAAVPlayerVideoDisplay to give the SDK access to your video player.
    let imaVideoDisplay = IMAAVPlayerVideoDisplay(avPlayer: contentPlayer!)
    // Create a VOD stream request.
    let streamRequest = IMAVideoStitcherVODStreamRequest(
      VODConfigID: ViewController.vodConfigID,
      region: ViewController.location,
      projectNumber: ViewController.projectNumber,
      oAuthToken: ViewController.oAuthToken,
      networkCode: ViewController.networkCode,
      adDisplayContainer: adDisplayContainer!,
      videoDisplay: imaVideoDisplay,
      userContext: nil,
      videoStitcherSessionOptions: nil)
    adsLoader?.requestStream(with: streamRequest)
  }

  ...

מריצים את הפרויקט, ואז אפשר לבקש להפעיל את הסטרימינג המותאם אישית של VOD.

(אופציונלי) הוספת אפשרויות של סשן סטרימינג

כדי להתאים אישית את בקשת הסטרימינג, מוסיפים אפשרויות הפעלה כדי לשנות את הגדרת ברירת המחדל של Cloud Video Stitcher API. לשם כך, מאכלסים את הפרמטר videoStitcherSessionOptions ב-IMAVideoStitcherVODStreamRequest. אם תספקו אפשרות לא מזוהה, Cloud Video Stitcher API יגיב עם שגיאת HTTP 400. אפשר לקבל עזרה במדריך לפתרון בעיות.

לדוגמה, אפשר לשנות את אפשרויות המניפסט באמצעות קטע הקוד הבא, ששולח בקשה לשני מניפסטים של סטרימינג עם רכיבי עיבוד שמוזמנים משיעור העברת הנתונים הנמוך ביותר לגבוה ביותר.

Objective-C

 // Define session options JSON string.
 // The following session options are examples. Use session options
 // that are compatible with your video stream.
 NSString *sessionOptionsStr =
   @"{"
   "  \"manifestOptions\": {"
   "    \"bitrateOrder\": \"ascending\""
   "  }"
   "}";
 // convert JSON NSString to NSDictionary
 NSData *sessionOptionsData = [sessionOptionsStr dataUsingEncoding:NSUTF8StringEncoding];
 NSError *error = nil;
 NSDictionary *sessionOptions = [NSJSONSerialization
                       JSONObjectWithData:sessionOptionsData
                       options:0
                       error:&error];
 // make stream request
 IMAVideoStitcherVODStreamRequest *streamRequest =
     [[IMAVideoStitcherVODStreamRequest alloc] initWithVODConfigID:kVODConfigID
                                                           region:kLocation
                                                     projectNumber:kProjectNumber
                                                       OAuthToken:kOAuthToken
                                                       networkCode:kNetworkCode
                                               adDisplayContainer:adDisplayContainer
                                                     videoDisplay:imaVideoDisplay
                                                       userContext:nil
                                       videoStitcherSessionOptions:sessionOptions];
 [self.adsLoader requestStreamWithRequest:streamRequest];

Swift

 // Define session options JSON string.
 // The following session options are examples. Use session options
 // that are compatible with your video stream.
 let sessionOptionsStr = """
     {
       "manifestOptions": {
         "bitrateOrder": "ascending"
       }
     }
     """
 // convert JSON string to dictionary
 guard let sessionOptionsData = sessionOptionsStr.data(using: .utf8, allowLossyConversion: false) else { return nil }
 let sessionOptions = try? JSONSerialization.jsonObject(with: sessionOptionsData, options: .mutableContainers)
 // make stream request
 let streamRequest = IMAVideoStitcherVODStreamRequest(
   vodConfigID:ViewController.vodConfigID
   region:ViewController.location
   projectNumber:ViewController.projectNumber
   OAuthToken:ViewController.oAuthToken
   networkCode:ViewController.networkCode
   adDisplayContainer:adDisplayContainer
   videoDisplay:imaVideoDisplay
   userContext:nil
   videoStitcherSessionOptions:sessionOptions)
 adsLoader?.requestStream(with: streamRequest)

הסרת המשאבים

אחרי שאירחתם בהצלחה סטרימינג של VOD באמצעות Google Cloud Video Stitcher API ושלחתם בקשה לסטרימינג באמצעות IMA DAI SDK ל-iOS, חשוב לנקות את כל משאבי ההצגה.

כדי להסיר משאבים ונכסים שלא צריך, פועלים לפי המדריך בנושא מחיקת תוכן וידאו על פי דרישה.