Bu sayfada kod snippet'leri ve Özel Web Alıcısı uygulaması için kullanılabilen özelliklerin açıklamaları yer almaktadır.
- Web Alıcısı'yla sağlanan yerleşik oynatıcı kullanıcı arayüzünü temsil eden bir
cast-media-player
öğesi. background-image
,splash-image
vefont-family
gibi çeşitli kullanıcı arayüzü öğelerini biçimlendirmek içincast-media-player
öğesine yönelik özel CSS benzeri stil.- Web Alıcısı çerçevesini yükleyecek bir komut dosyası öğesi.
- Mesajlara müdahale etmek ve etkinlikleri yönetmek için kullanılan JavaScript kodu.
- Otomatik oynatma sırası.
- Oynatmayı yapılandırma seçenekleri.
- Web Alıcısı bağlamını ayarlama seçenekleri.
- Web Alıcısı uygulamasının desteklediği komutları ayarlama seçenekleri.
- Web Alıcısı uygulamasını başlatmak için bir JavaScript çağrısı.
Uygulama yapılandırması ve seçenekleri
CastReceiverContext
geliştiriciye verilen en harici sınıftır ve temel kitaplıkların yüklenmesini yönetir ve Web Alıcısı SDK'sının
ilk kullanıma hazırlanmasını işler.
Web Alıcısı API'si bir gönderenin bağlantısının kesildiğini tespit ederse SENDER_DISCONNECTED
etkinliğini artırır. Web Alıcısı, maxInactivity
saniye olarak açıkladığımız süre boyunca
gönderenle iletişim kuramazsa SENDER_DISCONNECTED
etkinliğini de artırır. Geliştirme sırasında maxInactivity
değerini, Chrome Uzaktan Hata Ayıklama Aracısı ile uygulamada hata ayıklarken Web Alıcısı uygulamasının kapanmaması için yüksek bir değere ayarlamak iyi bir fikirdir:
const context = cast.framework.CastReceiverContext.getInstance();
const options = new cast.framework.CastReceiverOptions();
options.maxInactivity = 3600; //Development only
context.start(options);
Ancak yayınlanmış bir Web Alıcı uygulaması için, maxInactivity
yerine varsayılan değeri kullanmak daha iyidir. Web Alıcısı seçeneklerinin uygulamada yalnızca bir kez ayarlandığını unutmayın.
Diğer yapılandırma ise cast.framework.PlaybackConfig
öğesidir.
Bu, aşağıdaki şekilde ayarlanabilir:
const playbackConfig = new cast.framework.PlaybackConfig();
playbackConfig.manifestRequestHandler = requestInfo => {
requestInfo.withCredentials = true;
};
context.start({playbackConfig: playbackConfig});
Bu yapılandırma, her bir içerik oynatmayı etkiler ve temelde geçersiz kılma davranışı sağlar. Geliştiricilerin geçersiz kılabileceği davranışların listesi için cast.framework.PlaybackConfig
tanımını inceleyin. İçerikler
arasında yapılandırmayı değiştirmek için PlayerManager
kullanarak mevcut playbackConfig
değerini alabilir, bir geçersiz kılmayı değiştirebilir veya
playbackConfig
öğesini aşağıdaki şekilde sıfırlayabilirsiniz:
const playerManager =
cast.framework.CastReceiverContext.getInstance().getPlayerManager();
const playbackConfig = (Object.assign(
new cast.framework.PlaybackConfig(), playerManager.getPlaybackConfig()));
playbackConfig.autoResumeNumberOfSegments = 1;
playerManager.setPlaybackConfig(playbackConfig);
PlaybackConfig
geçersiz kılınmazsa getPlaybackConfig()
boş değerli bir nesne döndürür. PlaybackConfig that
üzerindeki tüm tesisler undefined
için varsayılan değerleri kullanır.
Etkinlik işleyici
Web Alıcısı SDK'sı, Web Alıcı uygulamanızın oynatıcı etkinliklerini işleyebilmesini sağlar. Etkinlik işleyici, işleyiciyi tetiklemesi gereken etkinlikleri belirten bir cast.framework.events.EventType
parametresi (veya bu parametrelerden oluşan bir dizi) alır. Hata ayıklama için faydalı olan önceden yapılandırılmış cast.framework.events.EventType
dizileri cast.framework.events.category
içinde bulunabilir.
Etkinlik parametresi, etkinlikle ilgili ek bilgiler sağlar.
Örneğin, bir mediaStatus
değişikliğinin ne zaman yayınlanacağını öğrenmek istiyorsanız etkinliği yönetmek için aşağıdaki mantığı kullanabilirsiniz:
const playerManager =
cast.framework.CastReceiverContext.getInstance().getPlayerManager();
playerManager.addEventListener(
cast.framework.events.EventType.MEDIA_STATUS, (event) => {
// Write your own event handling code, for example
// using the event.mediaStatus value
});
Mesaj müdahalesi
Web Alıcısı SDK'sı, Web Alıcı uygulamanızın mesajlara müdahale etmesine ve bu mesajlarda özel kod yürütmesine olanak tanır. Mesaj önleyici, ne tür bir mesajın müdahale edilmesi gerektiğini belirten bir cast.framework.messages.MessageType
parametresi alır.
Araya girenin, değiştirilen isteği veya değiştirilen istek değeriyle çözümlenen bir sözü döndürmesi gerekir. null
döndürülmesi, varsayılan mesaj işleyicinin çağrılmasını engeller. Daha fazla bilgi için Medya yükleme başlıklı makaleyi inceleyin.
Örneğin, yükleme isteği verilerini değiştirmek isterseniz müdahale etmek ve değiştirmek için aşağıdaki mantığı kullanabilirsiniz:
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.LOAD, loadRequestData => {
const error = new cast.framework.messages.ErrorData(
cast.framework.messages.ErrorType.LOAD_FAILED);
if (!loadRequestData.media) {
error.reason = cast.framework.messages.ErrorReason.INVALID_PARAM;
return error;
}
if (!loadRequestData.media.entity) {
return loadRequestData;
}
return thirdparty.fetchAssetAndAuth(loadRequestData.media.entity,
loadRequestData.credentials)
.then(asset => {
if (!asset) {
throw cast.framework.messages.ErrorReason.INVALID_REQUEST;
}
loadRequestData.media.contentUrl = asset.url;
loadRequestData.media.metadata = asset.metadata;
loadRequestData.media.tracks = asset.tracks;
return loadRequestData;
}).catch(reason => {
error.reason = reason; // cast.framework.messages.ErrorReason
return error;
});
});
context.start();
Hata işleme
Mesaj kesicide hata meydana geldiğinde Web Alıcısı uygulamanız uygun bir cast.framework.messages.ErrorType
ve cast.framework.messages.ErrorReason
döndürür.
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.LOAD, loadRequestData => {
const error = new cast.framework.messages.ErrorData(
cast.framework.messages.ErrorType.LOAD_CANCELLED);
if (!loadRequestData.media) {
error.reason = cast.framework.messages.ErrorReason.INVALID_PARAM;
return error;
}
...
return fetchAssetAndAuth(loadRequestData.media.entity,
loadRequestData.credentials)
.then(asset => {
...
return loadRequestData;
}).catch(reason => {
error.reason = reason; // cast.framework.messages.ErrorReason
return error;
});
});
Mesaj müdahalesi ve etkinlik işleyici
Mesaj müdahalesi ve etkinlik işleyici arasındaki bazı önemli farklar şunlardır:
- Etkinlik işleyici, istek verilerini değiştirmenize izin vermez.
- Etkinlik işleyiciyi kullanmak, analizi veya özel bir işlevi tetiklemek için en iyi seçenektir.
playerManager.addEventListener(cast.framework.events.category.CORE,
event => {
console.log(event);
});
- Mesaj müdahalesi bir mesajı dinlemenize, ele geçirmenize ve istek verilerini değiştirmenize olanak tanır.
- Mesaj müdahalesi, istek verileriyle ilgili özel mantığın işlenmesi için en iyi yöntemdir.
Medya yükleniyor
MediaInformation
cast.framework.messages.MessageType.LOAD
mesajına medya yüklenmesi için entity
,
contentUrl
ve contentId
dahil pek çok özellik sağlar.
entity
, hem gönderen hem de alıcı uygulamalarınız için uygulamanızda kullanmanız önerilen mülktür. Mülk, oynatma listesi veya belirli bir medya içeriği
olabilen bir derin bağlantı URL'sidir.
Oynatılabilir bir URL için tasarlanmış olan contentUrl
, kullanılabilir olduğunda kullanılabilir.
Değerin medya URL'si, gerçek bir kimlik veya özel arama için bir anahtar parametresi olup olmamasından kaynaklanan belirsizlik nedeniyle contentId
kullanımdan kaldırıldı.
Gerçek kimliği veya anahtar parametrelerini depolamak için entity
, medya URL'si için de contentUrl
kullanılması önerilir. Bunun bir örneği, LOAD
isteğinde entity
öğesinin bulunduğu ve oynatılabilir contentUrl
öğesinin alındığı aşağıdaki snippet'te gösterilmiştir:
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.LOAD, loadRequestData => {
...
if (!loadRequestData.media.entity) {
// Copy the value from contentId for legacy reasons if needed
loadRequestData.media.entity = loadRequestData.media.contentId;
}
return thirdparty.fetchAssetAndAuth(loadRequestData.media.entity,
loadRequestData.credentials)
.then(asset => {
loadRequestData.media.contentUrl = asset.url;
...
return loadRequestData;
});
});
Cihaz özellikleri
getDeviceCapabilities
yöntemi, bağlı yayın cihazı ve bununla bağlantılı video veya ses cihazında cihaz bilgileri sağlar. getDeviceCapabilities
yöntemi, Google Asistan ve Bluetooth'un yanı sıra bağlı ekran ve ses cihazları için destek bilgileri sağlar.
Bu yöntem, enum için cihaz yeteneğini elde etmek amacıyla belirtilen numaralandırmalardan birini ileterek sorgulayabileceğiniz bir nesne döndürür. Sıralamalar cast.framework.system.DeviceCapabilities
içinde tanımlanır.
Bu örnek, Web Alıcısı cihazının sırasıyla IS_HDR_SUPPORTED
ve IS_DV_SUPPORTED
tuşlarıyla HDR ve DolbyVision (DV) oyunlarını oynatıp çalıştıramayacağını kontrol eder.
const context = cast.framework.CastReceiverContext.getInstance();
context.addEventListener(cast.framework.system.EventType.READY, () => {
const deviceCapabilities = context.getDeviceCapabilities();
if (deviceCapabilities &&
deviceCapabilities[cast.framework.system.DeviceCapabilities.IS_HDR_SUPPORTED]) {
// Write your own event handling code, for example
// using the deviceCapabilities[cast.framework.system.DeviceCapabilities.IS_HDR_SUPPORTED] value
}
if (deviceCapabilities &&
deviceCapabilities[cast.framework.system.DeviceCapabilities.IS_DV_SUPPORTED]) {
// Write your own event handling code, for example
// using the deviceCapabilities[cast.framework.system.DeviceCapabilities.IS_DV_SUPPORTED] value
}
});
context.start();
Kullanıcı etkileşimini yönetme
Bir kullanıcı, gönderen uygulamaları (Web, Android ve iOS), Asistan özellikli cihazlarda sesli komutlar, akıllı ekranlarda dokunmatik kontroller ve Android TV cihazlarında uzaktan kumanda aracılığıyla Web Alıcı uygulamanızla etkileşimde bulunabilir. Cast SDK'sı, Web Alıcısı uygulamasının bu etkileşimleri işlemesi, uygulama kullanıcı arayüzünü kullanıcı işlemi durumları aracılığıyla güncellemesi ve isteğe bağlı olarak arka uç hizmetlerini güncellemek için değişiklikleri göndermesi için çeşitli API'ler sağlar.
Desteklenen medya komutları
Kullanıcı arayüzü kontrol durumları;
MediaStatus.supportedMediaCommands
iOS ve Android gönderen genişletilmiş kumandaları, alıcı ve uzaktan kumanda uygulamaları, dokunmatik cihazlarda ve Android TV cihazlarındaki alıcı uygulamaları tarafından yönetilir. Özellikte belirli bir bit tabanlı Command
etkinleştirildiğinde söz konusu işlemle ilgili düğmeler etkinleştirilir. Değer ayarlanmamışsa düğme
devre dışı bırakılır. Bu değerler Web Alıcısı'nda aşağıdaki yöntemlerle değiştirilebilir:
- Belirli bir
Commands
ayarlamak içinPlayerManager.setSupportedMediaCommands
kullanma addSupportedMediaCommands
kullanarak yeni bir komut eklemeremoveSupportedMediaCommands
kullanarak mevcut bir komutu kaldırma.
playerManager.setSupportedMediaCommands(cast.framework.messages.Command.SEEK |
cast.framework.messages.Command.PAUSE);
Alıcı, güncellenen MediaStatus
bilgilerini hazırladıktan sonra supportedMediaCommands
özelliğindeki değişiklikleri de içerecektir. Durum yayınlandığında, bağlı gönderen uygulamaları kullanıcı arayüzündeki düğmeleri uygun şekilde günceller.
Desteklenen medya komutları ve dokunmatik cihazlar hakkında daha fazla bilgi için Accessing UI controls
kılavuzuna bakın.
Kullanıcı işlemi durumlarını yönetme
Kullanıcılar kullanıcı arayüzüyle etkileşimde bulunduğunda veya sesli komutlar gönderdiğinde, oynatılan öğeyle ilgili içeriğin ve özelliklerin oynatılmasını kontrol edebilirler. Oynatmayı kontrol eden istekler SDK tarafından otomatik olarak işlenir. Oynatılan geçerli öğenin özelliklerini (ör. LIKE
komutu) değiştiren istekler, alıcı uygulamanın bunları işlemesini gerektirir. SDK bu tür istekleri işlemek için bir dizi API sağlar. Bu istekleri desteklemek için aşağıdakiler yapılmalıdır:
USER_ACTION
mesaja müdahale edin ve istenen işlemi belirleyin.- Kullanıcı arayüzünü güncellemek için
MediaInformation
UserActionState
sürümünü güncelleyin.
Aşağıdaki snippet, USER_ACTION
mesajına müdahale ederek arka uçta istenen değişikliği yapma işlemini yürütür. Ardından alıcıdaki UserActionState
adlı cihazı güncellemek için bir çağrı yapar.
playerManager.setMessageInterceptor(cast.framework.messages.MessageType.USER_ACTION,
(userActionRequestData) => {
// Obtain the media information of the current content to associate the action to.
let mediaInfo = playerManager.getMediaInformation();
// If there is no media info return an error and ignore the request.
if (!mediaInfo) {
console.error('Not playing media, user action is not supported');
return new cast.framework.messages.ErrorData(messages.ErrorType.BAD_REQUEST);
}
// Reach out to backend services to store user action modifications. See sample below.
return sendUserAction(userActionRequestData, mediaInfo)
// Upon response from the backend, update the client's UserActionState.
.then(backendResponse => updateUserActionStates(backendResponse))
// If any errors occurred in the backend return them to the cast receiver.
.catch((error) => {
console.error(error);
return error;
});
});
Aşağıdaki snippet, bir arka uç hizmetine yapılan aramayı simüle eder. İşlev, kullanıcının istediği değişiklik türünü görmek için UserActionRequestData
öğesini kontrol eder ve yalnızca işlem arka uç tarafından destekleniyorsa ağ çağrısı yapar.
function sendUserAction(userActionRequestData, mediaInfo) {
return new Promise((resolve, reject) => {
switch (userActionRequestData.userAction) {
// Handle user action changes supported by the backend.
case cast.framework.messages.UserAction.LIKE:
case cast.framework.messages.UserAction.DISLIKE:
case cast.framework.messages.UserAction.FOLLOW:
case cast.framework.messages.UserAction.UNFOLLOW:
case cast.framework.messages.UserAction.FLAG:
case cast.framework.messages.UserAction.SKIP_AD:
let backendResponse = {userActionRequestData: userActionRequestData, mediaInfo: mediaInfo};
setTimeout(() => {resolve(backendResponse)}, 1000);
break;
// Reject all other user action changes.
default:
reject(
new cast.framework.messages.ErrorData(cast.framework.messages.ErrorType.INVALID_REQUEST));
}
});
}
Aşağıdaki snippet, UserActionRequestData
etiketini alır ve UserActionState
öğesine MediaInformation
ekler. MediaInformation
öğesinin UserActionState
öğesinin güncellenmesi, istenen işlemle ilişkilendirilen düğmenin durumunu değiştirir. Bu değişiklik; akıllı ekran kontrolleri,
uzaktan kumanda uygulaması ve Android TV kullanıcı arayüzüne yansıtılır. Ayrıca iOS ve Android gönderenler için genişletilmiş kumandanın kullanıcı arayüzünü güncellemek amacıyla giden MediaStatus
mesajları aracılığıyla anons edilir.
function updateUserActionStates(backendResponse) {
// Unwrap the backend response.
let mediaInfo = backendResponse.mediaInfo;
let userActionRequestData = backendResponse.userActionRequestData;
// If the current item playing has changed, don't update the UserActionState for the current item.
if (playerManager.getMediaInformation().entity !== mediaInfo.entity) {
return;
}
// Check for existing userActionStates in the MediaInformation.
// If none, initialize a new array to populate states with.
let userActionStates = mediaInfo.userActionStates || [];
// Locate the index of the UserActionState that will be updated in the userActionStates array.
let index = userActionStates.findIndex((currUserActionState) => {
return currUserActionState.userAction == userActionRequestData.userAction;
});
if (userActionRequestData.clear) {
// Remove the user action state from the array if cleared.
if (index >= 0) {
userActionStates.splice(index, 1);
}
else {
console.warn("Could not find UserActionState to remove in MediaInformation");
}
} else {
// Add the UserActionState to the array if enabled.
userActionStates.push(
new cast.framework.messages.UserActionState(userActionRequestData.userAction));
}
// Update the UserActionState array and set the new MediaInformation
mediaInfo.userActionStates = userActionStates;
playerManager.setMediaInformation(mediaInfo, true);
return;
}
Sesli komutlar
Aşağıdaki medya komutları şu anda Asistan özellikli cihazlar için Web Alıcısı SDK'sında desteklenmektedir. Bu komutların varsayılan uygulamaları cast.framework.PlayerManager
konumunda bulunur.
Komut | Açıklama |
---|---|
Çal | Duraklatılmış durumdaki oynatmayı oynatın veya devam ettirin. |
Duraklat | Oynatılmakta olan içeriği duraklat. |
Önceki | Medya sıranızdaki önceki medya öğesine atlayın. |
Sonraki | Medya sıranızdaki sonraki medya öğesine atlayın. |
Durdur | Şu anda oynatılan medyayı durdurun. |
Hiçbirini Tekrarlama | Sıradaki son öğenin oynatılması tamamlandıktan sonra medya öğelerinin tekrarlanmasını devre dışı bırakın. |
Tekrarlama | Şu anda oynatılan medyayı süresiz olarak tekrar et. |
Tümünü Tekrarla | Sıradaki son öğe oynatıldıktan sonra sıradaki tüm öğeleri tekrarlayın. |
Tümünü Tekrarla ve Karıştır | Sıradaki son öğenin oynatılması tamamlandıktan sonra sırayı karıştırıp sıradaki tüm öğeleri tekrarlayın. |
Karışık çal | Medya sıranızdaki medya öğelerini karıştırın. |
Altyazılar AÇIK / KAPALI | Medyanız için Altyazıyı etkinleştirin / devre dışı bırakın. Etkinleştirme / Devre dışı bırakma dil bazında da kullanılabilir. |
Kesin zamanla mutlak zaman | Belirtilen mutlak zamana atlar. |
Şu zamana: göreli zaman karşılaştırması | Geçerli döneme göre belirtilen zaman aralığında ileri veya geri atlar. |
Tekrar Oynayın | Şu anda oynatılan medyayı yeniden başlatın veya hiçbir şey oynatılmıyorsa en son oynatılan medya öğesini oynatın. |
Oynatma oranını ayarlama | Çeşitli medya oynatma hızları Bu, varsayılan olarak işlenmelidir. Gelen ücret isteklerini geçersiz kılmak için SET_PLAYBACK_RATE mesaj alıcısını kullanabilirsiniz. |
Sesli desteklenen medya komutları
Asistan özellikli bir cihazda sesli komutu tetiklemek için öncelikle desteklemeyi planladığınız desteklenen medya komutlarını ayarlamanız gerekir. Daha sonra CastReceiverOptions.enforceSupportedCommands
özelliğini etkinleştirerek bu komutları zorunlu kılmanız gerekir. Cast SDK gönderenlerindeki ve dokunmatik özellikli cihazlardaki kullanıcı arayüzü, bu yapılandırmaları yansıtacak şekilde değişecektir. Bayrak etkin değilse gelen sesli komutlar yürütülür.
Örneğin, gönderen uygulamalarınızdan ve dokunmatik cihazlardan PAUSE
özelliğine izin verirseniz alıcınızı bu ayarları yansıtacak şekilde yapılandırmanız da gerekir. Yapılandırılan gelen sesli komutlar, desteklenen komutlar listesinde yoksa kaldırılır.
Aşağıdaki örnekte, CastReceiverContext
başlatılırken CastReceiverOptions
öğesini sağlarız. PAUSE
komutu için destek ekledik ve oynatıcıyı yalnızca bu komutu destekleyecek şekilde zorunlu kıldık. Sesli komut, SEEK
gibi başka bir işlem isterse artık reddedilir. Kullanıcıya komutun henüz desteklenmediği bildirilir.
const context = cast.framework.CastReceiverContext.getInstance();
context.start({
enforceSupportedCommands: true,
supportedCommands: cast.framework.messages.Command.PAUSE
});
Kısıtlamak istediğiniz her komut için ayrı bir mantık uygulayabilirsiniz. enforceSupportedCommands
işaretini kaldırın ve kısıtlamak istediğiniz her bir komut için gelen mesaja müdahale edebilirsiniz. Burada, SDK'nın sağladığı isteğe müdahale ederiz. Böylece Asistan özellikli cihazlara yayınlanan SEEK
komutları, Web Alıcısı uygulamanızda arama tetiklemez.
Uygulamanızın desteklemediği medya komutları için NOT_SUPPORTED
gibi uygun bir hata nedeni döndürün.
playerManager.setMessageInterceptor(cast.framework.messages.MessageType.SEEK,
seekData => {
// Block seeking if the SEEK supported media command is disabled
if (!(playerManager.getSupportedMediaCommands() & cast.framework.messages.Command.SEEK)) {
let e = new cast.framework.messages.ErrorData(cast.framework.messages.ErrorType
.INVALID_REQUEST);
e.reason = cast.framework.messages.ErrorReason.NOT_SUPPORTED;
return e;
}
return seekData;
});
Konuşma etkinliğinden arka plan
Yayın platformu, kullanıcı konuşmalarını dinleme veya konuşma gibi Asistan etkinlikleri nedeniyle uygulamanızın sesini arka planda tutuyorsa etkinlik başladığında Web Alıcısı uygulamasına NOT_IN_FOCUS
FocusState
mesajı gönderilir. Etkinlik sona erdiğinde IN_FOCUS
ile başka bir mesaj gönderilir.
Uygulamanıza ve oynatılan medyaya bağlı olarak, FocusState
NOT_IN_FOCUS
ise FOCUS_STATE
mesaj türüne müdahale ederek medyayı duraklatmak isteyebilirsiniz.
Örneğin, Asistan bir kullanıcı sorgusuna yanıt veriyorsa sesli kitap oynatmayı duraklatmak iyi bir kullanıcı deneyimi sağlar.
playerManager.setMessageInterceptor(cast.framework.messages.MessageType.FOCUS_STATE,
focusStateRequestData => {
// Pause content when the app is out of focus. Resume when focus is restored.
if (focusStateRequestData.state == cast.framework.messages.FocusState.NOT_IN_FOCUS) {
playerManager.pause();
} else {
playerManager.play();
}
return focusStateRequestData;
});
Sesle belirtilen altyazı dili
Kullanıcı altyazıların dilini açıkça belirtmediğinde altyazı için kullanılan dil, komutun söylendiği dille aynı olur.
Bu senaryolarda, gelen mesajın isSuggestedLanguage
parametresi, ilişkili dilin kullanıcı tarafından önerilip önerilmediğini veya açıkça talep edilip edilmediğini gösterir.
Örneğin, isSuggestedLanguage
, "Ok Google, altyazıları aç" komutu için true
komutuna ayarlı. Dil, komutun konuşulduğu dile göre tahmin ediliyor. Dil açıkça istenirse (ör. "Ok Google, İngilizce altyazıları aç") isSuggestedLanguage
, false
olarak ayarlanır.
Meta veriler ve ses yayını
Sesli komutlar varsayılan olarak Web Alıcısı tarafından işlense de içeriğinizin meta verilerinin eksiksiz ve doğru olduğundan emin olmanız gerekir. Böylece sesli komutlar Asistan tarafından doğru şekilde işlenebilir ve meta veriler Google Home uygulaması ve Google Home Hub gibi akıllı ekranlar gibi yeni arayüzlerde doğru şekilde gösterilir.
Akış aktarma
Oturum durumunu korumak, kullanıcıların sesli komutlar, Google Home uygulaması veya akıllı ekranları kullanarak mevcut ses ve video akışlarını cihazlar arasında taşıyabileceği akış aktarımının temelini oluşturur. Medya, bir cihazda (kaynak) oynamaya devam eder ve başka bir cihazda (hedef) devam eder. En son donanım yazılımına sahip tüm Cast cihazları, akış aktarımında kaynak veya hedef işlevi görebilir.
Akış aktarımı için etkinlik akışı şöyledir:
- Kaynak cihazda:
- Medya oynatmayı durdurur.
- Web Alıcısı uygulaması, mevcut medya durumunu kaydetmek için bir komut alır.
- Web Alıcısı uygulaması kapatıldı.
- Hedef cihazda:
- Web Alıcısı uygulaması yüklenir.
- Web Alıcısı uygulaması, kayıtlı medya durumunu geri yükleme komutu alır.
- Medya oynatılmaya devam ediyor.
Medya durumu öğeleri şunları içerir:
- Şarkının, videonun veya medya öğesinin belirli bir konumu ya da zaman damgası.
- Daha geniş bir sırada (ör. şarkı listesi veya sanatçı radyosu) olması.
- Kimliği doğrulanmış kullanıcı.
- Oynatma durumu (örneğin, oynatılıyor veya duraklatıldı).
Akış aktarımı etkinleştiriliyor
Web Alıcınız için akış aktarımını uygulamak üzere:
supportedMediaCommands
alanınıSTREAM_TRANSFER
komutuyla güncelleyin:playerManager.addSupportedMediaCommands( cast.framework.messages.Command.STREAM_TRANSFER, true);
- İsteğe bağlı olarak Oturum durumunu koruma bölümünde açıklandığı gibi
SESSION_STATE
veRESUME_SESSION
mesaj işleyicilerini geçersiz kılabilirsiniz. Bunları, yalnızca özel verilerin oturum anlık görüntüsü kapsamında depolanması gerekiyorsa geçersiz kılın. Aksi takdirde, oturum durumlarını korumak için varsayılan uygulama, akış aktarımını destekler.
Oturum durumunu koruma
Web Alıcısı SDK'sı, mevcut medya durumunun anlık görüntüsünü alıp durumu bir yükleme isteğine dönüştürerek ve yükleme isteğini kullanarak oturumu devam ettirerek Web Alıcısı uygulamalarının oturum durumlarını koruması için varsayılan bir uygulama sunar.
Gerekirse Web Alıcısı tarafından oluşturulan yükleme isteği, SESSION_STATE
mesaj kesicisinde geçersiz kılınabilir. Yükleme isteğine özel veriler eklemek istiyorsanız bunları loadRequestData.customData
dosyasına eklemenizi öneririz.
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.SESSION_STATE,
function (sessionState) {
// Override sessionState.loadRequestData if needed.
const newCredentials = updateCredentials_(sessionState.loadRequestData.credentials);
sessionState.loadRequestData.credentials = newCredentials;
// Add custom data if needed.
sessionState.loadRequestData.customData = {
'membership': 'PREMIUM'
};
return sessionState;
});
Özel veriler, RESUME_SESSION
mesaj alıcısındaki loadRequestData.customData
üzerinden alınabilir.
let cred_ = null;
let membership_ = null;
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.RESUME_SESSION,
function (resumeSessionRequest) {
let sessionState = resumeSessionRequest.sessionState;
// Modify sessionState.loadRequestData if needed.
cred_ = sessionState.loadRequestData.credentials;
// Retrieve custom data.
membership_ = sessionState.loadRequestData.customData.membership;
return resumeSessionRequest;
});
İçeriği önceden yükleme
Web Alıcısı, sıradaki geçerli oynatma öğesinden sonra medya öğelerinin önceden yüklenmesini destekler.
Önceden yükleme işlemi, yaklaşan öğelerin birkaç segmentini önceden indirir. Spesifikasyon, QueueItem nesnesindeki preLoadTime değerinde yapılır (sağlanmazsa varsayılan olarak 20 saniyeye ayarlanır). Süre, şu anda oynatılan öğenin sonuyla göre saniye cinsinden ifade edilir . Yalnızca pozitif değerler geçerlidir. Örneğin, değer 10 saniyeyse bu öğe, önceki öğe tamamlanmadan 10 saniye önce önceden yüklenir. Önceden yükleme süresi, geçerliÖğe'de kalan süreden yüksekse ön yükleme en kısa sürede gerçekleşir. Sıra Öğesinde çok büyük bir önceden yükleme değeri belirtilirse, mevcut öğeyi oynattığımızda sonraki öğeyi zaten yüklüyoruz. Ancak bu değer, geçerli oynatılacak öğenin bant genişliğini ve akış performansını etkileyebileceği için bu ayarı ve seçimi geliştiriciye bırakırız.
Önceden yükleme, varsayılan olarak HLS, DASH ve Smooth akış içeriği için çalışır.
Yayın cihazları yalnızca bir medya öğesini desteklediği ve MP3 gibi normal MP4 video ve ses dosyaları önceden yüklenmez ve mevcut bir içerik öğesi oynatılmaya devam ederken önceden yüklemek için kullanılamaz.
Özel mesajlar
Mesaj alışverişi, Web Alıcı uygulamaları için temel etkileşim yöntemidir.
Gönderen, gönderen platformun (Android, iOS, Web) gönderen API'lerini kullanarak bir Web Alıcısı'na mesaj yayınlar. Etkinlik işleyicilere aktarılan etkinlik nesnesi (bir mesajın gösterimidir), verilerin belirli bir etkinlik türünün özelliklerini üstlendiği bir veri öğesine (event.data
) sahiptir.
Bir Web Alıcısı uygulaması, belirtilen bir ad alanındaki mesajları dinlemeyi seçebilir. Bu şekilde, Web Alıcısı uygulamasının söz konusu ad alanı protokolünü desteklediği söylenir. Ardından, ilgili protokolü kullanmak için bu ad alanı üzerinden iletişim kurmak isteyen tüm bağlı gönderenler sorumludur.
Tüm ad alanları bir dizeyle tanımlanır ve "urn:x-cast:
" ile başlamalı, ardından herhangi bir dize gelmelidir. Örneğin, "urn:x-cast:com.example.cast.mynamespace
".
Aşağıda, Web Alıcısı'nın bağlı gönderenlerden gelen özel mesajları dinlemesi için bir kod snippet'i verilmiştir:
const context = cast.framework.CastReceiverContext.getInstance();
const CUSTOM_CHANNEL = 'urn:x-cast:com.example.cast.mynamespace';
context.addCustomMessageListener(CUSTOM_CHANNEL, function(customEvent) {
// handle customEvent.
});
context.start();
Benzer şekilde, Web Alıcısı uygulamaları, bağlı gönderenlere iletiler göndererek Web Alıcısı'nın durumu hakkında gönderenlere bilgi verebilir. Bir Web Alıcı uygulaması, CastReceiverContext
cihazında sendCustomMessage(namespace, senderId, message)
kullanarak mesaj gönderebilir.
Bir Web Alıcısı, alınan bir mesaja yanıt olarak veya uygulama durumu değişikliği nedeniyle tek bir gönderene mesaj gönderebilir. Noktalı mesajlaşmanın (64 KB ile sınırlı) ötesinde, bir Web Alıcısı tüm bağlı gönderenlere de mesaj yayınlayabilir.
Ses cihazları için yayınla
Yalnızca ses oynatma ile ilgili destek almak isterseniz Ses cihazları için Google Cast kılavuzuna bakın.
Android TV
Bu bölümde, Google Web Alıcısının girişlerinizi nasıl oynattığı ve Android TV uyumluluğu ile ilgili bilgiler verilmektedir.
Uygulamanızı uzaktan kumandayla entegre etme
Android TV cihazında çalışan Google Web Alıcısı, Medya Oynatma Mesajları konusunda açıklandığı gibi cihazın kontrol girişlerindeki (yani elde tutulan uzaktan kumanda) girişi urn:x-cast:com.google.cast.media
ad alanı için tanımlanan medya oynatma mesajları olarak çevirir. Uygulamanız, Android TV'nin kontrol girişlerinden temel oynatma kontrolüne izin vermek için uygulama medyası oynatma özelliğini kontrol etmek üzere bu mesajları desteklemelidir.
Android TV uyumluluğu kuralları
Uygulamanızın Android TV ile uyumlu olmasını sağlamak için göz önünde bulundurmanız gereken bazı öneriler ve sık karşılaşılan hatalar şunlardır:
- User-agent dizesinin hem "Android" hem de "CrKey" içerdiğini unutmayın; bazı siteler, "Android" etiketini tespit ettikleri için yalnızca mobil cihazlara yönelik bir siteye yönlendirme yapabilir. Kullanıcı aracısı dizesinde "Android"in her zaman bir mobil kullanıcı gösterdiğini belirtmeyin.
- Android'in medya yığını, verileri getirmek için şeffaf GZIP kullanabilir. Medya verilerinizin
Accept-Encoding: gzip
özelliğine yanıt verebildiğinden emin olun. - Android TV HTML5 medya etkinlikleri, Chromecast'ten farklı zamanlamalarda tetiklenebilir. Bu durum, Chromecast'te gizlenen sorunları ortaya çıkarabilir.
- Medyayı güncellerken
timeupdate
,pause
vewaiting
gibi<audio>/<video>
öğeleri tarafından tetiklenen medya ile ilgili etkinlikleri kullanın.progress
,suspend
vestalled
gibi ağ iletişimi ile ilgili etkinlikleri platforma bağımlı oldukları için kullanmaktan kaçının. Alıcınızdaki medya etkinliklerini işleme hakkında daha fazla bilgi için Medya etkinlikleri bölümüne bakın. - Alıcı sitenizin HTTPS sertifikalarını yapılandırırken ara CA sertifikaları eklediğinizden emin olun. Doğrulama için Qualsys SSL test sayfasına göz atın: Sitenizin güvenilir sertifika yolu "ek indirme" etiketli bir CA sertifikası içeriyorsa Android tabanlı platformlarda yüklenemeyebilir.
- Chromecast alıcı sayfayı 720p grafik düzleminde görüntülerken Android TV dahil diğer Yayın platformlarında sayfayı 1080p'ye kadar görüntüleyebilir. Alıcı sayfanızın farklı çözünürlüklerde zarif bir şekilde ölçeklendiğinden emin olun.