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