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

במדריך הזה מוסבר איך להעביר אפליקציה של מקלט Cast גרסה 2 לגרסה האחרונה של אתר האינטרנט האפליקציה המקבלת.

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

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

למה כדאי לבצע העברה

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

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

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

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

מה השתנה?

ה-Web Acceptr API מנסה לפעול בהתאם למוסכמות שנהגו ליישם שולחי CAF עבור Android ו iOS, והיא די שונה מ-v2.

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

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

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

השדה PlayerManager חושף גם את המחלקות החדשות של חשבון הניהול המשני:

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);

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

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

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

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 של סטטוס המדיה המותאם אישית גרסה 2 מוחלף בהודעה מכשיר יירוט להודעה של סטטוס המדיה. אפליקציות של מקבלי אינטרנט שלא רוצים חשיפה של כתובת 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, אלא מספק 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>

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