Bu geliştirici kılavuzunda, Cast SDK'sını kullanarak web gönderen uygulamanıza Google Cast desteğinin nasıl ekleneceği açıklanmaktadır.
Terminoloji
Mobil cihaz veya tarayıcı, oynatmayı kontrol eden gönderen, Google Cast cihazı ise oynatılmak üzere içeriği ekranda gösteren alıcı'dır.
Web Gönderen SDK'sı iki bölümden oluşur: Framework API (cast.framework) ve Base API (chrome.cast). Genel olarak, daha basit ve üst düzey Framework API'de çağrılar yaparsınız. Bu çağrılar daha sonra alt düzey Base API tarafından işlenir.
Gönderen çerçevesi, alt düzey işlevler için sarmalayıcı sağlayan Framework API'yi, modülü ve ilişkili kaynakları ifade eder. Gönderen uygulaması veya Google Cast Chrome uygulaması, gönderen cihazdaki bir Chrome tarayıcısında çalışan bir web (HTML/JavaScript) uygulamasını ifade eder. Web alıcısı uygulaması, Chromecast veya Google Cast cihazında çalışan bir HTML/JavaScript uygulamasıdır.
Gönderen çerçevesi, gönderen uygulamasını etkinlikler hakkında bilgilendirmek ve Cast uygulaması yaşam döngüsünün çeşitli durumları arasında geçiş yapmak için eşzamansız bir geri çağırma tasarımı kullanır.
Kitaplığı yükleme
Uygulamanızın Google Cast özelliklerini uygulayabilmesi için aşağıda gösterildiği gibi Google Cast Web Gönderici SDK'sının konumunu bilmesi gerekir. Web Sender Framework API'yi de yüklemek için loadCastFramework URL sorgu parametresini ekleyin. Uygulamanızın tüm sayfaları kitaplığı aşağıdaki şekilde referanslamalıdır:
<script src="https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1"></script>
Çerçeve
Web Gönderen SDK'sı, cast.framework.* sınıf adını kullanır. Ad alanı aşağıdakileri temsil eder:
- API'de işlemleri çağıran yöntemler veya işlevler
- API'deki dinleyici işlevleri için etkinlik işleyicileri
Çerçeve şu ana bileşenlerden oluşur:
CastContext
, mevcut Cast durumu hakkında bilgi sağlayan ve Cast durumu ile Cast oturumu durumu değişiklikleri için etkinlikleri tetikleyen tekil bir nesnedir.CastSession
nesnesi oturumu yönetir. Durum bilgilerini sağlar ve cihaz ses düzeyinde, sessize alma durumunda ve uygulama meta verilerinde yapılan değişiklikler gibi etkinlikleri tetikler.- HTML düğmesini genişleten basit bir HTML özel öğesi olan Yayın düğmesi öğesi. Sağlanan Cast düğmesi yeterli değilse Cast düğmesi uygulamak için Cast durumunu kullanabilirsiniz.
RemotePlayerController
, uzak oynatıcının uygulanmasını basitleştirmek için veri bağlamayı sağlar.
Alan adının tam açıklaması için Google Cast Web Gönderici API Referansı'nı inceleyin.
Yayınla düğmesi
Uygulamanızdaki Yayın düğmesi bileşeni tamamen çerçeve tarafından yönetilir. Buna görünürlük yönetimi ve tıklama etkinliği işleme de dahildir.
<google-cast-launcher></google-cast-launcher>
Alternatif olarak düğmeyi programatik olarak da oluşturabilirsiniz:
document.createElement("google-cast-launcher");
Gerekirse öğeye boyut veya konumlandırma gibi ek stiller uygulayabilirsiniz. Bağlı Web Alıcı durumunun rengini seçmek için --connected-color
özelliğini, bağlantısı kesilmiş durumun rengini seçmek için ise --disconnected-color
özelliğini kullanın.
Başlatma
Uygulama, çerçeve API'sini yükledikten sonra işleyiciyi window.__onGCastApiAvailable
çağırır. Uygulamanın, gönderen kitaplığını yüklemeden önce bu işleyiciyi window
üzerinde ayarladığından emin olmanız gerekir.
Bu işleyicide, CastContext
sınıfının setOptions(options)
yöntemini çağırarak Cast etkileşimini başlatırsınız.
Örneğin:
<script>
window['__onGCastApiAvailable'] = function(isAvailable) {
if (isAvailable) {
initializeCastApi();
}
};
</script>
Ardından API'yi aşağıdaki gibi başlatırsınız:
initializeCastApi = function() {
cast.framework.CastContext.getInstance().setOptions({
receiverApplicationId: applicationId,
autoJoinPolicy: chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED
});
};
Uygulama ilk olarak, çerçeve tarafından sağlanan CastContext
nesnesinin tekil örneğini alır. Ardından applicationID
değerini ayarlamak için CastOptions
nesnesini kullanarak setOptions(options)
değerini kullanır.
Kayıt gerektirmeyen Varsayılan Medya Alıcısı'nı kullanıyorsanız applicationID
yerine, aşağıdaki gibi Web Gönderen SDK'sı tarafından önceden tanımlanmış bir sabit kullanırsınız:
cast.framework.CastContext.getInstance().setOptions({
receiverApplicationId: chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID
});
Medya kontrolü
CastContext
başlatıldıktan sonra uygulama, getCurrentSession()
kullanarak mevcut CastSession
değerini istediği zaman alabilir.
var castSession = cast.framework.CastContext.getInstance().getCurrentSession();
CastSession
, loadMedia(loadRequest)
kullanılarak bağlı Cast cihazına medya yüklemek için kullanılabilir.
Öncelikle, contentId
ve contentType
'in yanı sıra içerikle ilgili diğer bilgileri kullanarak bir MediaInfo
oluşturun. Ardından, isteğe ilişkin tüm bilgileri ayarlayarak bu LoadRequest
oluşturun. Son olarak, CastSession
cihazınızdan loadMedia(loadRequest)
numaralı telefonu arayın.
var mediaInfo = new chrome.cast.media.MediaInfo(currentMediaURL, contentType);
var request = new chrome.cast.media.LoadRequest(mediaInfo);
castSession.loadMedia(request).then(
function() { console.log('Load succeed'); },
function(errorCode) { console.log('Error code: ' + errorCode); });
loadMedia
yöntemi, başarılı bir sonuç için gerekli tüm işlemleri gerçekleştirmek üzere kullanılabilecek bir Promise döndürür.
Promise reddedilirse işlev bağımsız değişkeni chrome.cast.ErrorCode
olur.
Oynatıcı durumu değişkenlerine RemotePlayer
bölümünden erişebilirsiniz.
Medya etkinliği geri çağırma ve komutları dahil olmak üzere RemotePlayer
ile tüm etkileşimler RemotePlayerController
ile yönetilir.
var player = new cast.framework.RemotePlayer();
var playerController = new cast.framework.RemotePlayerController(player);
RemotePlayerController
, uygulamaya yüklü medya için OYNATMA, DURAKLATMA, DURDURMA ve İLERİ SARMA işlemlerinin tümünü kontrol etme olanağı verir.
- OYNAT/DURAKLAT:
playerController.playOrPause();
- DURDUR:
playerController.stop();
- SEEK:
playerController.seek();
RemotePlayer
ve RemotePlayerController
, uzak oynatıcı uygulamak için Polymer veya Angular gibi veri bağlama çerçeveleriyle kullanılabilir.
Angular için bir kod snippet'i aşağıda verilmiştir:
<button id="playPauseButton" class="playerButton" ng-disabled="!player.canPause" ng-click="controller.playOrPause()"> {{player.isPaused ? 'Play' : 'Pause'}} </button> <script> var player = new cast.framework.RemotePlayer(); var controller = new cast.framework.RemotePlayerController(player); // Listen to any player update, and trigger angular data binding update.controller.addEventListener( cast.framework.RemotePlayerEventType.ANY_CHANGE, function(event) { if (!$scope.$$phase) $scope.$apply(); }); </script>
Medya durumu
Medya oynatma sırasında, RemotePlayerController
nesnesinde çeşitli cast.framework.RemotePlayerEventType
etkinlikleri için dinleyiciler ayarlayarak yakalanabilen çeşitli etkinlikler gerçekleşir.
Medya durumu bilgilerini almak için oynatma değiştiğinde ve CastSession.getMediaSession().media
değiştiğinde tetiklenen cast.framework.RemotePlayerEventType
.MEDIA_INFO_CHANGED
etkinliğini kullanın.
playerController.addEventListener(
cast.framework.RemotePlayerEventType.MEDIA_INFO_CHANGED, function() {
// Use the current session to get an up to date media status.
let session = cast.framework.CastContext.getInstance().getCurrentSession();
if (!session) {
return;
}
// Contains information about the playing media including currentTime.
let mediaStatus = session.getMediaSession();
if (!mediaStatus) {
return;
}
// mediaStatus also contains the mediaInfo containing metadata and other
// information about the in progress content.
let mediaInfo = mediaStatus.media;
});
Duraklatma, oynatma, devam ettirme veya ileri sarma gibi etkinlikler gerçekleştiğinde uygulamanın bu etkinliklere göre işlem yapması ve kendisi ile Cast cihazındaki Web Alıcısı uygulaması arasında senkronizasyon yapması gerekir. Daha fazla bilgi için Durum güncellemeleri bölümüne bakın.
Oturum yönetiminin işleyiş şekli
Cast SDK'sı, Cast oturumu kavramını sunar. Bu oturumun oluşturulması, bir cihaza bağlanma, Web Alıcı uygulaması başlatma (veya katılma), bu uygulamaya bağlanma ve bir medya kontrol kanalı başlatma adımlarını içerir. Yayın oturumları ve Web Alıcı yaşam döngüsü hakkında daha fazla bilgi için Web Alıcı Uygulama yaşam döngüsü kılavuzuna bakın.
Oturumlar, uygulamanızın cast.framework.CastContext.getInstance()
aracılığıyla alabileceği CastContext
sınıfı tarafından yönetilir.
Tekil oturumlar, Session
sınıfının alt sınıflarıyla temsil edilir. Örneğin, CastSession
, Cast cihazlarla yapılan oturumları temsil eder. Uygulamanız, CastContext.getCurrentSession()
aracılığıyla etkin Cast oturumuna erişebilir.
Oturum durumunu izlemek için CastContextEventType
.SESSION_STATE_CHANGED
etkinlik türü için CastContext
öğesine bir işleyici ekleyin.
var context = cast.framework.CastContext.getInstance();
context.addEventListener(
cast.framework.CastContextEventType.SESSION_STATE_CHANGED,
function(event) {
switch (event.sessionState) {
case cast.framework.SessionState.SESSION_STARTED:
case cast.framework.SessionState.SESSION_RESUMED:
break;
case cast.framework.SessionState.SESSION_ENDED:
console.log('CastContext: CastSession disconnected');
// Update locally as necessary
break;
}
})
Kullanıcının Yayınlama iletişim kutusundaki "Yayınlamayı durdur" düğmesini tıklaması gibi bağlantı kesme işlemleri için işleyicinize RemotePlayerEventType
.IS_CONNECTED_CHANGED
etkinlik türü için bir işleyici ekleyebilirsiniz. Dinleyicinizde RemotePlayer
bağlantısının kesilip kesilmediğini kontrol edin. Bu durumda, yerel oynatıcı durumunu gerektiği gibi güncelleyin. Örneğin:
playerController.addEventListener(
cast.framework.RemotePlayerEventType.IS_CONNECTED_CHANGED, function() {
if (!player.isConnected) {
console.log('RemotePlayerController: Player disconnected');
// Update local player to disconnected state
}
});
Kullanıcı, çerçeve Cast düğmesi aracılığıyla Cast'i doğrudan kontrol edebilirken gönderen, mevcut CastSession
nesnesi üzerinden Cast'i durdurabilir.
function stopCasting() {
var castSession = cast.framework.CastContext.getInstance().getCurrentSession();
// End the session and pass 'true' to indicate
// that Web Receiver app should be stopped.
castSession.endSession(true);
}
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) oynatmayı durdurur ve başka bir cihazda (hedef) oynatmaya devam eder. En son donanım yazılımına sahip tüm Cast cihazları, yayın aktarımında kaynak veya hedef olarak kullanılabilir.
Akış aktarımı sırasında yeni hedef cihazı almak için cast.framework.SessionState
.SESSION_RESUMED
etkinliği çağrıldığında CastSession#getCastDevice()
işlevini çağırın.
Daha fazla bilgi için Web alıcısında aktarma başlıklı makaleyi inceleyin.