הפעלת סטרימינג של VOD שנרשם ב-Google Cloud Video Stitcher API
במדריך הזה מוסבר איך להשתמש ב-IMA DAI SDK ל-tvOS כדי לבקש ולהפעיל סשן של סטרימינג של 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.
הגדרת הדוגמה הבסיסית
עוברים אל דף הגרסה של IMA tvOS DAI ב-GitHub ומורידים את הדוגמה הבסיסית ב-Objective-C או ב-Swift, בהתאם לשפה הרצויה. הדוגמה הזו היא פרויקט tvOS Xcode שמסתמך על Cocoapods לטעינת IMA DAI SDK.
כדי להכין את הדוגמה להפעלה, מוודאים ש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>
/// VideoStitcher VOD config ID.
static NSString *const kVODConfigID = @"VOD_CONFIG_ID";
/// VideoStitcher Network Code.
static NSString *const kNetworkCode = @"NETWORK_CODE";
/// VideoStitcher Project Number.
static NSString *const kProjectNumber = @"PROJECT_NUMBER";
/// VideoStitcher Location.
static NSString *const kLocation = @"LOCATION";
/// VideoStitcher OAuth Token.
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] initWithAdTagURL: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,
AVPlayerViewControllerDelegate
{
/// 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() {
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)
let streamRequest: IMAStreamRequest
// Create a VOD stream request.
streamRequest = IMAVideoStitcherVODStreamRequest(
VODConfigID: ViewController.vodConfigID,
region: ViewController.location,
projectNumber: ViewController.projectNumber,
oAuthToken: ViewController.oAuthToken,
networkCode: ViewController.networkCode,
adDisplayContainer: adDisplayContainer!,
videoDisplay: self.videoDisplay,
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 ל-tvOS, חשוב לנקות את כל משאבי ההצגה.
כדי להסיר משאבים ונכסים שלא צריך, פועלים לפי המדריך בנושא מחיקת תוכן וידאו על פי דרישה.