Pierwsze kroki z pakietem IMA DAI SDK

Wybierz rozwiązanie DAI, które Cię interesuje

Blok reklamowy z dynamicznym wstawianiem reklam

Pakiety IMA SDK upraszczają integrację reklam multimedialnych z witrynami i aplikacjami.

Pakiety IMA SDK mogą żądać reklam ze wszystkich źródeł Zgodność z VAST serwera reklam i zarządzać odtwarzaniem reklam w aplikacjach.

Dzięki pakietom IMA DAI SDK aplikacje wysyłają żądania strumienia danych reklam i treści wideo za pomocą VOD lub treści na żywo. SDK zwraca wtedy połączony strumień wideo, więc że nie trzeba przełączać się między reklamą a treścią wideo w aplikacji.

W tym przewodniku pokazujemy, jak odtwarzać strumień wyświetlania podów z dynamicznym wstawianiem reklam na żywo za pomocą IMA Pakiet DAI SDK dla CAF.

Zanim zaczniesz korzystać z tego przewodnika, zapoznaj się z Odbiornik internetowy Chromecasta protokołu. W tym przewodniku zakładamy, że masz podstawowe informacje o odbiornikach CAF, na przykład moduły do przechwytywania wiadomości oraz mediaInformation i znajomość narzędzi Narzędzie Cast i Sterowanie przesyłaniem, aby emulować nadawcę CAF.

Aby korzystać z bloków reklamowych IMA DAI, musisz współpracować z partnerem, który wyświetla bloki reklamowe. musi mieć Ad Manager 360 dla zaawansowanych koncie. Jeśli masz konto Ad Managera, skontaktuj się z menedżerem konta w tej sprawie: . Informacje o rejestrowaniu się w usłudze Ad Manager znajdziesz na Centrum pomocy Ad Managera.

Informacje na temat integracji z innymi platformami i korzystania z IMA po stronie klienta przeczytaj artykuł Pakiety SDK do interaktywnych reklam medialnych.

Omówienie wyświetlania podów z IMA DAI

Implementacja wyświetlania podów za pomocą pakietu SDK IMA CAF DAI obejmuje 2 główne komponenty: co pokazujemy w tym przewodniku:

  • StreamRequest: Obiekt definiujący żądanie strumienia do serwerów reklamowych Google. Żądania określają kod sieci, niestandardowy klucz zasobu i opcjonalny klucz interfejsu API, oraz inne opcjonalne parametry.
  • StreamManager: Obiekt obsługujący komunikację między strumieniem wideo a IMA DAI SDK, np. uruchamianie pingów śledzących i przekazywanie zdarzeń strumienia do wydawcy.

Wymagania wstępne

  • konto Cast Developer Console z: zarejestrowanych urządzeń testowych.
  • Hostowany odbiornik internetowy zarejestrowane w Konsoli programisty Cast i które można zmodyfikować, aby hostować według kodu podanego w tym przewodniku.
  • aplikację wysyłającą skonfigurowaną do korzystania z internetowego odbiornika, W przypadku wartości w tym przykładzie, użyj polecenia i funkcji Cast .

Konfigurowanie obiektów MediaInfo nadawcy

Najpierw skonfiguruj MediaInfo obiekt uwzględnij te pola:

Pole Spis treści
contentId Unikalny identyfikator tego elementu multimedialnego.

CONTENT_ID

contentUrl Opcjonalnie: Zapasowy adres URL strumienia, który będzie odtwarzany, gdy nie uda się wczytać strumienia z dynamicznym wstawianiem reklam.

BACKUP_STREAM_URL

contentType Opcjonalnie: Typ MIME strumieni zapasowych treści. Wymagane tylko w przypadku DASH strumienie.

CONTENT_STREAM_MIMETYPE

streamType Stały lub literał łańcuchowy używany dla tej wartości różni się w zależności od nadawcy platformy.
customData Pole customData zawiera pary klucz-wartość zawierające dodatkowe wymagane pola.
Pole Spis treści
manifestUrl Adres URL strumienia wideo podany przez manipulator manifestu lub firmę zewnętrzną partnera. Powinno być wymagane wstawienie identyfikatora strumienia podanego przez IMA DAI SDK przed wysłaniem żądania. W tym przykładzie adres URL pliku manifestu zawiera obiekt zastępczy, [[STREAMID]], który zostaje zastąpiony przed wysłaniem żądania.

MANIFEST_URL

networkCode Kod sieci powiązany z kontem Google Ad Managera 360.

NETWORK_CODE

customAssetKey Niestandardowy klucz pliku identyfikujący zdarzenie wyświetlania bloku reklamowego w Google Ads Menedżer 360. W niektórych przypadkach może pojawić się z pliku manifestu. za pomocą manipulatora lub zewnętrznego partnera obsługującego bloki reklamowe.

CUSTOM_ASSET_KEY

apiKey Opcjonalny klucz interfejsu API do pobierania identyfikatora strumienia z pakietu IMA DAI SDK.

API_KEY

Oto kilka przykładów kodu, które ułatwią Ci rozpoczęcie pracy:

Przeglądarka

Aby skonfigurować te wartości w polu nadawcy Cast w sieci, najpierw utwórz MediaInfo z wymaganymi danymi, a następnie wczytaj żądania do odbiornika internetowego.

// Create mediaInfo object
const mediaInfo = new chrome.cast.media.MediaInfo("CONTENT_ID");
mediaInfo.contentUrl = "BACKUP_STREAM_URL";
mediaInfo.contentType = "CONTENT_STREAM_MIMETYPE";
mediaInfo.streamType = chrome.cast.media.StreamType.LIVE;
mediaInfo.customData = {
manifestUrl: "MANIFEST_URL",
networkCode: "NETWORK-CODE",
customAssetKey: "CUSTOM_ASSET_KEY",
apiKey: "API_KEY"
};

// Make load request to cast web receiver
const castSession = cast.framework.CastContext.getInstance().getCurrentSession();
const request = new chrome.cast.media.LoadRequest(mediaInfo);
castSession.loadMedia(request).then(
  () => { console.log('Load succeed'); },
  (errorCode) => { console.log('Error code: ' + errorCode); });

Android

Aby skonfigurować te wartości w polu nadawcy Cast w sieci, najpierw utwórz Obiekt MediaInfo z wymaganymi danymi, a następnie żądanie wczytania do sieci odbiorcy.

JSONObject customData = new JSONObject()?
  .put("manifestUrl", "MANIFEST_URL")
  .put("networkCode", "NETWORK-CODE")
  .put("customAssetKey", "CUSTOM_ASSET_KEY")
  .put("apiKey", "API_KEY");
MediaInfo mediaInfo = MediaInfo.Builder("CONTENT_ID")
  .setContentUrl("BACKUP_STREAM_URL")
  .setContentType("CONTENT_STREAM_MIMETYPE")
  .setStreamType(MediaInfo.STREAM_TYPE_LIVE)
  .setCustomData(customData)
  .build();

RemoteMediaClient remoteMediaClient = mCastSession.getRemoteMediaClient();
remoteMediaClient.load(new MediaLoadRequestData.Builder().setMediaInfo(mediaInfo).build());

iOS (Obj-C)

Aby skonfigurować te wartości w polu nadawcy Cast w sieci, najpierw utwórz GCKMediaInformation z wymaganymi danymi, a następnie wczytaj żądania do odbiornika internetowego.

NSURL url = [NSURL URLWithString:@"BACKUP_STREAM_URL"];
NSDictionary *customData = @{
  @"manifestUrl": @"MANIFEST_URL",
  @"networkCode": @"NETWORK-CODE",
  @"customAssetKey": @"CUSTOM_ASSET_KEY",
  @"apiKey": @"API_KEY"};
mediaInfoBuilder.customData = customData;

GCKMediaInformationBuilder *mediaInfoBuilder =
  [[GCKMediaInformationBuilder alloc] initWithContentID: @"CONTENT_ID"];
mediaInfoBuilder.contentURL = url;
mediaInfoBuilder.contentType = @"CONTENT_STREAM_MIMETYPE";
mediaInfoBuilder.streamType = GCKMediaStreamTypeLive;
mediaInfoBuilder.customData = customData;
self.mediaInformation = [mediaInfoBuilder build];

GCKRequest *request = [self.sessionManager.currentSession.remoteMediaClient loadMedia:self.mediaInformation];
if (request != nil) {
  request.delegate = self;
}

iOS (Swift)

Aby skonfigurować te wartości w polu nadawcy Cast w sieci, najpierw utwórz GCKMediaInformation z wymaganymi danymi, a następnie wczytaj żądania do odbiornika internetowego.

let url = URL.init(string: "BACKUP_STREAM_URL")
guard let mediaURL = url else {
  print("invalid mediaURL")
  return
}

let customData = [
  "liveConfigID": "MANIFEST_URL",
  "networkCode": "NETWORK-CODE",
  "customAssetKey": "CUSTOM_ASSET_KEY",
  "region": "API_KEY"
]

let mediaInfoBuilder = GCKMediaInformationBuilder.init(contentId: "CONTENT_ID")
mediaInfoBuilder.contentURL = mediaUrl
mediaInfoBuilder.contentType = @"CONTENT_STREAM_MIMETYPE"
mediaInfoBuilder.streamType = GCKMediaStreamType.Live
mediaInfoBuilder.customData = customData
mediaInformation = mediaInfoBuilder.build()

guard let mediaInfo = mediaInformation else {
  print("invalid mediaInformation")
  return
}

if let request = sessionManager.currentSession?.remoteMediaClient?.loadMedia
(mediaInfo) {
  request.delegate = self
}

Narzędzie CAC

Aby skonfigurować te wartości w poleceniu Cast , kliknij kartę Load Media (Załaduj multimedia) i ustaw typ żądania wczytywania LOAD. Następnie zastąp dane JSON w obszarze tekstowym. za pomocą tego kodu JSON:

{
  "media": {
    "contentId": "CONTENT_ID",
    "contentUrl": "BACKUP_STREAM_URL",
    "contentType": ""CONTENT_STREAM_MIMETYPE"",
    "streamType": "LIVE",
    "customData": {
      "liveConfigID": "MANIFEST_URL",
      "networkCode": "NETWORK-CODE",
      "customAssetKey": "CUSTOM_ASSET_KEY",
      "oAuthToken": "API_KEY"
    }
  }
}

To niestandardowe żądanie obciążenia może zostać wysłane do odbiorcy w celu przetestowania pozostałej części kroków.

Tworzenie podstawowego odbiornika CAF

Utwórz niestandardowy odbiornik internetowy, tak jak to widać w niestandardowym odbiorniku internetowym pakietu SDK CAF Przewodnik.

Kod Twojego odbiornika powinien wyglądać tak:

<html>
<head>
  <script
      src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js">
  </script>
</head>
<body>
  <cast-media-player></cast-media-player>
  <script>
    // ...
  </script>
</body>
</html>

Zaimportuj pakiet IMA DAI SDK i pobierz Menedżera odtwarzaczy.

Dodaj tag skryptu, by zaimportować pakiet IMA DAI SDK dla CAF do swojego odbiornika internetowego. po wczytaniu skryptu. W tagu skryptu zapisz kontekst odbiorcy i gracza.

<html>
<head>
  <script
      src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
  <script src="//imasdk.googleapis.com/js/sdkloader/cast_dai.js"></script>
</head>
<body>
  <cast-media-player></cast-media-player>
  <script>
    const castContext = cast.framework.CastReceiverContext.getInstance();
    const playerManager = castContext.getPlayerManager();

    castContext.start();
  </script>
</body>
</html>

Inicjowanie Menedżera strumieni IMA

Zainicjuj Menedżera strumieni IMA.

<html>
<head>
  <script type="text/javascript"
      src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
  <script src="//imasdk.googleapis.com/js/sdkloader/cast_dai.js"></script>
</head>
<body>
  <cast-media-player></cast-media-player>
  <script>
    const castContext = cast.framework.CastReceiverContext.getInstance();
    const playerManager = castContext.getPlayerManager();
    const streamManager = new google.ima.cast.dai.api.StreamManager();

    castContext.start();
  </script>
</body>
</html>

Tworzenie przechwytującego obciążenia w usłudze Stream Manager

Zanim elementy multimedialne zostaną przekazane do CAF, utwórz żądanie strumienia w LOAD message (WCZYTAJ wiadomość) .

    const castContext = cast.framework.CastReceiverContext.getInstance();
    const playerManager = castContext.getPlayerManager();
    const streamManager = new google.ima.cast.dai.api.StreamManager();

    /**
     * Creates a livestream request object for a pod serving stream.
     * @param {!LoadRequestData} castRequest The request object from the cast sender
     * @return {StreamRequest} an IMA stream request
     */
    const createStreamRequest = (castRequest) => { /* ... */};

    /**
     * Initates a DAI stream request for the final stream manifest.
     * @param {!LoadRequestData} castRequest The request object from the cast sender
     * @return {Promise<LoadRequestData>} a promise that resolves to an updated castRequest, containing the DAI stream manifest
     */
    const createDAICastRequest = (castRequest) => {
        return streamManager.requestStream(castRequest, createStreamRequest(castRequest))
          .then((castRequestWithPodStreamData) => {
            console.log('Successfully made DAI stream request.');
            // ...
            return castRequestWithPodStreamData;
          })
          .catch((error) => {
            console.log('Failed to make DAI stream request.');
            // CAF will automatically fallback to the content URL
            // that it can read from the castRequest object.
            return castRequest;
          });
    };

    playerManager.setMessageInterceptor(
        cast.framework.messages.MessageType.LOAD, createDAICastRequest);

    castContext.start();

Utwórz żądanie strumienia

Wykonaj funkcję createStreamRequest, aby utworzyć blok reklamowy na podstawie strumienia. na żądanie wczytywania CAF.

    /**
     * Creates a livestream request object for a pod serving stream.
     * @param {!LoadRequestData} castRequest The request object from the cast sender
     * @return {StreamRequest} an IMA stream request
     */
    const createStreamRequest = (castRequest) => {

      const streamRequest = new google.ima.cast.dai.api.PodStreamRequest();
      const customData = castRequest.media.customData;

      streamRequest.customAssetKey = customData.customAssetKey;
      streamRequest.networkCode = customData.networkCode;
      streamRequest.apiKey = customData.apiKey;

      return streamRequest;
    };

Zastąp URL treści adresem URL pliku manifestu i identyfikatorem strumienia.

Jeśli żądanie strumieniowania zostanie zrealizowane, użyj funkcji streamManager.getStreamId(), aby pobierz identyfikator strumienia i wstaw go do pola manifestUrl, zastępując [[STREAMID]] Następnie zastąp obecną wersję contentUrl nowym manifestUrl, aby CAF odtwarzał transmisję na żywo z połączonymi blokami reklamowymi.

    /**
     * Initates a DAI stream request for the final stream manifest.
     * @param {!LoadRequestData} castRequest The request object from the cast sender
     * @return {Promise<LoadRequestData>} a promise that resolves to an updated castRequest, containing the DAI stream manifest
     */
    const createDAICastRequest = (castRequest) => {
        return streamManager.requestStream(castRequest, createStreamRequest(castRequest))
          .then((castRequestWithPodStreamData) => {
            console.log('Successfully made DAI stream request.');
            const media = castRequestWithPodStreamData.media;
                const manifestUrl = media.customData.manifestUrl || "";
                if (manifestUrl) {
                    console.log('Replacing the contentURL with the manifest URL and stream ID');
                    const streamId = streamManager.getStreamId();
                    castRequestWithPodStreamData.media.contentUrl = manifestUrl.replace('[[STREAMID]]', streamId);

            return castRequestWithPodStreamData;
          })
          .catch((error) => {
            console.log('Failed to make DAI stream request.');
            // CAF will automatically fallback to the content URL
            // that it can read from the castRequest object.
            return castRequest;
          });
    };

Możesz teraz wysyłać żądania i odtwarzać strumienie podów obsługujące je za pomocą aplikacji Cast oraz pakiet IMA DAI SDK dla CAF.