Reklam araları
Web Gönderme SDK'sı, belirli bir medya akışındaki Reklam Araları ve tamamlayıcı reklamlar için destek sağlar.
Reklam Aralarının işleyiş şekli hakkında daha fazla bilgi edinmek için Web Alıcısı Reklam Aralarına Genel Bakış bölümüne bakın.
Aralar hem gönderende hem de alıcıda belirtilebilir ancak tüm platformlarda tutarlı bir davranış sağlamak için araların Web Alıcısı ve Android TV Alıcısı'nda belirtilmesi önerilir.
Web'de, BreakClip
ve Break
kullanarak bir yükleme komutunda reklam aralarını belirtin:
let breakClip1 = new BreakClip('bc0');
breakClip1.title = 'Clip title'
breakClip1.posterUrl = 'https://www.some.url';
breakClip1.duration = 60;
breakClip.whenSKippable = 5;
let breakClip2 = ...
let breakClip3 = ...
let break1 = new Break('b0', ['bc0', 'bc1', 'bc2'], 10);
let mediaInfo = new chrome.cast.media.MediaInfo(<contentId>, '<contentType');
...
mediaInfo.breakClips = [breakClip1, breakClip2, breakClip3];
mediaInfo.breaks = [break1];
let request = new chrome.cast.media.LoadRequest(mediaInfo);
cast.framework.CastContext.getInstance().getCurrentSession().loadMedia(request)
Kanal API'lerini kullanma
Parça, metin (altyazı) ya da ses veya video akışı nesnesi olabilir. Track API'leri, uygulamanızda bu nesnelerle çalışmanıza olanak tanır.
Track
nesnesi, SDK'daki bir parçayı temsil eder. Bir parçayı yapılandırıp parçaya aşağıdaki gibi benzersiz bir kimlik atayabilirsiniz:
var englishSubtitle = new chrome.cast.media.Track(1, // track ID
chrome.cast.media.TrackType.TEXT);
englishSubtitle.trackContentId = 'https://some-url/caption_en.vtt';
englishSubtitle.trackContentType = 'text/vtt';
englishSubtitle.subtype = chrome.cast.media.TextTrackType.SUBTITLES;
englishSubtitle.name = 'English Subtitles';
englishSubtitle.language = 'en-US';
englishSubtitle.customData = null;
var frenchSubtitle = new chrome.cast.media.Track(2, // track ID
chrome.cast.media.TrackType.TEXT);
frenchSubtitle.trackContentId = 'https://some-url/caption_fr.vtt';
frenchSubtitle.trackContentType = 'text/vtt';
frenchSubtitle.subtype = chrome.cast.media.TextTrackType.SUBTITLES;
frenchSubtitle.name = 'French Subtitles';
frenchSubtitle.language = 'fr';
frenchSubtitle.customData = null;
var frenchAudio = new chrome.cast.media.Track(3, // track ID
chrome.cast.media.TrackType.AUDIO);
frenchAudio.trackContentId = 'trk0001';
frenchAudio.trackContentType = 'audio/mp3';
frenchAudio.subtype = null;
frenchAudio.name = 'French Audio';
frenchAudio.language = 'fr';
frenchAudio.customData = null;
Bir medya öğesinin birden fazla kanalı olabilir. Örneğin, birden fazla altyazı (her biri farklı bir dil için) veya birden fazla alternatif ses akışı (farklı diller için) olabilir.
MediaInfo
, medya öğesinin modelini oluşturan sınıftır. Bir Track
nesnesi koleksiyonunu medya öğesiyle ilişkilendirmek için tracks
mülkünü güncelleyin. Medyanın alıcıya yüklenmeden önce bu ilişkilendirmenin yapılması gerekir:
var tracks = [englishSubtitle, frenchSubtitle, frenchAudio];
var mediaInfo = new chrome.cast.media.MediaInfo(mediaURL);
mediaInfo.contentType = 'video/mp4';
mediaInfo.metadata = new chrome.cast.media.GenericMediaMetadata();
mediaInfo.customData = null;
mediaInfo.streamType = chrome.cast.media.StreamType.BUFFERED;
mediaInfo.textTrackStyle = new chrome.cast.media.TextTrackStyle();
mediaInfo.duration = null;
mediaInfo.tracks = tracks;
Etkin parçaları medya activeTrackIds
isteğinde ayarlayabilirsiniz.
Ayrıca, medya öğesi yüklendikten sonra EditTracksInfoRequest(opt_activeTrackIds, opt_textTrackStyle)
çağırıp opt_activeTrackIds
içinde etkinleştirilecek parçaların kimliklerini ileterek medya öğesiyle ilişkilendirilmiş bir veya daha fazla kanalı etkinleştirebilirsiniz. Her iki parametrenin de isteğe bağlı olduğunu ve isteğe bağlı olarak hangi etkin parçaların veya stillerin ayarlanacağını seçebileceğinizi unutmayın. Örneğin, Fransızca altyazıyı (2
) ve Fransızca sesi (3
) şu şekilde etkinleştirebilirsiniz:
var activeTrackIds = [2, 3];
var tracksInfoRequest = new chrome.cast.media.EditTracksInfoRequest(activeTrackIds);
media.editTracksInfo(tracksInfoRequest, successCallback, errorCallback);
Mevcut medyadaki tüm ses parçalarını veya video parçalarını kaldırmak için mediaInfo.tracks=null
düğmesini (boş dizi) ayarlayıp medyayı yeniden yüklemeniz yeterlidir.
Mevcut medyadaki tüm metin parçalarını kaldırmak için (örneğin, altyazıları kapatma) aşağıdakilerden birini yapın:
var activeTrackIds = [2, 3];
uygulamasını (daha önce gösterilen) yalnızca [3] ses parçasını içerecek şekilde güncelleyin.mediaInfo.tracks=null
ayarla. Metin altyazılarını (track.hidden
) kapatmak için medyayı yeniden yüklemeniz gerekmez. Daha önce içermeyen içermeyenactiveTracksId
dizisitrackId
göndermek, metin parçasını devre dışı bırakır.
Metin parçalarının stilini ayarlama
TextTrackStyle
, metin parçasının stil bilgilerini kapsayan nesnedir. Mevcut bir TextTrackStyle
nesnesini oluşturduktan veya güncelledikten sonra, editTrackInfo
yöntemini çağırarak bunu şu anda oynatılan medya öğesine uygulayabilirsiniz:
var textTrackStyle = new chrome.cast.media.TextTrackStyle();
var tracksInfoRequest = new chrome.cast.media.EditTracksInfoRequest(textTrackStyle);
media.editTracksInfo(tracksInfoRequest, successCallback, errorCallback);
İsteğin durumunu, geri çağırmaların sonucu olarak (başarılı veya hata) izleyebilir ve kaynak göndereni buna göre güncelleyebilirsiniz.
Uygulamalar, metin kanallarının stilini, sistem tarafından veya uygulamanın kendisi tarafından sağlanan ayarları kullanarak güncellemesine izin vermelidir.
Aşağıdaki metin izleme stili öğelerinin stilini belirleyebilirsiniz:
- Ön plan rengi (metin) ve opaklık
- Arka plan rengi ve şeffaflık
- Kenar türü
- Kenar Rengi
- Yazı Tipi Ölçeki
- Yazı Tipi Ailesi
- Yazı Tipi Stili
Örneğin, metin rengini aşağıdaki gibi% 75 opaklıkla kırmızı olarak ayarlayın:
var textTrackStyle = new chrome.cast.media.TextTrackStyle();
textTrackStyle.foregroundColor = '#80FF0000';
Ses düzeyi kontrolü
Alıcı ses düzeyini ayarlamak için RemotePlayer
ve RemotePlayerController
değerlerini kullanabilirsiniz.
function changeVolume(newVolume) {
player.volumeLevel = newVolume;
playerController.setVolume();
// Update sender UI to reflect change
}
Gönderen uygulamanın ses düzeyini kontrol etmek için aşağıdaki kurallara uyması gerekir:
- Gönderen uygulamanın, alıcı başına
her zaman sesi bildirebilmesi için, gönderen uygulaması alıcıyla senkronize edilmelidir. Gönderendeki hacmi korumak için
RemotePlayerEventType.VOLUME_LEVEL_CHANGED
veRemotePlayerEventType.IS_MUTED_CHANGED
geri çağırmasını kullanın. Daha fazla bilgi için Durum güncellemeleri bölümüne bakın. - Gönderen uygulamalarda ses düzeyi belirli ve önceden tanımlanmış bir düzeyde olmamalı veya alıcı alıcıya yüklendiğinde, ses düzeyi gönderen cihazın zili çaldırılacak/medya ses düzeyi olarak ayarlanmamalıdır.
Tasarım Listesi'ndeki Gönderen ses denetimleri bölümüne bakın.
Alıcıya medya mesajı gönderme
Media Messages
, gönderenden alıcıya gönderilebilir. Örneğin, alıcıya SKIP_AD
mesajı göndermek için:
// Get a handle to the skip button element
const skipButton = document.getElementById('skip');
skipButton.addEventListener("click", function() {
if (castSession) {
const media = castSession.getMediaSession();
castSession.sendMessage('urn:x-cast:com.google.cast.media', {
type: 'SKIP_AD',
requestId: 1,
mediaSessionId: media.mediaSessionId
});
}
});
Durum güncellemeleri
Aynı alıcıya birden fazla gönderici bağlandığında, bu değişiklikler diğer gönderenlerden başlatılmış olsa bile her gönderenin alıcıdaki değişikliklerden haberdar olması önemlidir.
Bu nedenle, uygulamanız gereken tüm dinleyicileri RemotePlayerController
ürününe kaydetmelidir.
Geçerli medyanın TextTrackStyle
değişirse bağlı tüm gönderenler bilgilendirilir ve geçerli medya oturumunun ilgili özellikleri (ör. MediaInfo
alanının activeTrackIds
ve textTrackStyle
) geri çağırmalarındaki gönderenlere gönderilir. Bu durumda alıcı SDK'sı, yeni stilin öncekinden farklı olup olmadığını doğrulamaz ve tüm bağlı gönderenleri bağımsız olarak bilgilendirir.
İlerleme göstergesi
Çoğu konum için, gönderende ilerleme göstergesinin bulunduğu oynatma konumunun gösterilmesi bir zorunluluktur. Cast API'leri, bu ve diğer senaryolar için bant genişliği tüketimini optimize eden Yayın medya protokolünü kullanır. Böylece kendi durum senkronizasyonunuzu uygulamanız gerekmez. API'leri kullanarak medya oynatmaya ilişkin bir ilerleme göstergesinin doğru şekilde uygulanması için CastVideos-chrome örnek uygulamasına bakın.
CORS gereksinimleri
Google Cast, uyarlanabilir medya akışı için CORS başlıklarının bulunmasını gerektirir, ancak basit mp4 medya akışları bile Parçaları içeriyorsa CORS'u gerektirir. Herhangi bir medyada İzlemeleri etkinleştirmek isterseniz hem kanal yayınlarınız hem de medya yayınlarınız için CORS'yi etkinleştirmeniz gerekir. Sunucunuzdaki basit mp4 medyanız için CORS başlıkları yoksa ve basit bir altyazı parçası eklerseniz sunucunuzu uygun CORS başlıklarını içerecek şekilde güncellemediğiniz sürece medyanızı oynatamazsınız.
Şu başlıklara ihtiyacınız var: Content-Type
,Accept-Encoding
ve Range
.
Son iki başlığın (Accept-Encoding
ve Range
) daha önce ihtiyaç duymadığınız ek başlıklar olduğunu unutmayın.
"*" joker karakterleri Access-Control-Allow-Origin
başlığı için kullanılamaz. Sayfada korumalı medya içeriği varsa sayfada joker karakter yerine alan adı kullanılmalıdır.
Web sayfasını yeniden yüklemeden oturumu devam ettirme
Mevcut bir CastSession
öğesini devam ettirmek için
requestSessionById(sessionId)
kullanmaya çalıştığınız oturumu sessionId
içinde kullanın.
loadMedia()
araması yapıldıktan sonra getSessionId()
kullanılarak sessionId
, etkin CastSession
adresinde bulunabilir.
Önerilen yaklaşım aşağıdakilerden hangisidir?
- Oturumu başlatmak için
loadMedia()
numaralı telefonu arayın sessionId
cihazını yerel olarak depola- Gerektiğinde
requestSessionById(sessionId)
kullanarak oturuma yeniden katılın
let sessionId;
function rejoinCastSession() {
chrome.cast.requestSessionById(sessionId);
// Add any business logic to load new content or only resume the session
}
document.getElementById('play-button').addEventListener(("click"), function() {
if (sessionId == null) {
let castSession = cast.framework.CastContext.getInstance().getCurrentSession();
if (castSession) {
let mediaInfo = createMediaInfo();
let request = new chrome.cast.media.LoadRequest(mediaInfo);
castSession.loadMedia(request)
sessionId = CastSession.getSessionId();
} else {
console.log("Error: Attempting to play media without a Cast Session");
}
} else {
rejoinCastSession();
}
});
Sonraki adımlar
Bu şekilde, Web Gönderen uygulamanıza ekleyebileceğiniz özellikler tamamlanmıştır. Artık başka bir platform (Android veya iOS) için gönderen uygulaması oluşturabilir veya alıcı uygulaması oluşturabilirsiniz.