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

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

אובייקט GCKMediaTrack מייצג מסלול. הוא מורכב ממזהה מספרי ייחודי וממאפיינים כמו Content ID ו-title. אפשר ליצור מכונה 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. שימו לב ששתי הכותרות האחרונות הן כותרות נוספות שאולי לא הייתם צריכים אותן בעבר.