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

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

אובייקט GCKMediaTrack מייצג רצועה. הוא מורכב ממזהה מספרי ייחודי וממאפיינים אחרים, כמו מזהה תוכן ושם. אפשר ליצור מופע של 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)
Objective-C
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()
Objective-C
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])
Objective-C
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];

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

Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
Objective-C
[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
Objective-C
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
  }
}
Objective-C
#pragma mark - GCKRequestDelegate

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

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

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

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

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

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

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

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