מסגרת CAS

מסגרת המערכות לגישה מותנית של מדיה (Media CAS) מספקת ממשקי API להפעלת שירותי גישה מותנית (CA) במגוון טלוויזיות דיגיטליות חומרה, כולל כבלים דיגיטליים, לוויין, מערכות יבשתיות ו-IPTV המערכות שלנו. תוכנת ה-framework פועלת עם מסגרת קלט של Android TV ו-Android TV Turwork framework, אספקת ממשקי API של Java שהופעלו מאפליקציית שירות קלט הטלוויזיה (TIS).

אלה היעדים העיקריים של ה-CAS של המדיה.

  • לספק מסגרת ציבורית של Java API ו-framework של יישומי פלאגין מקוריים שבהם ניתן להשתמש על ידי מפתחים ויצרני ציוד מקורי מצד שלישי כדי לתמוך ב-CAS לטלוויזיה משודרת ב-Android.
  • לספק מסגרת CAS ב-Android שמאפשרת ליצרני ציוד מקורי ל-ATV לפעול באופן הדדי עם מגוון ספקי CAS באופן עקבי.
  • לתמוך בכמה ספקי CAS של צד שלישי באמצעות יישומי פלאגין מקוריים. יישומי פלאגין של CAS עשויים להשתמש בפרוטוקולי רשת ספציפיים לספק, בהרשאה פורמטים של הודעות ניהול (EMM)/של הודעות לבקרת הרשאות (ECM), ומפענחים למפענח.
  • תמיכה באבטחת חומרה כמו סולמות מפתחות.
  • לתמוך בסביבות הפעלה מהימנות (TEE) כמו TrustZone.

הגדרות נתמכות

הגדרת טיונר החומרה

אם החומרה אחראית להסרה של ריבוי תעבורת נתונים באמצעות MPEG ופענוח, Tuner framework מספק נתונים ספציפיים לתוכנית גישה מותנית (PSI) אפליקציית TIS כדי להשתמש בטיונרים לטלוויזיה מבוססי חומרה.

נתוני PSI של גישה מותנית כוללים מתארי CA, ECM ו-EMM. האלה שמאפשרים לפלאגין של CAS לקבל מפתחות שנדרשים כדי לפענח את ההצפנה של בסטרימינג של תוכן.

תרשים התצורה של טיונר החומרה.

איור 1. הגדרת טיונר החומרה

הגדרות החומרה עשויות לכלול שכבת TEE, כמו TrustZone, שמתוארת באיור 1. אם אין שכבת TEE, יש לקוח CAS. הפלאגין יכול לתקשר עם שירותי סולם של מפתחות חומרה שמסופקים על ידי הפלטפורמה. בגלל וריאציות ספציפיות לספק של הממשקים האלה, ה-CAS של המדיה לא יוצרת מהם סטנדרטיזציה.

תצורת התוכנה

לפני Android 11, מסגרת CAS של Media עדיין הייתה לעיבוד תוכן מבוסס תוכנה, כמו IPTV מ-IP Multicast/unicast. אפליקציית TIS אחראית ליצור הקצאת אובייקט Media CAS Java.

האפליקציה עשויה להשתמש ב-MediaSelector או מנתחי MPEG2-TS אחרים כדי לחלץ נתוני PSI שקשורים ל-CA, כמו מתארים של CA, ECM ו-EMM. אם האפליקציה משתמשת ל-framework של Mediaחלץ יכול להעניק גישה לסשן ה-CAS ניהול, כמו פתיחת סשן ועיבוד EMM/ECM ל-framework. חילוץ מדיה. לאחר מכן Mediaחלץ מגדיר את הסשן של ה-CAS באמצעות ישירות בממשק API.

אחרת, האפליקציה אחראית לחילוץ נתוני ה-PSI שקשורים ל-CA. הגדרת הסשן של CAS באמצעות ממשקי ה-API של Media CAS Java API (לדוגמה, כאשר האפליקציה משתמשת במנתח MPEG2-TS משלה).

תרשים התצורה של הטיונר.

איור 2. תצורת קלט של IPTV, CAS ומפענח שידור באמצעות חילוץ מדיה של framework

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

  • אם הטראק לא דורש פענוח מאובטח, כלי החילוץ מתפרק יחידת הגישה כדי לנקות אגירת נתונים ולחלץ דגימות כאילו, ניקוי זרם. כך, MediaCodec לא צריך להיות מעורב של פענוח הקוד.
  • אם הטראק דורש פענוח מאובטח, יכול להיות שהמחלץ עדיין יוכל צריך מקודד-מפענח. זה קורה כשזרם התעבורה מעורבלים ברמת חבילת התעבורה, שבה כותרת ה-streams (PES) מעורבלת. כלי החילוץ צריך לגשת למומחי המוצרים בכותרת של מידע מסוים במורד הזרם (למשל, המצגת) חותמת זמן מסוימת).

    המחלץ לא משתמש במפענח אם זרם התעבורה מעורבלים ברמת חבילת ה-PES, שבה הכותרת של ה-PES ברורה. עם זאת, לא ניתן לאשר מתי המעורבלים מתרחשים עד מגיעה חבילה מעורבלת בפועל. כדי לפשט את התהליך, נניח שמשתמשים במפענח אם נקבע שהטראק מעורבל בהתבסס על מיפוי התוכנית טבלה (PMT).

המגבלות של הגדרת התוכנה

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

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

גם אם לסשן נדרש מפענח מאובטח, יכול להיות בקשה להפיק כמות קטנה של נתונים כדי לנקות מאגרי נתונים זמניים על ידי כלי החילוץ כדי לעבד את הכותרת של מומחי המוצרים (PES). כדי למנוע מאפליקציה זדונית ליצור את הפלאגין להחזיר את יחידת הגישה במלואה, הפלאגין צריך לנתח את המטען הייעודי (payload) של התעבורה. כדי לוודא שהמטען הייעודי (Payload) מתחיל בכותרת PES של השידור המתאים. מהסוג הזה. אחרת, הפלאגין אמור לדחות את הבקשה.

רצף כוונון של רשות אישורים

בעת כוונון לערוץ חדש, מודול ה-TIS נרשם לקבלת CA תיאורים, ECM ו-EMM ממסגרת PSI Tur (טיונר). מתאר CA מכיל את מזהה המערכת של רשות האישורים שמזהה באופן ייחודי רשות אישורים ספציפית של הספק ונתונים אחרים הספציפיים לספק. TIS שולח שאילתה אל Media CAS כדי לקבוע אם קיים פלאגין CAS שיכול לטפל במתאר ה-CA.

תרשים כוונון של תוכן CAS.

איור 3. כוונון תוכן של CAS

אם יש תמיכה במזהה המערכת של רשות האישורים, נוצר מופע של ה-CAS של המדיה והנתונים הפרטיים של הספק ממתאר ה-CA מסופקים לפלאגין. לאחר מכן, נפתחים סשנים חדשים ב-Media CAS כדי לטפל באודיו ובווידאו בסטרימינג. בסשנים החדשים שנפתחו מקבלים ECM ו-EMMs של הפלאגין.

תהליך לדוגמה של פלאגין CAS

TIS מעבירה ערכות ECM לפלאגין CAS באמצעות ממשקי API של Media CAS. מכשיר ECM מכיל את מילת הבקרה המוצפנת, שצריך לפענח אותה באמצעות מידע מ-EMM. הפלאגין של CAS קובע איך לרכוש EMM עבור הנכס על סמך מידע ספציפי לספק מתאר CA, שסופק באמצעות השיטה setPrivateData().

יכול להיות שספקי EMM יועברו בתדר הסטרימינג של התוכן או מחוץ למסגרת באמצעות בקשת רשת שהופעלה על ידי הפלאגין של ה-CA. TIS משתמש בשיטה processEMM() כדי להעביר ספקי EMM בתחום התדרים לפלאגין של ה-CA.

אם נדרשת בקשת רשת לקבלת EMM, הפלאגין של CA לביצוע טרנזקציית רשת עם שרת רישיונות.

תרשים של CAS לדוגמה.

איור 4. דוגמה לפלאגין של CAS לעיבוד EMM ו-ECM

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

ממשק API של Media CAS Java

ה-Media CAS Java API מכיל את השיטות הבאות.

  • הצגת כל יישומי הפלאגין של CA שזמינים במכשיר.

    class MediaCas.PluginDescriptor {
      public String getName();
      public int getSystemId();
    }
    static PluginDescriptor[] enumeratePlugins();
    
  • יצירה של מכונת Media CAS למערכת ה-CA שצוינה. המשמעות היא מסגרת CAS של Media יכולה לטפל בכמה מערכות CAS בו-זמנית.

    MediaCas(int CA_system_id);
    MediaCas(@NonNull Context context, int casSystemId,
             @Nullable String tvInputServiceSessionId,
             @PriorityHintUseCaseType int priorityHint);
    
  • רישום event listener ומתן הרשאה לאפליקציה לציין handler נעשה שימוש בלופ.

    interface MediaCas.EventListener {
      void onEvent(MediaCas, int event, int arg, byte[] data);
      void onSessionEvent(@NonNull MediaCas mediaCas, @NonNull Session session, int event, int arg, @Nullable byte[] data);
      void onPluginStatusUpdate(@NonNull MediaCas mediaCas, @PluginStatus int status, int arg);
      void onResourceLost(@NonNull MediaCas mediaCas);
    }
    void setEventListener(MediaCas.EventListener listener, Handler handler);
    
  • שליחת המידע הפרטי למערכת ה-CA. המידע הפרטי יכול להגיע ממתאר ה-CA, מטבלת הגישה המותנית, מחוץ למסגרת. המידע הזה לא משויך לסשן מסוים.

    void setPrivateData(@NonNull byte[] data);
    
  • עיבוד חבילת EMM.

    void processEmm(@NonNull byte[] data, int offset, int length);
    
  • שליחת אירוע למערכת CA. פורמט האירוע הוא ספציפיים לסכמה והם אטומים ל-framework.

    void sendEvent(int event, int arg, @Nullable byte[] data);
    
  • התחלת פעולת הקצאה מהסוג שצוין עבור רשות אישורים המערכת. כשמכשיר נרשם לשירות טלוויזיה בתשלום עבור בפעם הראשונה, הוא צריך להיות מוקצה לשרת ה-CAS קודם. מספקים קבוצת פרמטרים קשורים למכשיר לצורך הקצאה ידנית.

    void provision(String provisionString);
    
  • הפעלה של רענון הרשאות. כשמשתמש נרשם אל ערוץ חדש (לדוגמה, על ידי מענה למודעה או על ידי הוספת ערוץ במדריך התוכניות האלקטרוני (EPG), האפליקציה אמורה להיות מסוגל להורות ללקוחות ה-CA לרענן את מפתחות ההרשאות.

    void refreshEntitlements(int refreshType);
    
  • סגירת האובייקט של Media CAS.

    void close();
    
  • פותחים סשן.

    Session openSession();
    Session openSession(@SessionUsage int sessionUsage, @ScramblingMode int scramblingMode);
    
  • סגירת סשן שפתחתם בעבר.

    void Session#close();
    
  • לספק את המידע הפרטי של קליפורניה ממתאר של CA ב-PMT, מקטע פרטי התוכנית או פרטי ה-ES ועד לסשן של CAS.

    void Session#setPrivateData(@NonNull byte[] sessionId, @NonNull byte[] data);
    
  • מעבדים חבילת ECM לסשן.

    void Session#processEcm(@NonNull byte[] data, int offset, int length);
    
  • מאתרים את מזהה הסשן.

    byte[] Session#getSessionId();
    
  • שליחת אירוע סשן למערכת CA. הפורמט של האירוע הוא ספציפי לסכמה והוא אטום למסגרת.

    void Session#sendSessionEvent(int event, int arg, @Nullable byte[] data);