Bu sayfa, kod snippet'lerini ve bu veriler için kullanılabilecek özelliklerin açıklamalarını içerir özel bir web alıcı uygulamasıdır.
- Yerleşik oynatıcı kullanıcı arayüzünü temsil eden bir
cast-media-player
öğesi Web Buyer ile sağlanır. - Çeşitli stil özelliklerini ayarlamak için
cast-media-player
öğesi için özel CSS benzeri stilbackground-image
,splash-image
ve gibi kullanıcı arayüzü öğelerifont-family
. - Web Alıcı çerçevesini yüklemek için bir komut dosyası öğesi.
- Mesajlara müdahale etmek ve etkinlikleri işlemek için JavaScript kodu.
- Otomatik oynatma için sıra.
- Oynatmayı yapılandırma seçenekleri.
- Web Alıcı bağlamını ayarlama seçenekleri.
- Web Alıcı uygulaması tarafından desteklenen 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
Uygulamayı yapılandırma
İlgili içeriği oluşturmak için kullanılan
CastReceiverContext
en dıştaki sınıftır ve geliştiricilere sunulan
Web Receiver SDK'nın ilk kullanıma hazırlama işlemini gerçekleştirir. SDK
uygulama geliştiricilerinin SDK'yı
CastReceiverOptions
.
Bu yapılandırmalar her uygulama lansmanı için bir kez değerlendirilir ve
start
.
Aşağıdaki örnekte,
gönderen bağlantısı hâlâ etkin bir şekilde bağlı. Web Buyer,
gönderenle iletişim kurabilmiş olup olmadığınızı
maxInactivity
bir SENDER_DISCONNECTED
etkinliği gönderilir. Aşağıdaki yapılandırma
bu zaman aşımını geçersiz kılar. Bu, hataları ayıklarken
Web Alıcısı uygulamasının Chrome Remote Debugger oturumunu kapatmasını önler.
IDLE
durumundaki sıfır bağlı gönderendir.
const context = cast.framework.CastReceiverContext.getInstance();
const options = new cast.framework.CastReceiverOptions();
options.maxInactivity = 3600; // Development only
context.start(options);
Oynatıcıyı yapılandırma
Web Receiver SDK, içerik yüklerken oynatmayı yapılandırmak için bir yöntem sunar.
DRM gibi değişkenler
bilgi,
yeniden denemek ve istek işleyicileri için
cast.framework.PlaybackConfig
.
Bu bilgiler Google tarafından
PlayerManager
ve oyuncuların oluşturulduğu anda değerlendirilir. Oynatıcılar oluşturuldu
Web Receiver SDK'ya yeni bir yükleme geçirildiğinde.
PlaybackConfig
sonra oyuncu oluşturulduktan sonraki sonraki adımlarda değerlendirilir.
emin olun. SDK,
PlaybackConfig
CastReceiverOptions.playbackConfig
ilk kullanıma hazırlarken varsayılan yapılandırma seçeneklerini geçersiz kılmak içinCastReceiverContext
.PlayerManager.getPlaybackConfig()
mevcut yapılandırmayı kullanın.PlayerManager.setPlaybackConfig()
geçersiz kılın. Bu ayar, yükleme işlemi sırasında veya tekrar geçersiz kılınana kadar.PlayerManager.setMediaPlaybackInfoHandler()
(yalnızca yüklenmekte olan medya öğesine yönelik ek yapılandırmalar uygulayın) üst üste bindirebilir. İşleyici, oyuncudan hemen önce çağrılır çok önemli. Burada yapılan değişiklikler kalıcı değildir ve sorgulara dahil edilmezgetPlaybackConfig()
numaralı telefona. Bir sonraki medya öğesi yüklendiğinde bu işleyici tekrar çağrılır.
Aşağıdaki örnekte,PlaybackConfig
CastReceiverContext
. Yapılandırma, şunun için giden istekleri geçersiz kılar:
ve manifestoları
almalısınız. İşleyici, CORS Access-Control isteklerini
bu işlem, çerezler veya yetkilendirme üstbilgileri gibi kimlik bilgileri kullanılarak yapılmalıdır.
const playbackConfig = new cast.framework.PlaybackConfig();
playbackConfig.manifestRequestHandler = requestInfo => {
requestInfo.withCredentials = true;
};
context.start({playbackConfig: playbackConfig});
Aşağıdaki örnekte, alıcı kullanılarak PlaybackConfig
öğesinin nasıl geçersiz kılınacağı gösterilmektedir
ve setter, PlayerManager
içinde sağlanır. Bu ayar, oynatıcıyı
1 segment yüklendikten sonra içerik oynatmaya devam et.
const playerManager =
cast.framework.CastReceiverContext.getInstance().getPlayerManager();
const playbackConfig = (Object.assign(
new cast.framework.PlaybackConfig(), playerManager.getPlaybackConfig()));
playbackConfig.autoResumeNumberOfSegments = 1;
playerManager.setPlaybackConfig(playbackConfig);
Aşağıdaki örnekte, belirli bir yükleme için PlaybackConfig
değerinin nasıl geçersiz kılınacağı gösterilmektedir
isteği gönderebilirsiniz. İşleyici bir uygulamayı çağırır
licenseUrl
verilerini elde etmek için getLicenseUrlForMedia
yöntemini uygula
geçerli öğenin contentId
.
playerManager.setMediaPlaybackInfoHandler((loadRequestData, playbackConfig) => {
const mediaInformation = loadRequestData.media;
playbackConfig.licenseUrl = getLicenseUrlForMedia(mediaInformation.contentId);
return playbackConfig;
});
Etkinlik işleyici
Web Buyer SDK'sı, Web Alıcı uygulamanızın oynatıcı etkinliklerini işlemesini sağlar. İlgili içeriği oluşturmak için kullanılan
etkinlik işleyici
cast.framework.events.EventType
parametresini (veya bu parametrelerden oluşan bir diziyi)
işleyiciyi tetikleyecektir. Önceden yapılandırılmış
Hata ayıklama için faydalı cast.framework.events.EventType
bilgilerini şurada bulabilirsiniz:
cast.framework.events.category
Etkinlik parametresi, etkinlik hakkında ek bilgiler sağlar.
Örneğin, bir anahtar kelimenin ne zaman
mediaStatus
yayınlanıyorsa bu değişikliği işlemek için aşağıdaki mantığı kullanabilirsiniz:
etkinlik:
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 Buyer SDK'sı, Web Receiver uygulamanızın mesajlara müdahale edip
bu mesajlarda özel kod yürütür. Mesaj müdahalesi,
cast.framework.messages.MessageType
parametresini kullanabilirsiniz.
Müdahaleci, değiştirilen isteği veya
yeni bir istek oluşturun. null
dönerseniz
kullanabilirsiniz. Daha fazla bilgi için Medya yükleme bölümüne bakın.
Örneğin, yükleme isteği verilerini değiştirmek istiyorsanız kesmek ve değiştirmek için aşağıdaki mantığı kullanır:
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 müdahalesinde hata oluştuğunda Web Alıcı uygulamanız şunu döndürecektir:
uygun bir
cast.framework.messages.ErrorType
ve
cast.framework.messages.ErrorReason
.
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 karşılaştırması
Mesaj müdahalesi ile etkinlik işleyici arasındaki bazı temel farklar şunlardır: şöyle olur:
- Etkinlik işleyici, istek verilerini değiştirmenize izin vermez.
- Etkinlik işleyici, analizleri 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, müdahale etmenize ve istek verilerinin kendisini değiştirebilir.
- İleti müdahalesi en çok verileri talep edebilirsiniz.
Medya yükleniyor
MediaInformation
çok sayıda özellik sunar.
entity
dahil cast.framework.messages.MessageType.LOAD
mesaj,
contentUrl
ve contentId
.
entity
hem gönderen hem de gönderen için uygulamanızda kullanmanız önerilen özelliktir, alıcı uygulamalarıdır. Mülk, oynatma listesi olabilen bir derin bağlantı URL'sidir olabilir. Uygulamanız bu URL'yi ayrıştırmalı ve diğer iki alandan en az birini doldurun.contentUrl
oynatıcının içeriği yüklemek için kullanacağı oynatılabilir URL'ye karşılık gelir. Örneğin, bu URL bir DASH manifestine işaret edebilir.contentId
bir oynanabilir içerik URL'si (contentUrl
'nin URL'sine benzer) olabilir. özelliği) ya da yüklenen içeriğin veya oynatma listesinin benzersiz tanımlayıcısını içermelidir. Bu özelliği tanımlayıcı olarak kullanıyorsanız uygulamanız bircontentUrl
içindeki oynatılabilir URL'ler.
Öneri, gerçek kimlik veya anahtar parametreleri depolamak için entity
kullanılması ve
medyanın URL'si için contentUrl
kullanın. Şunun bir örneği gösterilmektedir:
LOAD
isteğinde entity
öğesinin ve
oynanabilir contentUrl
alındı:
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
İlgili içeriği oluşturmak için kullanılan
getDeviceCapabilities
yöntemi, bağlı yayın cihazı ve videoya ilişkin cihaz bilgilerini sağlar veya
ses sistemi var. getDeviceCapabilities
yöntemi destek sağlar
Google Asistan, Bluetooth, bağlı ekran ve ses bilgileri
cihazlar.
Bu yöntem,
belirtilen numaralandırmaları kullanın. Sıralamalar
şurada tanımlandığı:
cast.framework.system.DeviceCapabilities
.
Bu örnekte, Web Alıcı cihazının HDR ve video oynatma için uygun olup olmadığı
IS_HDR_SUPPORTED
ve IS_DV_SUPPORTED
tuşlarıyla DolbyVision (DV)
tıklayın.
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 üzerinden Web Receiver uygulamanızla etkileşim kurabilir. uygulamalar (Web, Android ve iOS), Asistan özellikli sesli komutlar cihazlar, akıllı ekranlardaki dokunma kontrolleri ve Android TV'deki uzaktan kumandalar cihazlar. Cast SDK, Web Alıcısı uygulamasının API'lerin son durumunu kontrol etmek için, uygulama arayüzünü kullanıcı işlemi durumlarını gösterir ve isteğe bağlı olarak değişiklikleri arka uç hizmetlerini güncellemek için gönderin.
Desteklenen medya komutları
Kullanıcı arayüzü denetimlerinin durumu
MediaStatus.supportedMediaCommands
iOS ve Android'deki gönderen genişletilmiş kumandaları, alıcı ve uzaktan kumanda için
Dokunmatik cihazlarda çalışan uygulamalar ve Android TV cihazlarındaki alıcı uygulamaları. Bir
mülkte belirli bit tabanlı Command
etkinleştirildiğinden,
etkinleştirildiğinden emin olun. Değer ayarlanmazsa düğme
devre dışı bırakıldı. Bu değerler Web Alıcısı'nda şu şekilde değiştirilebilir:
- Kullanım
PlayerManager.setSupportedMediaCommands
özel ayarıCommands
- Yeni bir komut eklemek için
addSupportedMediaCommands
- Mevcut bir komutu
removeSupportedMediaCommands
.
playerManager.setSupportedMediaCommands(cast.framework.messages.Command.SEEK |
cast.framework.messages.Command.PAUSE);
Alıcı, güncellenen MediaStatus
dosyasını hazırladığında bildirim,
supportedMediaCommands
özelliğindeki değişiklikler. Durum
bağlı gönderen uygulamaları, kullanıcı arayüzündeki düğmeleri günceller
buna göre hazırlar.
Desteklenen medya komutları ve dokunmatik cihazlar hakkında daha fazla bilgi için bkz.
Accessing UI controls
rehberini inceleyin.
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ı. İstek sayısı
oynatmayı kontrol eden tüm işlevlerin SDK tarafından otomatik olarak işlenmesi gerekir. Şunları içeren istekler:
oynatılan geçerli öğenin özelliklerini (ör. LIKE
komutu) değiştirme
alıcı uygulamanın bunları işlemesini gerektirir. SDK, Google Analytics 4'te
Bu tür istekleri işleyecek API'ler. Bu taleplerin desteklenmesi için aşağıda yer alan
yapılması gerekenler:
MediaInformation
cihazını ayarlayınuserActionStates
kullanıcı tercihleri ile uyumlu hale getirebilirsiniz.USER_ACTION
mesajlarına müdahale edin ve istenen işlemi belirleyin.- Kullanıcı arayüzünü güncellemek için
MediaInformation
UserActionState
bileşenini güncelleyin.
Aşağıdaki snippet, LOAD
isteğini engeller ve
LoadRequestData
adlı kullanıcının MediaInformation
cihazı. Bu durumda, kullanıcı
yüklenmelidir.
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.LOAD, (loadRequestData) => {
const userActionLike = new cast.framework.messages.UserActionState(
cast.framework.messages.UserAction.LIKE);
loadRequestData.media.userActionStates = [userActionLike];
return loadRequestData;
});
Aşağıdaki snippet, USER_ACTION
mesajını engeller ve çağrıyı işler
arka uçta olması gerekir. Ardından,
Alıcıda UserActionState
.
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 çağrıyı simüle eder. İşlev,
Kullanıcının istediği değişiklik türünü görmek için UserActionRequestData
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
öğesini alır ve
UserActionState
öğesini MediaInformation
öğesinden kaldırır.
MediaInformation
ayarının UserActionState
değeri, düğmenin
istenen işlemle ilişkilendirilmiş. Bu değişiklik,
ekran denetimleri kullanıcı arayüzü, uzaktan kumanda uygulaması ve Android TV kullanıcı arayüzü. Aynı zamanda
Giden MediaStatus
mesajları aracılığıyla yayınlandı.
iOS ve Android gönderenler için genişletilmiş denetleyici.
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 Web Receiver SDK'sında desteklenmektedir:
Asistan özellikli cihazlar. Bu komutların varsayılan uygulamaları şunlardır:
bulundu
cast.framework.PlayerManager
.
Komut | Açıklama |
---|---|
Play | Oynatın veya duraklatılmış durumdan oynatmaya devam edin. |
Duraklat | Oynatılan içeriği duraklatın. |
Önceki | Medya sıranızdaki önceki medya öğesine atlayın. |
İleri | Medya sıranızdaki sonraki medya öğesine atlayın. |
Durdur | Oynatılan medyayı durdurun. |
Tekrarlama Yok | Sıradaki son öğenin oynatılması tamamlandığında, sıradaki medya öğelerinin tekrarlanmasını devre dışı bırakın. |
Single'ı tekrarla | Oynatılan medyayı süresiz olarak tekrarla. |
Tümünü Tekrarla | Sıradaki son öğe oynatıldığında, sıradaki tüm öğeleri yineler. |
Tümünü Tekrarla ve Karıştır | Sıradaki son öğenin oynatılması tamamlandığında, sırayı karıştırın ve sıradaki tüm öğeleri tekrarlayın. |
Karıştır | Medya sıranızdaki medya öğelerini karıştırın. |
Altyazıları AÇMA / KAPATMA | Medyanız için Altyazıyı etkinleştirin / devre dışı bırakın. Etkinleştirme / Devre dışı bırakma özelliği dillere göre de kullanılabilir. |
Mutlak zamana ara | Belirtilen mutlak zamana atlar. |
Geçerli zamana göre zamana git | Geçerli oynatma süresine göre belirtilen dönemde ileri veya geri atlar. |
Tekrar Oyna | Oynatılan medyayı yeniden başlatın veya şu anda hiçbir şey oynatılmıyorsa son oynatılan medya öğesini oynatın. |
Oynatma hızını ayarlama | Farklı medya oynatma hızları. Bu, varsayılan olarak işlenmelidir. Gelen hız isteklerini geçersiz kılmak için SET_PLAYBACK_RATE mesaj önleyicisini kullanabilirsiniz. |
Sesli olarak desteklenen medya komutları
Sesli komutun Asistan'da medya komutunu tetiklemesini önlemek için:
etkin bir cihaz kullanıyorsanız önce
desteklenen medya komutları
temel bir açık kaynaktır. Ardından
"the"
CastReceiverOptions.enforceSupportedCommands
Cast SDK'sı gönderenlerin ve dokunma özellikli cihazların kullanıcı arayüzü şu şekilde değiştirilecek:
yansıttığını gösterir. İşaret etkinleştirilmezse gelen ses
komut yürütülür.
Örneğin, gönderen uygulamalarınızda PAUSE
ürününe izin verirseniz ve
özellikli cihazları kullanıyorsanız, alıcınızı bu cihazları yansıtacak şekilde
Ayarlar'da devre dışı bırakabilirsiniz. Yapılandırıldığında, gelen sesli komutlar atlanacaksa
bölümüne bakabilirsiniz.
Aşağıdaki örnekte, başlangıç aşamasında CastReceiverOptions
CastReceiverContext
. PAUSE
komutu için destek ekledik ve
oynatıcının yalnızca bu komutu desteklemesini zorunlu kılar. Artık bir sesli komut
SEEK
gibi başka bir işlem isteğinde bulunursa reddedilecektir. Kullanıcı,
komutun henüz desteklenmediğini bildirir.
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ı mantık uygulayabilirsiniz. Çıkar
enforceSupportedCommands
işareti ve istediğiniz her komut için
gelen iletiye müdahale edebilirsiniz. Burada, isteği ön plana çıkarırız.
Asistan özellikli cihazlara SEEK
komutlarının verileceği şekilde SDK tarafından sağlanır
Web Alıcısı uygulamanızda bir aramayı tetiklemez.
Uygulamanızın desteklemediği medya komutları için uygun bir
hata nedeni, örneğin
NOT_SUPPORTED
.
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;
});
Ses etkinliğinden arka plan alma
Cast platformu, Asistan nedeniyle uygulamanızın sesini arka plana atıyorsa
kullanıcının konuşmasını dinleme veya "konuşma" gibi
FocusState
NOT_IN_FOCUS
mesajı,
etkinliği başlar. Etkinlik sona erdiğinde IN_FOCUS
ile birlikte başka bir mesaj gönderilir.
Uygulamanıza ve oynatılan medyaya bağlı olarak
FocusState
NOT_IN_FOCUS
olduğunda mesaja müdahale ederek medyayı duraklat
FOCUS_STATE
yazın.
Örneğin, Asistan, kullanıcı sorgusuna yanıt veriyor.
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;
});
Ses tarafından belirlenen altyazı dili
Kullanıcı altyazıların dilini açıkça belirtmediğinde
Altyazılar için kullanılan dil, komutun konuşulduğu dille aynıdır.
Bu senaryolarda
isSuggestedLanguage
parametresinden, gelen mesajın
tarafından önerilen veya açıkça talep edilen içerikler.
Örneğin isSuggestedLanguage
, "Ok Google,true
altyazıları aç", çünkü dili, kullanılan dili
bunu söylemiştim. Dil açıkça istenirse (örneğin, "Tamam
Google, İngilizce altyazıları aç," isSuggestedLanguage
, false
olarak ayarlandı.
Meta veri ve ses yayınlama
Sesli komutlar varsayılan olarak Web Alıcısı tarafından işlense de, İçeriğinizin meta verilerinin eksiksiz ve doğru olduğundan emin olun. Böylece proje daha sesli komutların Asistan tarafından düzgün şekilde işlendiğinden ve meta verilerin Google Home uygulaması ve Google Analytics gibi yeni arayüz türlerinde düzgün bir şekilde Google Home Hub gibi akıllı ekranlar.
Akış aktarma
Akış aktarımının temeli oturum durumunu korumaktır. Bu yöntemde kullanıcılar sesli komutları, Google Home'u kullanarak mevcut ses ve video akışlarını cihazlar arasında taşıyabilir uygulama veya akıllı ekranlar. Medya bir cihazda (kaynak) duruyor ve başka bir cihazda (kaynaktaki) devam ediyor hedef). En son donanım yazılımına sahip Cast cihazları bir akış aktarımı.
Akış aktarımı için etkinlik akışı:
- Kaynak cihazda:
- Medyanın oynatılması durduruluyor.
- Web Alıcı uygulaması, geçerli medyayı kaydetmek için bir komut alır. durumu.
- Web Alıcı uygulaması kapatıldı.
- Hedef cihazda:
- Web Alıcı uygulaması yüklendi.
- Web Alıcı uygulaması, kaydedilen medya içeriğini geri yüklemek durumu.
- Medya oynatılmaya devam eder.
Medya durumu öğeleri şunlardır:
- Şarkının, videonun veya medya öğesinin belirli konumu ya da zaman damgası.
- Video daha geniş bir sıraya eklenir (ör. oynatma listesi veya sanatçı radyosu).
- Kimliği doğrulanan kullanıcı.
- Oynatma durumu (örneğin, oynatma veya duraklatıldı).
Akış aktarımı etkinleştiriliyor
Web Alıcınız için akış aktarımını uygulamak üzere:
- Güncelleme
supportedMediaCommands
STREAM_TRANSFER
komutuyla aşağıdaki işlemleri yapabilirsiniz:playerManager.addSupportedMediaCommands( cast.framework.messages.Command.STREAM_TRANSFER, true);
- İsteğe bağlı olarak
SESSION_STATE
veRESUME_SESSION
mesajını geçersiz kılın Oturumu koruma bölümünde açıklandığı gibi) durumu hakkında daha fazla bilgi edinin. Yalnızca özel veri ihtiyacı olduğunda bunları geçersiz kıl oturum anlık görüntüsünün bir parçası olarak depolanmaya devam eder. Aksi halde, varsayılan uygulama, akış aktarımını destekleyecektir.
Oturum durumu korunuyor
Web Receiver SDK, Web Alıcı uygulamaları için varsayılan uygulama olan oturum durumlarını korumak için mevcut medya durumunun anlık görüntüsünü alıp durumu bir yükleme isteğine dönüştürme ve oturumun yükleme isteğiyle devam ettirilmesi.
Web Alıcısı tarafından oluşturulan yükleme isteği,
Gerekirse SESSION_STATE
mesaj önleyicisi. Özel veriler eklemek istiyorsanız
bunları, tek bir anahtar kelimeden ya da
loadRequestData.customData
.
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 şuradan alınabilir:
loadRequestData.customData
içindeki RESUME_SESSION
ileti müdahalesinde
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;
});
İçerik önceden yükleme
Web Alıcısı, geçerli oynatmadan sonra medya öğelerinin önceden yüklenmesini destekler öğe var.
Önceden yükleme işlemi, içe aktarılan öğeler. Spesifikasyon, preloadTime değeri QueueItem nesnesi (sağlanmazsa varsayılan olarak 20 saniyedir). Zaman, saniye cinsinden ifade edilir. sonuna kadar oynatıldığından emin olun . Yalnızca pozitif değerler geçerlidir. Örneğin, değer 10 saniyeyse bu öğe önceden 10 saniye saniye sonra tekrar kontrol edin. Önceden yükleme süresi daha uzunsa MevcutÖğede kalan zamandan daha uzun süre varsa önceden yükleme, yapmasını sağlar. Böylece, OrderItem öğesinde çok yüksek bir önceden yükleme değeri belirtiliyorsa ne zaman oynadığımızın etkisini bir sonraki öğenin önceden yüklü olduğudur. Ancak biz, Bant genişliği ve akış performansını etkileyebileceği için bu değer geliştiriciye gönderilir. oynatmaya devam eder.
Önceden yükleme; HLS, DASH ve Smooth akış içeriği için varsayılan olarak çalışır.
Normal MP4 video ve MP3 gibi ses dosyaları Cast biçiminde önceden yüklenmez cihazlar yalnızca bir medya öğesini destekler ve mevcut içerik öğesi oynatılmaya devam ediyor.
Özel mesajlar
Mesaj değişimi, Web Alıcısı uygulamaları için temel etkileşim yöntemidir.
Bir gönderen,
kullandığı platform (Android, iOS, Web). Etkinlik nesnesi (
bir mesajın manifestiyse) etkinlik işleyicilere aktarılan bir
(event.data
)
belirli bir etkinlik türü.
Bir Web Alıcı uygulaması belirli bir tıklayın. Dolayısıyla, Web Alıcısı uygulaması, destekler. Bu durumda dilediğiniz bağlı göndericinin iletişim kurmak için kullanabilirsiniz.
Tüm ad alanları bir dizeyle tanımlanır ve "urn:x-cast:
" ile başlamalıdır
ve ardından herhangi bir dize gelir. Örneğin,
"urn:x-cast:com.example.cast.mynamespace
".
Web Alıcısı'nın bu kullanıcıdan gelen özel mesajları dinlemesi için kullanabileceğiniz bir kod snippet'i bağlı gönderenler:
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ı uygulamaları da gönderenleri durum hakkında bilgilendirebilir
ileti göndererek Web Alıcısı'na geri bildirim gönderir. Web Alıcısı
uygulama şununla mesaj gönderebilir:
sendCustomMessage(namespace, senderId, message)
açık
CastReceiverContext
.
Web Alıcısı, tek bir gönderene şuna yanıt olarak ileti gönderebilir:
gelen bir mesaj olabilir veya uygulamanın durumundaki bir değişiklik olabilir. Noktadan noktaya ötesinde
64 KB ile sınırlı olmak üzere, bir Web Alıcısı da mesajları
tüm bağlı gönderenlerden paylaşın.
Ses sistemleri için yayınlama
Sesle ilgili destek almak üzere Ses cihazları için Google Cast kılavuzuna bakın yalnızca oynatma.
Android TV
Bu bölümde Google Web Alıcısı'nın girişlerinizi kayıttan oynatma için nasıl kullandığı, Android TV uyumluluğu da var.
Uygulamanızı uzaktan kumandayla entegre etme
Android TV cihazında çalışan Google Web Alıcısı,
medya oynatma olarak cihazın kontrol girişleri (ör. elde tutulan uzaktan kumanda)
urn:x-cast:com.google.cast.media
ad alanı için şu şekilde tanımlanmış mesajlar:
Medya Oynatma Mesajları bölümünde açıklanmıştır. Sizin
uygulamanın, uygulama medyasını kontrol edebilmesi için bu mesajları desteklemesi gerekir
temel oynatma kontrolüne izin vermek için video oynatımının
giriş değerleridir.
Android TV uyumluluğu yönergeleri
Aşağıda, uygulamanız Android TV ile uyumluysa:
- Kullanıcı aracısı dizesinin hem "Android" hem de ve "CrKey"; Bazı siteler, ilk olarak mobil cihazlara özel bir siteye "Android" etiket. Önce "Android" olduğunu varsaymayın emin olmak için mobil kullanıcıyı ifade eder.
- Android'in medya yığını, veri getirmek için şeffaf GZIP kullanabilir. Şunlardan emin olun:
medya verileriniz,
Accept-Encoding: gzip
komutuna yanıt verebilir. - Android TV HTML5 medya etkinlikleri, Bu işlem Chromecast'te gizlenmiş olan sorunları ortaya çıkarabilir.
- Medyayı güncellerken
<audio>/<video>
tarafından tetiklenen medyayla ilgili etkinlikleri kullanın öğeler (timeupdate
,pause
vewaiting
gibi). Ağ iletişimini kullanmaktan kaçınınprogress
,suspend
vestalled
gibi alakalı etkinlikler değişiklik gösterir. Medya etkinliklerini inceleyin bakın. - Alıcı sitenizin HTTPS sertifikalarını yapılandırırken ara CA sertifikaları. Bkz. Qualsys SSL test page'i doğrulayın: sitenizin güvenilir sertifika yolu bir sertifika yetkilisi içeriyorsa "ekstra indirme" etiketli sertifika, Android tabanlı cihazlarda yüklenmeyebilir platformlar.
- Chromecast, alıcı sayfasını 720p grafik düzleminde görüntülerken Android TV gibi yayınlama platformları sayfayı 1080p'ye kadar görüntüleyebilir. Emin olun alıcı sayfanız farklı çözünürlüklerde sorunsuz bir şekilde ölçeklenir.