במדריך הזה למפתחים מוסבר איך להוסיף תמיכה ב-Google Cast לאינטרנט אפליקציית שולח באמצעות Cast SDK.
הסברים על המונחים
המכשיר הנייד או הדפדפן הם השולח, ששולט בהפעלה. מכשיר Google Cast הוא המקלט, שמציג את התוכן למסך להפעלה.
ה-Web Sender SDK מורכב משני חלקים: Framework API (cast.framework) ו-Base API (chrome.cast) באופן כללי, מבצעים קריאות ב-framework API הפשוט יותר, ברמה גבוהה יותר, שיעובד לאחר מכן על ידי Base API ברמה נמוכה יותר.
מסגרת השולח מתייחסת ל-framework API, למודול ולממשק המשויך משאבים שמספקים wrapper לפונקציונליות ברמה נמוכה יותר. אפליקציית השולח או אפליקציית Google Cast ל-Chrome: אפליקציית אינטרנט (HTML/JavaScript) פועל בדפדפן Chrome במכשיר שולח. אפליקציה של קבלה מהאינטרנט לאפליקציית HTML/JavaScript שפועלת ב-Chromecast או במכשיר Google Cast.
מסגרת השולח משתמשת בעיצוב אסינכרוני של קריאה חוזרת כדי ליידע את השולח אפליקציית אירועים ולעבור בין מצבים שונים של חיי אפליקציית Cast במחזוריות.
טעינת הספרייה
כדי שהאפליקציה תוכל להטמיע את התכונות של Google Cast, היא צריכה לדעת את הפרטים של Google Cast Web Sender SDK, כפי שמוצג בהמשך. מוסיפים את פרמטר של שאילתת כתובת URL מסוג loadCastFramework כדי לטעון את Web Sender Framework API וגם. כל הדפים באפליקציה חייבים להפנות לספרייה באופן הבא:
<script src="https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1"></script>
מסגרת
ב-Web Sender SDK נעשה שימוש ב-cast.framework.* מרחב שמות. מרחב השמות מייצג את הערכים הבאים:
- שיטות או פונקציות שמפעילות פעולות ב-API
- פונקציות event listener לפונקציות של Listener ב-API
המסגרת מורכבת מהרכיבים העיקריים הבאים:
CastContext
הוא אובייקט סינגלטון שמספק מידע מצב ההעברה הנוכחי והפעלת אירועים למצב Cast ולהפעלת Cast שינויים במצב מופעל.CastSession
האובייקט מנהל את הסשן – הוא מספק מצב מידע וטריגרים של אירועים, כמו שינויים בעוצמת הקול של המכשיר, מצב השתקה ומטא-נתונים של אפליקציות.- רכיב הלחצן להפעלת Cast שהוא רכיב HTML פשוט ומותאם אישית מרחיב את לחצן ה-HTML. אם הלחצן להפעלת Cast שסופק לא מספיק, אפשר להשתמש במצב הפעלת Cast כדי להטמיע לחצן Cast.
RemotePlayerController
מספק את קישור הנתונים כדי לפשט את ההטמעה של הנגן המרוחק.
כדאי לקרוא את חומר עזר בנושא Google Cast Web Sender API את התיאור המלא של מרחב השמות.
לחצן הפעלת Cast
רכיב הלחצן להפעלת Cast באפליקציה מטופל במלואו על ידי ה-framework. הזה כולל ניהול הרשאות גישה וטיפול באירועי קליקים.
<google-cast-launcher></google-cast-launcher>
לחלופין, אפשר ליצור את הלחצן באופן פרוגרמטי:
document.createElement("google-cast-launcher");
אפשר להוסיף כל סוג של עיצוב, כמו גודל או מיקום,
לפי הצורך. צריך להשתמש במאפיין --connected-color
כדי
לבחור את הצבע למצב של מקלט האינטרנט המחובר,
--disconnected-color
למצב הניתוק.
אתחול
אחרי טעינת ה-framework API, האפליקציה תקרא ל-handler
window.__onGCastApiAvailable
צריך לוודא שהאפליקציה מגדירה את ה-handler הזה
ב-window
לפני שטוענים את ספריית השולחים.
בתוך ה-handler הזה, אפשר לאתחל את האינטראקציה של Cast על ידי קריאה
setOptions(options)
אמצעי תשלום אחד
CastContext
לדוגמה:
<script>
window['__onGCastApiAvailable'] = function(isAvailable) {
if (isAvailable) {
initializeCastApi();
}
};
</script>
לאחר מכן, מאתחלים את ה-API באופן הבא:
initializeCastApi = function() {
cast.framework.CastContext.getInstance().setOptions({
receiverApplicationId: applicationId,
autoJoinPolicy: chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED
});
};
ראשית, האפליקציה מאחזרת את מופע הסינגלטון
אובייקט CastContext
שסופקו על ידי המסגרת. לאחר מכן היא משתמשת
setOptions(options)
באמצעות
אובייקט CastOptions
כדי להגדיר את applicationID
.
אם אתם משתמשים ב-Default Mediaאדמין, שלא מחייב הרשמה,
משתמשים ב-SDK קבוע שמוגדר מראש על ידי Web Sender SDK, כמו שמוצג בהמשך, במקום
applicationID
:
cast.framework.CastContext.getInstance().setOptions({
receiverApplicationId: chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID
});
פקד מדיה
אחרי CastContext
הופעל, האפליקציה יכולה לאחזר את
CastSession
ללא הגבלה
זמן באמצעות
getCurrentSession()
.
var castSession = cast.framework.CastContext.getInstance().getCurrentSession();
אפשר להשתמש ב-CastSession
כדי לטעון מדיה למכשיר Cast המחובר באמצעות
loadMedia(loadRequest)
.
קודם כל, יוצרים
MediaInfo
באמצעות contentId
ו-contentType
, וכן בכל מידע אחר
שקשורות לתוכן. לאחר מכן יוצרים
LoadRequest
להגדיר את כל המידע הרלוונטי לבקשה. לבסוף,
התקשרות אל loadMedia(loadRequest)
במכשיר 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); });
השיטה loadMedia
תחזיר את הערך
Promise
שיכול לשמש לביצוע כל הפעולות הנדרשות להשגת תוצאה מוצלחת.
אם ההבטחה נדחתה, הארגומנט של הפונקציה יהיה
chrome.cast.ErrorCode
אפשר לגשת למשתני מצב הנגן דרך
RemotePlayer
כל האינטראקציות עם RemotePlayer
, כולל קריאות חוזרות (callback) של אירועי מדיה ו
מבוצעות באמצעות
RemotePlayerController
.
var player = new cast.framework.RemotePlayer();
var playerController = new cast.framework.RemotePlayerController(player);
השדה RemotePlayerController
מעניק לאפליקציה שליטה מלאה במדיה
ניתן להפעיל, להשהות, להפסיק או לחפש את המדיה שנטענה.
- הפעלה/השהיה:
playerController.playOrPause();
- עצירה:
playerController.stop();
- בקשה:
playerController.seek();
הערכים RemotePlayer
ו-RemotePlayerController
יכולים להיות
בשימוש עם frameworks, כגון פולימר או Angular, כדי להטמיע
נגן מרוחק.
הנה קטע קוד עבור 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>
סטטוס מדיה
במהלך הפעלה של מדיה, מתרחשים אירועים שונים. אפשר לתעד אותם באמצעות ההגדרה
מאזינים למגוון
cast.framework.RemotePlayerEventType
ב
אובייקט RemotePlayerController
.
כדי לקבל את פרטי הסטטוס של המדיה, משתמשים
cast.framework.RemotePlayerEventType
.MEDIA_INFO_CHANGED
אירוע, שמופעל כשההפעלה משתנה וכשהמשתמש
CastSession.getMediaSession().media
שינויים.
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;
});
כאשר מתרחשים אירועים כמו השהיה, הפעלה, המשך או דילוג, האפליקציה תצטרך לבצע פעולה. בהם ולסנכרן בינו לבין האפליקציה של מקלט האינטרנט ב-Cast במכשיר. עדכוני סטטוס אפשר לקבל מידע נוסף.
איך פועל ניהול הסשנים
ב-Cast SDK מוצג הקונספט של סשן הפעלת Cast, שמשלבת את השלבים של התחברות למכשיר, השקה (או הצטרפות) של אתר אפליקציית המקבל, התחברות לאפליקציה והפעלה של ערוץ בקרת מדיה. צפייה במקלט האינטרנט מדריך למחזור החיים של אפליקציה לקבלת מידע נוסף על סשנים של הפעלת Cast ועל מחזור החיים של מקלט האינטרנט.
הסשנים מנוהלים על ידי הכיתה
CastContext
שהאפליקציה שלך יכולה לאחזר באמצעות
cast.framework.CastContext.getInstance()
ביקורים בודדים מיוצגים על ידי מחלקות משנה של הכיתה
Session
לדוגמה,
CastSession
מייצג סשנים עם מכשירי Cast. האפליקציה שלך יכולה לגשת לחשבונות הפעילים כרגע
הפעלת Cast דרך
CastContext.getCurrentSession()
כדי לעקוב אחרי מצב הסשן, כדאי להוסיף listener
CastContext
עבור
ה
סוג אירוע 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;
}
})
לניתוק, למשל כשמשתמש לוחץ על 'הפסקת העברה' לחצן מ-
בתיבת הדו-שיח 'העברה', אפשר להוסיף האזנה
RemotePlayerEventType
.IS_CONNECTED_CHANGED
סוג האירוע ב-listener שלכם. ב-listener, בודקים אם
RemotePlayer
הוא
מנותק. אם כן, מעדכנים את מצב הנגן המקומי לפי הצורך. לדוגמה:
playerController.addEventListener(
cast.framework.RemotePlayerEventType.IS_CONNECTED_CHANGED, function() {
if (!player.isConnected) {
console.log('RemotePlayerController: Player disconnected');
// Update local player to disconnected state
}
});
המשתמש יכול לשלוט ישירות בסיום הפעלת Cast באמצעות Cast של ה-framework
לחצן, השולח עצמו יכול להפסיק את הפעלת ה-Cast באמצעות
CastSession
לאובייקט.
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);
}
העברה בסטרימינג
שימור מצב הסשן הוא הבסיס להעברת השידור, המשתמשים יכולים להעביר שידורי אודיו ווידאו קיימים בין מכשירים באמצעות פקודות קוליות, Google Home אפליקציה או מסכים חכמים. המדיה מפסיקה לפעול במכשיר אחד (המקור) וממשיכה במכשיר אחר (המקור היעד). כל מכשיר Cast עם הקושחה האחרונה יכול לשמש כמקורות או יעדים העברה בסטרימינג.
כדי לקבל את מכשיר היעד החדש במהלך ההעברה בסטרימינג, צריך להתקשר
CastSession#getCastDevice()
כאשר
cast.framework.SessionState
.SESSION_RESUMED
מתבצעת קריאה לאירוע.
צפייה העברת סטרימינג במקלט אינטרנטי אפשר לקבל מידע נוסף.