VOD-Streams wiedergeben, die mit der Google Cloud Video Stitcher API registriert sind
In dieser Anleitung wird gezeigt, wie Sie mit dem IMA DAI SDK für tvOS eine Google Cloud-VOD-Stream -Sitzung anfordern und wiedergeben.
Diese Anleitung baut auf dem grundlegenden Beispiel aus der Anleitung Erste Schritte mit dem IMA DAI SDK auf.
Informationen zur Einbindung in andere Plattformen oder zur Verwendung der IMA clientseitigen SDKs finden Sie unter Interactive Media Ads SDKs.
Wenn Sie eine abgeschlossene Beispielintegration ansehen oder nachvollziehen möchten, laden Sie das Cloud Video Stitcher-Beispiel für Objective-C oder Swiftherunter.
Google Cloud-Projekt einrichten
Geben Sie die folgenden Variablen für die Verwendung im IMA SDK ein:
- Standort
- Die Google Cloud-Region
in der Ihre VOD-Konfiguration erstellt wurde:
LOCATION - Projektnummer
- Die Google Cloud-Projektnummer, die die Video Stitcher API verwendet:
PROJECT_NUMBER - OAuth-Token
Das kurzlebige OAuth-Token eines Dienstkontos mit der Nutzerrolle „Video Stitcher“:
OAUTH_TOKEN
Weitere Informationen zum Erstellen kurzlebiger OAuth Tokens. Das OAuth-Token kann für mehrere Anfragen wiederverwendet werden, solange es nicht abgelaufen ist.
- Netzwerkcode
Der Ad Manager-Netzwerkcode zum Anfordern von Anzeigen:
NETWORK_CODE
- VOD-Konfigurations-ID
Die VOD-Konfigurations-ID für den VOD-Stream:
VOD_CONFIG_IDWeitere Informationen zum Erstellen der VOD-Konfigurations-ID finden Sie in der Anleitung VOD-Konfiguration für Cloud Stitching erstellen.
Grundlegendes Beispiel einrichten
Rufen Sie die IMA tvOS DAI GitHub-Releaseseite auf und laden Sie das grundlegende Beispiel in Objective-C oder Swift herunter, je nachdem, welche Sprache Sie bevorzugen. Dieses Beispiel ist ein tvOS Xcode-Projekt, das Cocoapods verwendet, um das IMA DAI SDK zu laden.
Damit Sie das Beispiel ausführen können, muss CocoaPods installiert sein. Öffnen Sie dann den Ordner des grundlegenden Beispiels im Terminal und führen Sie den folgenden Befehl aus:
pod install --repo-updateNachdem der Befehl ausgeführt wurde, sehen Sie in Ihrem Projektordner eine Datei mit dem Namen BasicExample.xcworkspace. Öffnen Sie diese Datei in Xcode und führen Sie das Beispiel aus, um zu prüfen, ob das Testvideo und die Anzeigen wie erwartet wiedergegeben werden.
VOD-Stream anfordern
Wenn Sie den Beispielstream durch Ihren VOD-Stream mit Anzeigen ersetzen möchten, verwenden Sie
IMAVideoStitcherVODStreamRequest
, um eine Anzeigensitzung mit Google Ad Manager zu erstellen. In der Google Ad
Manager-Benutzeroberfläche können Sie die generierten DAI-Sitzungen zur Überwachung und Fehlerbehebung suchen.
Im vorhandenen Beispiel finden Sie Beispiele für das Anfordern eines VOD-Streams oder eines Livestreams von den DAI-Servern von Google. Damit es mit der Google Cloud Video Stitcher API funktioniert, müssen Sie die aktuelle Funktion requestStream durch eine ersetzen, die die Klasse IMAVideoStitcherVODStreamRequest verwendet.
Beispiel:
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)
}
...
Führen Sie das Projekt aus. Anschließend können Sie Ihren benutzerdefinierten VOD-Stream anfordern und wiedergeben.
Optional: Optionen für Streamingsitzungen hinzufügen
Sie können Ihre Streamanfrage anpassen, indem Sie Sitzungsoptionen hinzufügen, um die Standard
Konfiguration der Cloud Video Stitcher API zu überschreiben. Dazu müssen Sie den
videoStitcherSessionOptions
Parameter in Ihrer
IMAVideoStitcherVODStreamRequestausfüllen.
Wenn Sie eine nicht erkannte Option angeben, antwortet die Cloud Video Stitcher API mit einem HTTP-Fehler 400. Weitere Informationen finden Sie in der
Anleitung zur Fehlerbehebung.
Sie können die Manifestoptionen beispielsweise mit dem folgenden Code-Snippet überschreiben, das zwei Streammanifeste mit Wiedergaben anfordert, die von der niedrigsten zur höchsten Bitrate sortiert sind.
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)
Bereinigen
Nachdem Sie einen VOD-Stream mit der Google Cloud Video Stitcher API gehostet und mit dem IMA DAI SDK für tvOS angefordert haben, müssen Sie alle Bereitstellungsressourcen bereinigen.
Folgen Sie der Anleitung zum Bereinigen von VOD , um alle nicht benötigten Ressourcen und Assets zu entfernen.