IMA DAI SDK'sını kullanmaya başlama

İlgilendiğiniz DAI çözümünü seçme

DAI yayınlayan kapsül

IMA SDK'ları, multimedya reklamları web sitelerinize ve uygulamalarınıza entegre etmeyi basitleştirir.

IMA SDK'ları, VAST uyumlu herhangi bir reklam sunucusundan reklam isteyebilir ve uygulamalarınızda reklam oynatmayı yönetebilir.

IMA DAI SDK'ları sayesinde uygulamalar VOD veya canlı içerik için reklam ve içerik videosu için akış isteğinde bulunur. SDK, daha sonra birleştirilmiş bir video akışı döndürür, böylece uygulamanızda reklam ve içerik videosu arasında geçişi yönetmeniz gerekmez.

Bu kılavuzda, CAF için IMA DAI SDK'sı kullanılarak Canlı DAI Kapsül Yayınlama akışının nasıl oynatılacağı gösterilmektedir.

Bu kılavuzu kullanmadan önce Chromecast Uygulama Çerçevesi'nin Web Alıcısı protokolü hakkında bilgi edinin. Bu kılavuzda, mesaj önleyiciler ve mediaInformation nesneleri gibi CAF alıcısı kavramlarının temel düzeyde olduğu ve bir CAF göndereni emülasyonu için Yayınlama Komut ve Denetim aracını kullanma konusunda bilgi sahibi olunduğu varsayılır.

IMA DAI kapsül yayınını kullanmak için kapsül yayınlayan iş ortağıyla çalışıyor olmanız ve bir Ad Manager 360 Advanced hesabına sahip olmanız gerekir. Ad Manager hesabınız varsa daha fazla bilgi için hesap yöneticinize başvurun. Ad Manager'a kaydolma hakkında bilgi edinmek için Ad Manager Yardım Merkezi'ni ziyaret edin.

Diğer platformlarla entegrasyon veya IMA istemci tarafı SDK'larını kullanma hakkında bilgi için Interactive Media Ads SDK'ları bölümüne bakın.

IMA DAI Kapsül Yayınlamaya genel bakış

IMA CAF DAI SDK kullanarak kapsül yayınını uygulamak, bu kılavuzda gösterilen iki ana bileşenden oluşur:

  • StreamRequest: Google'ın reklamcılık sunucularına akış isteğini tanımlayan bir nesnedir. İstekler bir Ağ Kodu, Özel Öğe Anahtarı, isteğe bağlı bir API anahtarı ve diğer isteğe bağlı parametreleri belirtir.
  • StreamManager: Video akışı ile IMA DAI SDK'sı arasındaki iletişimi (izleme ping'lerini etkinleştirme ve akış etkinliklerini yayıncıya iletme gibi) işleyen bir nesne.

Ön koşullar

  • Kayıtlı test cihazlarına sahip bir Cast Developer Console hesabı.
  • Cast Developer Console'unuza kayıtlı, bu kılavuzda sağlanan kodu barındırmak için değiştirilebilen, barındırılan bir web alıcısı uygulaması.
  • Web alıcı uygulamanızı kullanacak şekilde yapılandırılmış bir gönderme uygulaması. Bu örnekte, gönderen olarak Cast Komut ve Denetim aracını kullanın.

Gönderenin MediaInfo nesnelerini yapılandırma

Öncelikle, gönderen uygulamanızın MediaInfo nesnesini aşağıdaki alanları içerecek şekilde yapılandırın:

Alan İçindekiler
contentId Bu medya öğesi için benzersiz tanımlayıcı.

CONTENT_ID

contentUrl İsteğe bağlı. DAI akışı yüklenemiyorsa oynatılacak yedek akış URL'si.

BACKUP_STREAM_URL

contentType İsteğe bağlı. İçerik yedek akışlarının mime türü. Yalnızca DASH akışları için gereklidir.

CONTENT_STREAM_MIMETYPE

streamType Bu değer için kullanılan dize sabit değeri veya sabit değeri, gönderen platformuna göre değişir.
customData customData alanı, ek zorunlu alanların anahtar/değer deposunu içerir.
Alan İçindekiler
manifestUrl Manifest düzenleyiciniz veya üçüncü taraf iş ortağınız tarafından sağlanan video akışı URL'si. İstekte bulunmadan önce, IMA DAI SDK'sı tarafından sağlanan akış kimliğini eklemeniz gerekir. Bu örnekte, manifest URL'si bir yer tutucu ([[STREAMID]]) içeriyor. Bu yer tutucu, istekte bulunmadan önce akış kimliğiyle değiştirilir.

MANIFEST_URL

networkCode Google Ad Manager 360 hesabınızın ağ kodu.

NETWORK_CODE

customAssetKey Google Ad Manager 360'ta kapsül sunma etkinliğinizi tanımlayan özel öğe anahtarı. Bazı durumlarda bunu manifest düzenleyiciden veya üçüncü taraf bir kapsül yayınlama iş ortağından alabilirsiniz.

CUSTOM_ASSET_KEY

apiKey IMA DAI SDK'sından akış kimliği almak için isteğe bağlı bir API anahtarı.

API_KEY

Başlamanıza yardımcı olacak bazı kod örneklerini aşağıda bulabilirsiniz:

Web

Bir Cast web göndericisinde bu değerleri yapılandırmak için ilk olarak gerekli verilerle bir MediaInfo nesnesi oluşturun, ardından web alıcısına bir yükleme isteği gönderin.

// 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

Bu değerleri bir Cast web göndericisinde yapılandırmak için ilk olarak gerekli verilerle bir MediaInfo nesnesi oluşturun, ardından web alıcısına bir yükleme isteği gönderin.

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)

Bir Cast web göndericisinde bu değerleri yapılandırmak için ilk olarak gerekli verilerle bir GCKMediaInformation nesnesi oluşturun, ardından web alıcısına bir yükleme isteği gönderin.

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)

Bir Cast web göndericisinde bu değerleri yapılandırmak için ilk olarak gerekli verilerle bir GCKMediaInformation nesnesi oluşturun, ardından web alıcısına bir yükleme isteği gönderin.

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
}

CAC aracı

Bu değerleri Yayın Komut ve Denetimi aracında yapılandırmak için Medya Yükleme sekmesini tıklayın ve özel yükleme isteği türünü YÜKLE olarak ayarlayın. Ardından metin alanındaki JSON verilerini şu JSON ile değiştirin:

{
  "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"
    }
  }
}

Bu özel yükleme isteği, kalan adımları test etmek için alıcıya gönderilebilir.

Temel bir CAF alıcısı oluşturma

CAF SDK Özel Web Alıcısı Kılavuzu'nda gösterildiği gibi, özel bir web alıcısı oluşturun.

Alıcının kodu aşağıdaki gibi görünmelidir:

<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>

IMA DAI SDK'sını içe aktarın ve Oynatıcı Yöneticisi'ni edinin

CAF için IMA DAI SDK'sını web alıcınıza, komut dosyasının CAF'sini yükledikten hemen sonra içe aktarmak üzere bir komut dosyası etiketi ekleyin. Komut dosyası etiketinde, alıcı bağlamını ve oynatıcı yöneticisini alıcıyı başlatmadan önce sabit değerler olarak kaydedin.

<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>

IMA Stream Manager'ı başlatma

IMA Stream Manager'ı başlatın.

<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>

Akış Yöneticisi Yük Önleyicisini Oluşturma

Medya öğeleriniz CAF'ye iletilmeden önce, akış isteğinizi bir YÜKLE mesajı önleyicide oluşturun.

    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();

Akış isteğini oluşturun

CAF yükleme isteğine göre kapsül yayınlama akışı oluşturmak için createStreamRequest işlevini tamamlayın.

    /**
     * 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;
    };

İçerik URL'sini manifest URL'si ve akış kimliğiyle değiştirin

Akış isteğiniz başarılı olursa akışın kimliğini almak için streamManager.getStreamId() kullanın ve [[STREAMID]] yerine bu kimliği manifestUrl'nize ekleyin. Ardından, CAF'nin canlı yayını birleştirilmiş reklam kapsülleriyle oynatması için mevcut contentUrl değerini yeni manifestUrl ile değiştirin.

    /**
     * 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;
          });
    };

Artık Cast Uygulama Çerçevesi ve CAF için IMA DAI SDK'sı ile kapsül yayınlama akışlarını isteyebilir ve oynatabilirsiniz.