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

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

Kapsül yayınlama DAI

IMA SDK'ları, multimedya reklamlarını 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ıyla 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ız içinde reklam ve içerik videosu arasında geçişi yönetmek zorunda kalmazsınız.

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 bilgilerinin yanı sıra bir CAF göndereni emüle etmek için Cast Komut ve Denetim aracını kullanma konusunda bilgi sahibi olunması varsayılır.

IMA DAI kapsül yayınlama özelliğini kullanmak için bir kapsül yayınlama iş ortağıyla çalışıyor olmanız ve Ad Manager 360 Advanced hesabına sahip olmanız gerekir. Ad Manager hesabınız varsa daha ayrıntılı bilgi için hesap yöneticinizle iletişime geçin. Ad Manager'a kaydolma hakkında bilgi 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 edinmek 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'sını kullanarak kapsül yayınlama işlemini uygulama, bu kılavuzda gösterilen iki ana bileşen içerir:

  • StreamRequest: Google'ın reklamcılık sunucularına yapılan akış isteğini tanımlayan bir nesne. İstekler; ağ kodu, özel öğe anahtarı ve isteğe bağlı API anahtarının yanı sıra diğer isteğe bağlı parametreleri belirtir.
  • StreamManager: İzleme ping'lerini tetikleme ve akış etkinliklerini yayıncıya yönlendirme gibi, video akışı ile IMA DAI SDK'sı arasındaki iletişimi işleyen bir nesne.

Ön koşullar

  • Kayıtlı test cihazlarının bulunduğu bir Cast Developer Console hesabı.
  • Cast Developer Console'unuza kayıtlı olan ve bu kılavuzda sağlanan kodu barındırmak için değiştirilebilecek, barındırılan bir web alıcı uygulaması.
  • Web alıcı uygulamanızı kullanacak şekilde yapılandırılan bir gönderme uygulama. Bu örneğin amaçları doğrultusunda, 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 öğesinin benzersiz tanımlayıcısı.

CONTENT_ID

contentUrl İsteğe bağlı. DAI akışı yüklenemezse 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 değişmez değeri veya sabit değer, gönderen platformuna göre değişir.
customData customData alanı, ek zorunlu alanların bulunduğu bir anahtar/değer deposu 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 girmeniz gerekir. Bu örnekte manifest URL'si, istekte bulunmadan önce akış kimliğiyle değiştirilen bir yer tutucu ([[STREAMID]]) içeriyor.

MANIFEST_URL

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

NETWORK_CODE

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

CUSTOM_ASSET_KEY

apiKey IMA DAI SDK'sından Akış Kimliği almak için kullanılan isteğe bağlı bir API anahtarı.

API_KEY

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

Web

Bu değerleri bir Cast web göndericisinde yapılandırmak için önce gerekli verilerle bir MediaInfo nesnesi oluşturun, ardından web alıcısına 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 önce gerekli verilerle bir MediaInfo nesnesi oluşturun, ardından web alıcıya 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)

Bu değerleri bir Cast web göndericisinde yapılandırmak için önce gerekli verilerle bir GCKMediaInformation nesnesi oluşturun, ardından web alıcısına 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)

Bu değerleri bir Cast web göndericisinde yapılandırmak için önce gerekli verilerle bir GCKMediaInformation nesnesi oluşturun, ardından web alıcısına 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ınlama Komutu ve Denetimi aracında yapılandırmak için Medya Yükle 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, diğer adımları test etmek için alıcıya gönderilebilir.

Temel 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ızın kodu şu şekilde 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 edinme

Komut dosyası CAF'yi yükledikten hemen sonra, CAF için IMA DAI SDK'sını web alıcınıza 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ğer olarak depolayın.

<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 Akış Yöneticisi'ni 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 LOAD 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şturma

CAF yükleme isteğine göre kapsül sunma 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() öğesini kullanın ve bu kimliği [[STREAMID]] yerine 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 Uygulaması Çerçevesi ve CAF için IMA DAI SDK'sı ile kapsül yayınlama akışları isteyebilir ve oynatabilirsiniz.