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