העברה למקלט אינטרנט

במדריך הזה מוסבר איך להעביר את גרסה 2 של אפליקציית Chromecast Caster לאפליקציה העדכנית ביותר של Web Weber.

ערכת ה-SDK החדשה ל-Cast Application Framework (CAF), שנקראת גם Web נמעניםer v3, היא שדרוג משמעותי של SDK המקבל v2 SDK. ה-Web Tuner SDK מספק SDK פשוט ויעיל לפיתוח אפליקציות של מקלט אינטרנט.

מקלט האינטרנט מספק ממשק API שמתאים יותר לממשקי ה-API החדשים של שולחי CAF. יש בו שילוב מלא של נגן (MPL ו-Shaka) והטמעה ותמיכה מלאים במדיה ב-Cast ובפקודות הקוליות של Google Assistant. ממשק ה-SDK של CAF מספק גם ממשק משתמש כברירת מחדל שאפשר לעצב בקלות באמצעות CSS, וגם שירות מחייב נתונים שמפשט את ההטמעה של ממשק המשתמש.

למה להעביר?

כשאתם מעבירים אפליקציה של מקלט v2 למקלט אינטרנט, אתם יכולים לבטל הרבה קוד שקשור לשחקן כדי שתוכלו להתמקד בכתיבת לוגיקה עסקית ספציפית לאפליקציה.

CAF משלב באופן חלק נגני MPL ו-Shake כדי לתמוך במגוון רחב יותר של סוגי תוכן, ��ולל סטרימינג בשידור חי ב-HTTP (TS ו-CMAF), MPEG-DASH, סטרימינג חלק וסוגים נתמכים של נכס המקור של רכיב המדיה (MP3, MP4, Icecast וכו'...). הרשימה המלאה זמינה במאמר מדיה נתמכת עבור Google Cast. בשלב זה, אין תמיכה ב-CFA – נגן שסופק על ידי המשתמש.

המעבר ל-CAF י��סיף תמיכה לשליטה קולית באמצעות Google Assistant. כל פקודה קולית חדשה עם Google Assistant תהיה נתמכת באופן אוטומטי כשאתם משתמשים ב-CAF.

בנוסף לתמיכה בפקודות מדיה חדשות – כמו "שינוי טראקים לפי שפה" ו"שינוי שיעור ההפעלה" – גם ב-CAF יש גישה טובה יותר ל'הבאים בתור', תמיכה מובנית במודעות ותמיכה בזמן אמת.

מה השתנה?

ה-API של מקלט האינטרנט מנסה ליישם את המוסכמות שהוצגו על ידי שולחי CAF עבור Android ו-iOS, והוא שונה לחלוטין מגרסה 2.

מקלט האינטרנט משתמש במרחב שמות חדש, cast.framework, במקום מרחב שמות cast.receiver לכל ממשקי ה-API שנחשפים. רבים מאובייקטי הנתונים שבהם השתמשו ב-v2 הם זהים ב-CAF ונחשפים במרחב השמות cast.framework.messages (הם היו בעיקר מתחת ל-cast.receiver.media).

שירותי v2 הבאים מוחלפים בשירותי CAF תואמים:

  • כיתה CastReceiverManager תוחלף על ידי CastReceiverContext, שהיא יחידה בודדת שמנהלת את סשן ההעברה, את השולחים, את שליחת ההודעות המותאמות אישית ואת אירועי המערכת הגלובלית. אפשר להשתמש בשדה CastReceiverOptions כדי לספק אפשרויות גלובליות של אפליקציות (כמו 'הבאים בתור', 'מקלט לצד השני', 'הגדרת הפעלה' וכו').
  • כיתה MediaManager מוחלפת על ידי PlayerManager, שהוא נכס של ה-singleon של CastReceiverContext, והוא מנהל את הפעלת המדיה, בקשות המדיה, הבקשות הקוליות של Google Assistant (CommandAndControlManager בגרסה 2) ומפעיל אירועי מדיה. ההגדרות לנגנים (cast.player.api.Host ב-MPL) מסופקות על ידי PlaybackConfig, ואפשר לספק אותן בכל העולם או בבקשת טעינה.

גם ב-PlayerManager יש גישה לכיתות החדשות של תת-חשבון MCC:

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();

// Set global options.
const options = new cast.framework.CastReceiverOptions();
options.versionCode = DEVELOPERS_APP_VERSION;

context.start(options);

הלוגיקה העסקית של המקבל

רכיבי handler של אירועים שנחשפו בגרסה 2 של המקבל (כמו CastReceiverManager.onReady או MediaManager.onLoad) כדי להוסיף לוגיקה עסקית. ב-CAD מחליפים את רכיבי ה-handler של אירועים על ידי listener של אירוע (CastReceiverContext.addEventListener) ומיירטים של הודעות (PlayerManager.setMessageInterceptor). למקלטי האינטרנט יכולים להיות מספר מאזינים לאירוע (ה-listener לא משפיע על האירוע) ומייבש אחד לכל הודעה. כלי היירוט יכול לעדכן את הבקשה או לטפל בה (החזרה של בקשה ששונתה, הודעת הצלחה או הודעת שגיאה), והוא יכול להיות גורם handler אסינכרוני שמחזיר הבטחה.

היישומון של בקשת טעינה הוא המקום הנפוץ ביותר להוספת לוגיקה ספציפית לאפליקציה. עבור בקשות טעינה משולח, מיירוט הטעינה יכול להמיר את מזהה התוכן לכתובת האתר של התוכן. כלי הפחתת העומסים נקרא גם לבקשות טעינה מראש ובקשות לשמירה מראש, אם לא סופק ייפוי כוח מפורש עבור טעינה מראש או טעינה מראש.

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.LOAD,
    request => {
      // Resolve entity to content id
      if (request.media.entity && !request.media.contentId) {
        return getMediaByEntity(request.media.entity).then(
            media => {
              request.media.contentId = media.url;
              return request;
            });
      }
      return request;
    });

ה-handler של סטטוס המדיה בהתאמה אישית v2 גם מוחלף בווידג'ט הודעות להודעה של סטטוס המדיה. אפליקציות של מקלטי אינטרנט שלא רוצים לחשוף את כתובת ה-URL של המדיה בסטטוס המדיה יכולות לספק מקודד של כתובת URL (PlayerManager.setMediaUrlResolver), שמספק את כתובת ה-URL של המדיה בבקשת טעינה. בכתובת ה-URL הזו נעשה שימוש פנימי על ידי CAF, והיא לא ניתנת בסטטוס המדיה.

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.MEDIA_STATUS,
    status => {
      // Disable seek.
      status.supportedMediaCommands &=
          ~cast.framework.messages.Command.SEEK
      return status;
    });

אירועים

מקלט האינטרנט מ��פק מגוון רחב של אירועים, מ-CastReceiverContext ומ-PlayerManager. לאפליקציות של מקלטי אינטרנט יכולים להיות מספר מאזינים בכל אירוע, והם יכולים גם לספק האזנה אחת לאירועים מרובים. (כאן תוכלו לקרוא על cast.framework.events.category קבוצות מסוימות של אירועים).

האירועים כ��ל��י�� ��ת כ�� בקשות המשתמשים, התקדמות ההפעלה, עיבוד הנגנים וכל אירוע ברמה נמוכה של רכיב מדיה (CAF לא חושף את רכיב המדיה עצמו).

אפליקציית מקלט האינטרנט יכולה להוסיף פונקציות מסוג event listener שבהן ניתן לפעול (לדוגמה, להוסיף הגדרה של רצועות טקסט לאחר השלמת הטעינה) או ניתוח נתונים.

// Log all media commands
playerManager.addEventListener(
    cast.framework.events.category.REQUEST,
    event => logEvent(event.type));

אוטובוס מותאם אישית של הודעות

CAF לא חושף את רכיב ה-API של ההודעות ב-API, אלא מאפשר CastReceiverContext.addCustomMessageListener להוסיף האזנה להודעה של מרחב שמות ספציפי (אחד בלבד לכל מרחב שמות) ו-CastReceiverContext.sendCustomMessage לשליחת הודעה במרחב שמות. צריך להצהיר על כל מרחבי השמות לפני ההפעלה של מקלט האינטרנט (כלומר, לפני שמתחילים להתקשר אל CastReceiverContext.start). אפשר להוסיף שמות למרחבי שמות על ידי הוספת מאזינים להודעות, או שאפשר להוסיף אותם כאפשרויות התחלה ב-CastReceiverOptions.customNamespaces.

const options = new cast.framework.CastReceiverOptions();
options.customNamespaces = {
    CUSTOM_NS: cast.framework.system.MessageType.JSON
};
context.start(options);

context.sendCustomMessage(CUSTOM_NS, {
  type: 'status'
  message: 'Playing'
});

ממשק ברירת המחדל

CAF מספק ממשק משתמש כברירת מחדל של מקלט אינטרנט, המציג סרגל התקדמות של הפעלה ומטא נתונים בהתאם לצורך. ממשק המשתמש שמוגדר כברירת מחדל הוא רכיב מותאם אישית (<cast-media-player>) שאפשר לעצב עם סגנון דמוי CSS.

<style>
   cast-media-player { --splash-image: url("splash.png"); }
</style>
<cast-media-player></cast-media-player>

להתאמה אישית נוספת, האפליקציה של מקלט האינטרנט יכולה להטמיע ממשק משתמש משלה. מקלט האינטרנט מספק את המחלקה cast.framework.ui.PlayerDataBinder כדי לעזור לקשור אובייקט בממשק המשתמש למצב ההפעלה של מקלט האינטרנט.