Ten przewodnik pokazuje, jak odtwarzać transmisję na żywo lub VOD z wyświetlaniem bloków reklamowych w ramach dynamicznego wstawiania reklam za pomocą pakietu IMA DAI SDK na tvOS z odtwarzaczem wideo. Aby wyświetlić lub prześledzić gotową przykładową integrację, pobierz przykładową aplikację do wyświetlania bloków reklamowych (Obj C lub Swift).
Omówienie wyświetlania bloków reklamowych w ramach dynamicznego wstawiania reklam w pakiecie IMA DAI
Implementacja wyświetlania bloków reklamowych za pomocą pakietu IMA DAI SDK na tvOS obejmuje 2 główne komponenty:
StreamRequest: obiekt, który definiuje żądanie strumienia do serwerów reklamowych Google. Aby włączyć wyświetlanie bloków reklamowych, należy utworzyć je za pomocąIMAPodStreamRequestlubIMAPodVODStreamRequest. Obie metody wymagają kodu sieci, aIMAPodStreamRequestwymaga też niestandardowego klucza zasobu. Klucz interfejsu API jest opcjonalny.IMAStreamManager: obiekt, który obsługuje komunikację między strumieniem wideo a pakietem IMA DAI SDK, np. uruchamia pingi śledzące i przekazuje wydawcy zdarzenia strumienia.
Wymagania wstępne
Zanim zaczniesz, musisz mieć:
- Xcode 13 lub nowszy.
- Metoda instalacji pakietu IMA SDK:
- Swift Package Manager (preferowany)
- pobrana kopia pakietu IMA SDK na tvOS,
- Aplikacja tvOS, która jest już skonfigurowana z pakietem IMA DAI SDK do odtwarzania strumieni wideo z reklamami DAI. Jeśli nie masz jeszcze takiej aplikacji, zalecamy użycie jako punktu wyjścia aplikacji tvOS DAI BasicExample. BasicExample zawiera bazę kodu, do której odwołuje się ten przewodnik. Więcej informacji o implementacji pakietu IMA DAI SDK znajdziesz w krótkim przewodniku.
Konfigurowanie zmiennych wyświetlania bloków reklamowych
Wszystkie zmiany dotyczące wyświetlania bloków reklamowych wprowadź w pliku ViewController.swift w języku Swift lub ViewController.m w języku Objective-C. Fragmenty kodu w tym przewodniku domyślnie używają języka Swift. Pierwszym krokiem jest zaktualizowanie zmiennych stałych.
Dodaj te stałe żądania strumienia bloku reklamowego:
STREAM_URL(używany tylko w przypadku transmisji na żywo): URL strumienia wideo podany przez manipulator pliku manifestu lub partnera zewnętrznego korzystającego z wyświetlania bloków reklamowych. Przed wysłaniem żądania należy wstawić identyfikator strumienia podany przez pakiet IMA DAI SDK. W takim przypadku adres URL strumienia zawiera obiekt zastępczy"[[STREAMID]]", który przed wysłaniem żądania zastępujesz identyfikatorem strumienia.NETWORK_CODE: kod sieci konta Ad Managera 360.CUSTOM_ASSET_KEY(używany tylko w przypadku transmisji na żywo): niestandardowy klucz zasobu, który identyfikuje zdarzenie wyświetlania bloku reklamowego w usłudze Ad Manager 360. Może go utworzyć manipulator pliku manifestu lub zewnętrzny partner wyświetlający bloki reklamowe.API_KEY(używany tylko w przypadku transmisji na żywo): opcjonalny klucz interfejsu API, który może być wymagany do pobrania identyfikatora strumienia z pakietu IMA DAI SDK.
Zmień sekcję zmiennych w przykładzie, aby odpowiadała tej:
...
class ViewController:
UIViewController,
IMAAdsLoaderDelegate,
IMAStreamManagerDelegate,
AVPlayerViewControllerDelegate
{
static let streamUrl = ""
static let networkCode = ""
static let customAssetKey = ""
static let APIKey = ""
static let backupStreamURLString = ""
var adsLoader: IMAAdsLoader?
...
Tworzenie żądania strumienia bloku reklamowego na żywo lub VOD
Wyświetlanie bloków reklamowych podczas transmisji na żywo
Zmodyfikuj metodę requestStream, aby utworzyć żądanie transmisji z blokiem reklamowym na żywo przez utworzenie instancji IMAPodStreamRequest.
...
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)
// Create a podserving stream request.
request = IMAPodStreamRequest(
networkCode: self.networkCode,
customAssetKey: self.customAssetKey,
adDisplayContainer: adDisplayContainer,
videoDisplay: self.videoDisplay,
userContext: nil)
adsLoader.requestStream(with: request)
}
...
Wyświetlanie bloków reklamowych w strumieniu VOD
Zmodyfikuj metodę requestStream, aby utworzyć żądanie strumienia bloku reklamowego VOD przez utworzenie instancji IMAPodVODStreamRequest.
...
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)
// Create a podserving stream request.
request = IMAPodVODStreamRequest(
networkCode: self.networkCode,
adDisplayContainer: adDisplayContainer,
videoDisplay: self.videoDisplay,
userContext: nil)
adsLoader.requestStream(with: request)
}
...
Edytowanie i ustawianie adresu URL strumienia
Wyświetlanie bloków reklamowych podczas transmisji na żywo
Zmodyfikuj metody IMAAdsLoaderDelegate, używając streamManager.streamId, aby uzyskać identyfikator strumienia. Następnie wstaw identyfikator strumienia w STREAM_URL, zastępując "[[STREAMID]]". Po wprowadzeniu tej zmiany ustaw nowy adres URL strumienia za pomocą videoDisplay.loadStream().
...
// MARK: - IMAAdsLoaderDelegate
func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
let streamManager = adsLoadedData.streamManager
let streamId = streamManager.streamId
let urlString = streamUrl.replacingOccurrences(of: "[[STREAMID]]", with: streamId)
let loadedStreamUrl = URL(string:urlString)
self.videoDisplay.loadStream(loadedStreamUrl, subtitles:@[])
self.videoDisplay.play()
streamManager.delegate = self
streamManager.initialize(with: nil)
self.streamManager = streamManager
}
...
Wyświetlanie bloków reklamowych w strumieniu VOD
Zmodyfikuj metody IMAAdsLoaderDelegate, używając streamManager.streamId, aby uzyskać identyfikator strumienia. Następnie poproś partnera technologicznego ds. wideo o adres URL strumienia i wywołaj IMAStreamManager.loadThirdPartyStream(), aby pakiet IMA wczytał adres URL strumienia i napisy zwrócone przez partnera technologicznego ds. wideo.
...
// MARK: - IMAAdsLoaderDelegate
func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
let streamManager = adsLoadedData.streamManager
let streamId = streamManager.streamId
// 'vtpInterface' is a place holder for your own video technology partner
// (VTP) API calls.
let streamUrl = vtpInterface.requestStreamURL(streamID)
self.streamManager.loadThirdPartyStream(streamUrl, streamSubtitles:@[])
streamManager.delegate = self
streamManager.initialize(with: nil)
self.streamManager = streamManager
}
Czyszczenie zasobów IMA DAI
Po pomyślnym zakończeniu żądania i wyświetlania reklam displayowych w strumieniu z obsługą wyświetlania bloków reklamowych za pomocą pakietu IMA DAI SDK zalecamy wyczyszczenie wszystkich zasobów po zakończeniu sesji wyświetlania bloków reklamowych. Wywołaj IMAStreamManager.destroy(), aby zatrzymać odtwarzanie transmisji, zatrzymać śledzenie reklam i zwolnić wszystkie wczytane zasoby transmisji.
Inne przykłady użycia pakietu SDK tvOS znajdziesz w GitHubie.