הפעלת סטרימינג של 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, חשוב לנקות את כל משאבי ההצגה.
כדי להסיר משאבים ונכסים שלא צריך, פועלים לפי המדריך בנושא מחיקת תוכן וידאו על פי דרישה.