Hướng dẫn dành cho nhà phát triển này mô tả cách thêm tính năng hỗ trợ Google Cast vào ứng dụng Web Sender bằng SDK Cast.
Thuật ngữ
Thiết bị di động hoặc trình duyệt là trình gửi, có chức năng kiểm soát quá trình phát; thiết bị Google Cast là trình nhận, có chức năng hiển thị nội dung trên màn hình để phát.
SDK Web Sender bao gồm 2 phần: API Khung (cast.framework) và API Cơ sở (chrome.cast) Nói chung, bạn sẽ thực hiện các lệnh gọi trên API Khung cấp cao, đơn giản hơn, sau đó các lệnh gọi này sẽ được xử lý bằng API Cơ sở cấp thấp.
Khung trình gửi đề cập đến API Khung, mô-đun và các tài nguyên liên kết cung cấp một trình bao bọc xung quanh chức năng cấp thấp. Ứng dụng trình gửi hoặc ứng dụng Google Cast Chrome đề cập đến một ứng dụng web (HTML/JavaScript) chạy bên trong trình duyệt Chrome trên thiết bị trình gửi. Ứng dụng Web Receiver đề cập đến một ứng dụng HTML/JavaScript chạy trên Chromecast hoặc thiết bị truyền Google Cast.
Khung trình gửi sử dụng thiết kế lệnh gọi lại không đồng bộ để thông báo cho ứng dụng trình gửi về các sự kiện và chuyển đổi giữa nhiều trạng thái của vòng đời ứng dụng Cast.
Tải thư viện
Để triển khai các tính năng của Google Cast, ứng dụng của bạn cần biết vị trí của SDK Web Sender Google Cast, như minh hoạ bên dưới. Thêm tham số truy vấn URL loadCastFramework để tải API Khung Web Sender. Tất cả các trang của ứng dụng phải tham chiếu đến thư viện như sau:
<script src="https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1"></script>
Khung
SDK Web Sender sử dụng không gian tên cast.framework.* . Không gian tên này đại diện cho những nội dung sau:
- Các phương thức hoặc hàm gọi các thao tác trên API
- Trình nghe sự kiện cho các hàm trình nghe trong API
Khung này bao gồm các thành phần chính sau:
CastContextlà một đối tượng singleton cung cấp thông tin về trạng thái Cast hiện tại và kích hoạt các sự kiện cho trạng thái Cast và các thay đổi về trạng thái phiên Cast.- Đối tượng
CastSessionquản lý phiên – đối tượng này cung cấp thông tin về trạng thái và kích hoạt các sự kiện, chẳng hạn như các thay đổi về âm lượng thiết bị, trạng thái tắt tiếng và siêu dữ liệu ứng dụng. - Phần tử nút Truyền, là một phần tử tuỳ chỉnh HTML đơn giản mở rộng nút HTML. Nếu nút Truyền được cung cấp không đủ, bạn có thể sử dụng trạng thái Truyền để triển khai nút Truyền.
RemotePlayerControllercung cấp tính năng liên kết dữ liệu để đơn giản hoá việc triển khai trình phát từ xa.
Hãy xem Tài liệu tham khảo API Web Sender Google Cast để biết nội dung mô tả đầy đủ về không gian tên.
Nút truyền
Thành phần nút Truyền trong ứng dụng của bạn được khung xử lý hoàn toàn. Điều này bao gồm cả việc quản lý khả năng hiển thị cũng như xử lý sự kiện nhấp chuột.
<google-cast-launcher></google-cast-launcher>
Ngoài ra, bạn có thể tạo nút theo phương thức lập trình:
document.createElement("google-cast-launcher");
Bạn có thể áp dụng mọi kiểu bổ sung, chẳng hạn như kích thước hoặc vị trí, cho phần tử nếu cần. Sử dụng thuộc tính --connected-color để chọn màu cho trạng thái Web Receiver đã kết nối và --disconnected-color cho trạng thái đã ngắt kết nối.
Khởi chạy
Sau khi tải API khung, ứng dụng sẽ gọi trình xử lý window.__onGCastApiAvailable. Bạn nên đảm bảo rằng ứng dụng đặt trình xử lý này
trên window trước khi tải thư viện trình gửi.
Trong trình xử lý này, bạn sẽ khởi chạy tương tác Truyền bằng cách gọi phương thức
setOptions(options)
của
CastContext.
Ví dụ:
<script>
window['__onGCastApiAvailable'] = function(isAvailable) {
if (isAvailable) {
initializeCastApi();
}
};
</script>
Sau đó, bạn sẽ khởi chạy API như sau:
initializeCastApi = function() {
cast.framework.CastContext.getInstance().setOptions({
receiverApplicationId: applicationId,
autoJoinPolicy: chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED
});
};
Trước tiên, ứng dụng sẽ truy xuất thực thể singleton của đối tượng
CastContext
do khung cung cấp. Sau đó, ứng dụng sẽ sử dụng
setOptions(options)
bằng đối tượng
CastOptions
để đặt applicationID.
Nếu đang sử dụng Trình nhận nội dung nghe nhìn mặc định (không yêu cầu đăng ký), bạn sẽ sử dụng một hằng số được SDK Web Sender xác định trước, như minh hoạ bên dưới, thay vì applicationID:
cast.framework.CastContext.getInstance().setOptions({
receiverApplicationId: chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID
});
Điều khiển phương tiện
Sau khi CastContext
được khởi chạy, ứng dụng có thể truy xuất
CastSession hiện tại bất cứ
lúc nào bằng cách sử dụng
getCurrentSession().
var castSession = cast.framework.CastContext.getInstance().getCurrentSession();
Bạn có thể sử dụng CastSession để tải nội dung nghe nhìn vào thiết bị truyền đã kết nối bằng cách sử dụng
loadMedia(loadRequest).
Trước tiên, hãy tạo
MediaInfo,
bằng cách sử dụng contentId và contentType, cũng như mọi thông tin khác
liên quan đến nội dung. Sau đó, hãy tạo
LoadRequest
từ đó, đặt tất cả thông tin liên quan cho yêu cầu. Cuối cùng, hãy gọi loadMedia(loadRequest) trên CastSession.
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); });
Phương thức loadMedia sẽ trả về một
Promise
có thể dùng để thực hiện mọi thao tác cần thiết để có kết quả thành công.
Nếu Lời hứa bị từ chối, đối số hàm sẽ là
chrome.cast.ErrorCode.
Bạn có thể truy cập vào các biến trạng thái trình phát trong
RemotePlayer.
Tất cả các tương tác với RemotePlayer, bao gồm cả lệnh gọi lại sự kiện nội dung nghe nhìn và
lệnh, đều được xử lý bằng
RemotePlayerController.
var player = new cast.framework.RemotePlayer();
var playerController = new cast.framework.RemotePlayerController(player);
RemotePlayerController cho phép ứng dụng kiểm soát hoàn toàn nội dung nghe nhìn của các thao tác PHÁT, TẠM DỪNG, DỪNG và TUA cho nội dung nghe nhìn đã tải.
- PHÁT/TẠM DỪNG:
playerController.playOrPause(); - DỪNG:
playerController.stop(); - TUA:
playerController.seek();
Bạn có thể sử dụng RemotePlayer và RemotePlayerController với các khung liên kết dữ liệu, chẳng hạn như Polymer hoặc Angular, để triển khai trình phát từ xa.
Dưới đây là đoạn mã cho Angular:
<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>
Trạng thái nội dung nghe nhìn
Trong quá trình phát nội dung nghe nhìn, nhiều sự kiện xảy ra có thể được ghi lại bằng cách đặt
trình nghe cho nhiều
cast.framework.RemotePlayerEventType
sự kiện trên đối tượng
RemotePlayerController.
Để lấy thông tin về trạng thái nội dung nghe nhìn, hãy sử dụng sự kiện
cast.framework.RemotePlayerEventType.MEDIA_INFO_CHANGED
. Sự kiện này sẽ kích hoạt khi quá trình phát thay đổi và khi
CastSession.getMediaSession().media
thay đổi.
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;
});
Khi các sự kiện như tạm dừng, phát, tiếp tục hoặc tua xảy ra, ứng dụng sẽ cần thực hiện hành động đối với các sự kiện đó và đồng bộ hoá giữa chính ứng dụng và ứng dụng Web Receiver trên thiết bị Cast. Xem phần Cập nhật trạng thái để biết thêm thông tin.
Cách hoạt động của tính năng quản lý phiên
SDK Cast giới thiệu khái niệm về phiên Cast. Việc thiết lập phiên này kết hợp các bước kết nối với thiết bị, khởi chạy (hoặc tham gia) ứng dụng Web Receiver, kết nối với ứng dụng đó và khởi chạy kênh điều khiển nội dung nghe nhìn. Hãy xem hướng dẫn về Vòng đời ứng dụng Web Receiver để biết thêm thông tin về các phiên Cast và vòng đời Web Receiver.
Các phiên được quản lý bằng lớp
CastContext,
mà ứng dụng của bạn có thể truy xuất thông qua
cast.framework.CastContext.getInstance().
Các phiên riêng lẻ được biểu thị bằng các lớp con của lớp
Session. Ví dụ:
CastSession
đại diện cho các phiên có thiết bị Cast. Ứng dụng của bạn có thể truy cập vào phiên Cast hiện đang hoạt động
thông qua
CastContext.getCurrentSession().
Để theo dõi trạng thái phiên, hãy thêm trình nghe vào
CastContext cho
loại sự kiện
CastContextEventType.SESSION_STATE_CHANGED.
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;
}
})
Đối với việc ngắt kết nối, chẳng hạn như khi người dùng nhấp vào nút "dừng truyền" từ
hộp thoại Truyền, bạn có thể thêm trình nghe cho loại sự kiện
RemotePlayerEventType.IS_CONNECTED_CHANGED
trong trình nghe. Trong trình nghe, hãy kiểm tra xem
RemotePlayer có
bị ngắt kết nối hay không. Nếu có, hãy cập nhật trạng thái trình phát cục bộ nếu cần. Ví dụ:
playerController.addEventListener(
cast.framework.RemotePlayerEventType.IS_CONNECTED_CHANGED, function() {
if (!player.isConnected) {
console.log('RemotePlayerController: Player disconnected');
// Update local player to disconnected state
}
});
Mặc dù người dùng có thể trực tiếp kiểm soát việc chấm dứt Truyền thông qua nút Truyền của khung, nhưng chính trình gửi có thể dừng truyền bằng đối tượng
CastSession
hiện tại.
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);
}
Chuyển đổi phiên phát trực tuyến
Việc duy trì trạng thái phiên là cơ sở của tính năng chuyển đổi phiên phát trực tuyến. Nhờ đó, người dùng có thể di chuyển các phiên phát trực tuyến âm thanh và video hiện có trên các thiết bị bằng lệnh thoại, Ứng dụng Google Home hoặc màn hình thông minh. Nội dung nghe nhìn ngừng phát trên một thiết bị (nguồn) và tiếp tục phát trên một thiết bị khác (đích). Mọi thiết bị truyền có chương trình cơ sở mới nhất đều có thể đóng vai trò là nguồn hoặc đích trong quá trình chuyển đổi phiên phát trực tuyến.
Để lấy thiết bị đích mới trong quá trình chuyển đổi phiên phát trực tuyến, hãy gọi
CastSession#getCastDevice()
khi sự kiện
cast.framework.SessionState.SESSION_RESUMED
được gọi.
Xem phần Chuyển đổi phiên phát trực tuyến trên Web Receiver để biết thêm thông tin.