טראק של מדיה יכול להיות אובייקט של זרם אודיו או וידאו, או אובייקט טקסט (כתוביות).
אובייקט GCKMediaTrack
מייצג מסלול. הוא מורכב ממזהה מספרי ייחודי וממאפיינים
כמו Content ID ו-title. אפשר ליצור מכונה GCKMediaTrack
באופן הבא:
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
שלה. האפליקציה צריכה לבצע את השיוך הזה לפני שהיא טוענת את המדיה למקלט, באופן הבא:
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
והעברת המזהים של טראקים אלה להפעלה. לדוגמה, הקוד הבא מפעיל את רצועת הכתוביות שנוצרה למעלה.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];
כדי להשבית טראק בפריט המדיה הנוכחי, צריך להפעיל את -[setActiveTrackIDs:]
במכשיר GCKRemoteMediaClient
עם מערך ריק או עם אפס. הקוד הבא משבית את רצועת הכתוביות.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];
עיצוב רצועות טקסט
המחלקה GCKMediaTextTrackStyle
כוללת את פרטי הסגנון של טראק טקסט. אפשר להחיל סגנון טראק על פריט המדיה שפועל כרגע באמצעות קריאה ל--[GCKRemoteMediaClient
setTextTrackStyle]
.
סגנון הטראק שנוצר בקוד שבהמשך הופך את הטקסט לאדום (FF) באטימות של 50% (80) ומגדיר גופן serif.
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
שהוחזר כדי לעקוב אחרי הבקשה.
// 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. שימו לב ששתי הכותרות האחרונות הן כותרות נוספות שאולי לא הייתם צריכים אותן בעבר.