Menggunakan IMA DAI SDK di iOS

Memutar live stream yang terdaftar dengan Google Cloud Video Stitcher API

Panduan ini menunjukkan cara menggunakan IMA DAI SDK untuk iOS guna meminta dan memutar livestream untuk acara yang terdaftar dengan Google Cloud Video Stitcher API, serta cara menyisipkan jeda iklan selama pemutaran.

Panduan ini memperluas contoh dasar dari panduan Memulai guide untuk IMA DAI.

Untuk mengetahui informasi tentang cara berintegrasi dengan platform lain atau menggunakan IMA SDK sisi klien, lihat IMA SDK.

Jika Anda ingin melihat atau mengikuti integrasi contoh yang telah selesai, download contoh penggabung video Cloud untuk Objective-C atau Swift.

Menyiapkan project Google Cloud

Masukkan variabel berikut untuk digunakan di IMA SDK:

Lokasi
Region Google Cloud tempat konfigurasi live Anda dibuat: LOCATION
Nomor project
Nomor project Google Cloud yang menggunakan Video Stitcher API: PROJECT_NUMBER
Token OAuth

Token OAuth berumur pendek akun layanan dengan peran pengguna Video Stitcher:

OAUTH_TOKEN

Baca lebih lanjut tentang membuat kredensial berumur pendek untuk akun layanan. Token OAuth dapat digunakan kembali di beberapa permintaan selama belum habis masa berlakunya.

Kode jaringan

Kode jaringan Ad Manager untuk meminta iklan: NETWORK_CODE

ID konfigurasi live
ID konfigurasi live yang Anda tentukan saat membuat acara livestream: LIVE_CONFIG_ID
Kunci aset kustom
Kunci aset kustom Ad Manager yang dibuat selama proses pembuatan konfigurasi untuk acara livestream dengan Video Stitcher API: CUSTOM_ASSET_KEY

Konteks pengguna (User context)
Konteks pengguna untuk melacak permintaan. Dapat berupa nil. Secara default adalah nil dalam panduan ini.

Mendownload dan menyiapkan contoh dasar

Download contoh IMA DAI untuk iOS dan ekstrak Contoh Dasar ke folder baru. Contoh ini adalah project Xcode yang mengandalkan Cocoapods untuk memuat IMA SDK.

Untuk menyiapkan contoh agar dapat dijalankan, pastikan CocoaPods telah diinstal, lalu buka folder contoh dasar di terminal dan jalankan perintah berikut:

pod install --repo-update

Setelah perintah tersebut selesai, Anda akan melihat file bernama BasicExample.xcworkspace di folder project. Buka file ini di Xcode dan jalankan contoh untuk memastikan video dan iklan pengujian diputar sesuai harapan.

Meminta livestream

Untuk mengganti stream contoh dengan livestream Anda, Anda harus menggunakan class IMAVideoStitcherLiveStreamRequest yang otomatis membuat sesi iklan dengan Google Ad Manager. Anda dapat menggunakan UI Google Ad Manager untuk menemukan sesi DAI yang dihasilkan untuk tujuan pemantauan dan proses debug.

Dalam contoh yang ada, terdapat contoh untuk meminta stream VOD atau livestream dari server DAI Google. Agar contoh berfungsi dengan Google Cloud Video Stitcher API, Anda harus mengganti fungsi requestStream saat ini dengan fungsi yang menggunakan class IMAVideoStitcherLiveStreamRequest:

ViewController.m

#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>

/// Fallback URL in case something goes wrong in loading the stream. If all goes well,
/// this will not be used.
static NSString *const kTestAppContentUrl_M3U8 =
    @"//devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8";


static NSString *const kLiveConfigID = @"LIVE_CONFIG_ID";
static NSString *const kLocation = @"LOCATION";
static NSString *const kProjectNumber = @"PROJECT_NUMBER";
static NSString *const kOAuthToken = @"OAUTH_TOKEN";
static NSString *const kNetworkCode = @"NETWORK_CODE";
static NSString *const kCustomAssetKey = @"CUSTOM_ASSET_KEY";


@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];


  IMAVideoStitcherLiveStreamRequest *streamRequest =
      [[IMAVideoStitcherLiveStreamRequest alloc] initWithLiveStreamEventID:kLiveConfigID
                                                                    region:kLocation
                                                             projectNumber:kProjectNumber
                                                                OAuthToken:kOAuthToken
                                                               networkCode:kNetworkCode
                                                            customAssetKey:kCustomAssetKey
                                                        adDisplayContainer:adDisplayContainer
                                                              videoDisplay:imaVideoDisplay
                                                               userContext:nil
                                                               videoStitcherSessionOptions:nil];

  [self.adsLoader requestStreamWithRequest:streamRequest];
}

(Opsional) Menambahkan opsi sesi streaming

Sesuaikan permintaan stream Anda dengan menambahkan opsi sesi untuk mengganti konfigurasi default Cloud Video Stitcher API dengan mengisi parameter videoStitcherSessionOptions di IMAVideoStitcherLiveStreamRequest. Jika Anda memberikan opsi yang tidak dikenali, Cloud Video Stitcher API akan merespons dengan error HTTP 400. Lihat panduan pemecahan masalah untuk mendapatkan bantuan.

Misalnya, Anda dapat mengganti opsi manifes dengan cuplikan kode berikut, yang meminta dua manifes stream dengan rendering yang diurutkan dari bitrate terendah hingga tertinggi.

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
 IMAVideoStitcherLiveStreamRequest *streamRequest =
     [[IMAVideoStitcherLiveStreamRequest alloc] initWithLiveStreamEventID:kLiveConfigID
                                                                   region:kLocation
                                                           projectNumber:kProjectNumber
                                                               OAuthToken:kOAuthToken
                                                             networkCode:kNetworkCode
                                                           customAssetKey:kCustomAssetKey
                                                       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 = IMAVideoStitcherLiveStreamRequest(
   liveStreamEventID:ViewController.liveConfigID
   region:ViewController.location
   projectNumber:ViewController.projectNumber
   OAuthToken:ViewController.oAuthToken
   networkCode:ViewController.networkCode
   customAssetKey:ViewController.customAssetKey
   adDisplayContainer:adDisplayContainer
   videoDisplay:imaVideoDisplay
   userContext:nil
   videoStitcherSessionOptions:sessionOptions)
 adsLoader?.requestStream(with: streamRequest)

Jalankan project, lalu Anda dapat meminta dan memutar livestream kustom.

Menyisipkan jeda iklan

Google Cloud Video Stitcher API menyisipkan iklan yang diambil dari tag iklan untuk setiap jeda iklan. Jeda iklan ditandai dalam manifes menggunakan penanda iklan. Penanda iklan disisipkan oleh encoder live stream.

  • Jika Anda menggunakan live stream sendiri, Anda harus menyisipkan penanda iklan. Untuk mengetahui informasi selengkapnya tentang penanda iklan HLS dan DASH yang didukung, lihat dokumentasi penanda iklan.

  • Jika Anda membuat live stream menggunakan Google Cloud Livestream API, sisipkan peristiwa saluran jeda iklan.

Iklan diputar segera setelah jeda iklan disisipkan.

Pembersihan

Setelah Anda berhasil menghosting live stream menggunakan Google Cloud Video Stitcher API dan memintanya menggunakan IMA DAI SDK untuk iOS, Anda harus membersihkan resource penayangan.

Ikuti panduan pembersihan livestream untuk menghapus resource dan aset yang tidak diperlukan.