Pakiety IMA SDK ułatwiają integrację reklam multimedialnych z witrynami i aplikacjami. Pakiety IMA SDK mogą żądać reklam z dowolnego serwera reklam zgodnego z VAST i zarządzać odtwarzaniem reklam w aplikacjach. Dzięki pakietom IMA DAI SDK aplikacje wysyłają żądanie strumienia reklamy i treści wideo (VOD lub treści na żywo). Pakiet SDK zwraca połączony strumień wideo, dzięki czemu nie musisz zarządzać przełączaniem się między reklamą a filmem z treściami w aplikacji.
Wybierz interesujące Cię rozwiązanie DAI
Wyświetlanie bloków reklamowych w ramach dynamicznego wstawiania reklam
Ten przewodnik pokazuje, jak odtwarzać strumień na żywo lub VOD z dynamicznym wstawianiem reklam za pomocą pakietu IMA DAI SDK na tvOS z odtwarzaczem wideo. Aby wyświetlić lub prześledzić zakończoną przykładową integrację, pobierz aplikację z przykładem obsługi strumieniowego (Obj C lub Swift).
Omówienie wyświetlania bloków reklamowych w ramach IMA DAI
Wdrożenie wyświetlania bloków reklamowych za pomocą pakietu IMA DAI SDK na potrzeby tvOS obejmuje 2 główne komponenty:
StreamRequest
: obiekt definiujący żądanie strumienia do serwerów reklamowych Google. Aby włączyć obsługę podów, musisz utworzyć je za pomocą plikuIMAPodStreamRequest
lub plikuIMAPodVODStreamRequest
. Obie metody wymagają kodu sieci, aIMAPodStreamRequest
wymaga też klucza niestandardowego zasobu. Klucz interfejsu API jest opcjonalny.IMAStreamManager
: obiekt obsługujący komunikację między strumieniem wideo a pakietem IMA DAI SDK, np. wysyła pingi śledzące i przekazuje zdarzenia strumienia do wydawcy.
Wymagania wstępne
Zanim zaczniesz, musisz mieć:
- Xcode w wersji 13 lub nowszej.
- CocoaPods (preferowana opcja), menedżer pakietów Swift lub pobrana kopia pakietu IMA DAI SDK na potrzeby tvOS.
- Aplikacja na tvOS już skonfigurowana za pomocą pakietu IMA DAI SDK do odtwarzania strumieni wideo z reklamami DAI. Jeśli nie masz jeszcze takiej aplikacji, zalecamy użycie przykładu podstawowego DAI na platformie tvOS jako punktu wyjścia. Przykład podstawowy zawiera bazę kodu, do której odwołuje się ten przewodnik. Więcej informacji o wdrażaniu pakietu IMA DAI SDK znajdziesz w krótkim przewodniku.
Konfigurowanie zmiennych wyświetlania bloków reklamowych
Wszystkie zmiany potrzebne do obsługi podkategorii są wprowadzane w Swift za pomocą ViewController.swift
lub w Objective-C za pomocą ViewController.m
. Fragmenty kodu w tym przewodniku są domyślnie pisane w języku Swift. Pierwszym krokiem jest zaktualizowanie stałych zmiennych.
Oto stałe żądania strumienia podgrupy reklam, które należy dodać:
STREAM_URL
(używany tylko w przypadku transmisji na żywo): adres URL strumienia wideo podany przez manipulującego plikiem manifestu lub partnera zewnętrznego korzystającego z wyświetlania bloków reklamowych. Zanim prześlesz żądanie, musisz w nim podać identyfikator strumienia dostarczony przez pakiet IMA DAI SDK. W tym przypadku adres URL strumienia zawiera obiekt zastępczy"[[STREAMID]]"
, który przed wysłaniem żądania jest zastępowany identyfikatorem strumienia.NETWORK_CODE
: kod sieci konta Ad Managera 360.CUSTOM_ASSET_KEY
(używany tylko w przypadku transmisji na żywo): klucz niestandardowego 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 obsługujący wyświetlanie bloków reklamowych.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ę zmiennej przykładu na taką:
...
class ViewController:
UIViewController,
IMAAdsLoaderDelegate,
IMAStreamManagerDelegate,
AVPlayerViewControllerDelegate
{
static let streamUrl =
"https://encodersim.sandbox.google.com/masterPlaylist/9c654d63-5373-4673-8c8d-6d92b66b9d46/master.m3u8?gen-seg-redirect=true&network=51636543&event=google-sample&pids=devrel4628000,devrel896000,devrel3528000,devrel1428000,devrel2628000,devrel1928000&seg-host=dai.google.com&stream_id=[[STREAMID]]"
static let networkCode = "51636543"
static let customAssetKey = "google-sample"
static let APIKey = ""
static let backupStreamURLString =
"http://googleimadev-vh.akamaihd.net/i/big_buck_bunny/bbb-,480p,720p,1080p,.mov.csmil/master.m3u8"
var adsLoader: IMAAdsLoader?
...
Utwórz żądanie pod strumienia na potrzeby transmisji na żywo lub VOD.
Obsługa poddomeny transmisji na żywo
Zmodyfikuj metodę requestStream
, aby utworzyć żądanie podstreamu na żywo, tworząc instancję 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 pod VOD, tworząc instancję 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
Obsługa poddomeny transmisji na żywo
Zmodyfikuj metody IMAAdsLoaderDelegate
, używając funkcji streamManager.streamId
do uzyskania identyfikatora strumienia. Następnie wstaw identyfikator strumienia w polu STREAM_URL
, zastępując "[[STREAMID]]"
. Po wprowadzeniu tej zmiany możesz ustawić 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 funkcji streamManager.streamId
do uzyskania identyfikatora strumienia. Następnie poproś o adres URL strumienia od dostawcy technologii wideo (VTP) i wywołaj funkcję IMAStreamManager.loadThirdPartyStream()
, aby IMA załadowała adres URL strumienia i wszystkie napisy zwracane przez dostawcę TVP.
...
// 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 komponentów IMA DAI
Po zakończeniu przesyłania żądań i wyświetlania reklam w strumieniu z dynamicznym wstawianiem reklam za pomocą pakietu IMA DAI SDK zalecamy usunięcie wszystkich zasobów po zakończeniu sesji Pod Serving. Wywołanie IMAStreamManager.destroy()
służy do zatrzymywania odtwarzania strumienia, zatrzymywania śledzenia reklam i zwalniania wszystkich załadowanych zasobów strumienia.
Inne przykłady użycia pakietu SDK tvOS znajdziesz w przykładach na GitHubie.