שימוש ברצועות מדיה

טראק של מדיה יכול להיות אובייקט של שידור אודיו או וידאו, או אובייקט טקסט (כתוביות או כיתובים).

GCKMediaTrack מייצג מסלול. הוא מורכב ממזהה מספרי ייחודי כגון Content ID ושם פריט. מופע GCKMediaTrack יכול להיות נוצרה באופן הבא:

Swift
let captionsTrack = GCKMediaTrack.init(identifier: 1,
                                       contentIdentifier: "https://some-url/caption_en.vtt",
                                       contentType: "text/vtt",
                                       type: GCKMediaTrackType.text,
                                       textSubtype: GCKMediaTextTrackSubtype.captions,
                                       name: "English Captions",
                                       languageCode: "en",
                                       customData: nil)
יעד ג'
GCKMediaTrack *captionsTrack =
      [[GCKMediaTrack alloc] initWithIdentifier:1
                              contentIdentifier:@"https://some-url/caption_en.vtt"
                                    contentType:@"text/vtt"
                                           type:GCKMediaTrackTypeText
                                    textSubtype:GCKMediaTextTrackSubtypeCaptions
                                           name:@"English Captions"
                                   languageCode:@"en"
                                     customData:nil];

פריט מדיה יכול לכלול מספר טראקים. לדוגמה, יכולים להיות בו כמה כתוביות (כל אחת בשפה אחרת) או מספר שידורי אודיו חלופיים (בשפות שונות). GCKMediaInformation הוא המחלקה שמייצגת פריט מדיה. כדי לשייך אוסף של GCKMediaTrack אובייקטים עם פריט מדיה, האפליקציה שלך אמורה לעדכן את נכס mediaTracks. האפליקציה שלך צריכה לבצע את השיוך הזה כדי שהיא תיטען את המדיה למקלט, כמו בקוד הבא:

Swift
let tracks = [captionsTrack]

let url = URL.init(string: "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4")
guard let mediaURL = url else {
  print("invalid mediaURL")
  return
}

let mediaInfoBuilder = GCKMediaInformationBuilder.init(contentURL: mediaURL)
mediaInfoBuilder.streamType = GCKMediaStreamType.none;
mediaInfoBuilder.contentType = "video/mp4"
mediaInfoBuilder.metadata = metadata;
mediaInfoBuilder.mediaTracks = tracks;
mediaInformation = mediaInfoBuilder.build()
יעד ג'
NSArray *tracks = @[captionsTrack];

GCKMediaInformationBuilder *mediaInfoBuilder =
  [[GCKMediaInformationBuilder alloc] initWithContentURL:
   [NSURL URLWithString:@"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"]];
mediaInfoBuilder.streamType = GCKMediaStreamTypeNone;
mediaInfoBuilder.contentType = @"video/mp4";
mediaInfoBuilder.metadata = metadata;
mediaInfoBuilder.mediaTracks = tracks;
self.mediaInformation = [mediaInfoBuilder build];

מפעילים טראק אחד או יותר ששויכו לפריט המדיה (לאחר המדיה נטענה) על ידי הפעלה של -[setActiveTrackIDs:] במכשיר GCKRemoteMediaClient והעברת המזהים של המסלולים להפעלה. לדוגמה, מפעיל את רצועת הכתוביות שנוצרה למעלה.

Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
יעד ג'
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];

כדי להשבית טראק בפריט המדיה הנוכחי, צריך להתקשר -[setActiveTrackIDs:] במצב פעיל GCKRemoteMediaClient עם מערך ריק או אפס. הקוד הבא משבית את רצועת הכתוביות.

Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
יעד ג'
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];

עיצוב טראקים של טקסט

GCKMediaTextTrackStyle כולל את נתוני הסגנון של טראק הטקסט. סגנון טראק יכול להיות מוחל על פריט המדיה המופעל כרגע באמצעות קריאה -[GCKRemoteMediaClient setTextTrackStyle] סגנון הטראק שנוצר בקוד שבהמשך משנה את הטקסט לאדום (FF) באטימות של 50% (80) ומגדיר גופן serif.

Swift
let textTrackStyle = GCKMediaTextTrackStyle.createDefault()
textTrackStyle.foregroundColor = GCKColor.init(cssString: "#FF000080")
textTrackStyle.fontFamily = "serif"
styleChangeRequest = sessionManager.currentSession?.remoteMediaClient?.setTextTrackStyle(textTrackStyle)
styleChangeRequest?.delegate = self
יעד ג'
GCKMediaTextTrackStyle *textTrackStyle = [GCKMediaTextTrackStyle createDefault];
[textTrackStyle setForegroundColor:[[GCKColor alloc] initWithCSSString:@"#FF000080"]];
[textTrackStyle setFontFamily:@"serif"];
self.styleChangeRequest = [self.sessionManager.currentSession.remoteMediaClient setTextTrackStyle:textTrackStyle];
self.styleChangeRequest.delegate = self;

אפשר להשתמש בנתונים שהוחזרו אובייקט GCKRequest עבור מעקב אחרי הבקשה הזו.

Swift
// MARK: - GCKRequestDelegate

func requestDidComplete(_ request: GCKRequest) {
  if request == styleChangeRequest {
    print("Style update completed.")
    styleChangeRequest = nil
  }
}
יעד ג'
#pragma mark - GCKRequestDelegate

- (void)requestDidComplete:(GCKRequest *)request {
  if (request == self.styleChangeRequest) {
    NSLog(@"Style update completed.");
    self.styleChangeRequest = nil;
  }
}

עדכוני סטטוס לקבלת מידע נוסף. צריך לאפשר למשתמשים לעדכן את סגנון הטקסט באפליקציות באמצעות ההגדרות שסופקו על ידי המערכת או האפליקציה עצמה. קיים סגנון ברירת מחדל (ב-iOS 7 ואילך), שניתן לאחזר באמצעות השיטה הסטטית +[GCKMediaTextTrackStyle createDefault]. ניתן לשנות את רכיבי הסגנון הבאים של רצועת טקסט:

  • צבע ושקיפות החזית (טקסט)
  • צבע ושקיפות הרקע
  • סוג קצה
  • צבע הקצה
  • גודל הגופנים
  • משפחת גופנים
  • סגנון הגופן

קבלת עדכוני סטטוס

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

כדי לוודא שהשולח מקבל עדכוני סטטוס מהמקבל, האפליקציה שלך צריכה לרשום GCKRemoteMediaClientListener אם GCKMediaTextTrackStyle השינויים הנוכחיים במדיה, אז כל השולחים המחוברים יקבלו הודעה באמצעות -[remoteMediaClient:didUpdateMediaMetadata:] וגם -[remoteMediaClient:didUpdateMediaStatus:] התקשרות חזרה. במקרה הזה, הפרמטר ה-SDK של המקבל לא בודק אם הסגנון החדש שונה הקודם, ושולח הודעה לכל השולחים המחוברים ללא קשר. אם, לעומת זאת, רשימת המסלולים הפעילים מתעדכנת, רק -[remoteMediaClient:didUpdateMediaStatus:] אצל השולחים המחוברים יהיו נשלחה הודעה.

לעמוד בדרישות CORS

עבור סטרימינג של מדיה אדפטיבי, ל-Google Cast נדרשת נוכחות של כותרות CORS, אבל גם שידורי מדיה פשוטים בפורמט mp4 דורשים CORS אם הם כוללים טראקים. אם אם רוצים להפעיל טראקים לכל סוג מדיה, צריך להפעיל CORS בשני הטראקים הסטרימינג והזרמי מדיה. אז אם אין לכם כותרות CORS זמינות למדיה פשוטה בפורמט mp4 בשרת שלך, ולאחר מכן מוסיפים כותרת משנה פשוטה אין אפשרות לשדר את המדיה, אלא אם מעדכנים את השרת כדי לכלול את כותרת ה-CORS המתאימה. בנוסף, עליך לאפשר לפחות הכותרות הבאות: Content-Type , Accept-Encoding ו- Range (טווח). שימו לב שתי הכותרות האחרונות הן כותרות נוספות שייתכן שלא היה לך צורך בהן בעבר.