मीडिया ट्रैक, ऑडियो या वीडियो स्ट्रीम ऑब्जेक्ट या टेक्स्ट ऑब्जेक्ट (सबटाइटल या कैप्शन) हो सकता है.
GCKMediaTrack ऑब्जेक्ट, ट्रैक के बारे में बताता है. इसमें यूनीक नंबर वाला आइडेंटिफ़ायर और अन्य एट्रिब्यूट शामिल होते हैं. जैसे, कॉन्टेंट आईडी और टाइटल. 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];
मीडिया आइटम लोड होने के बाद, उससे जुड़े एक या उससे ज़्यादा ट्रैक चालू करें. इसके लिए, GCKRemoteMediaClient पर -[setActiveTrackIDs:] को कॉल करें और चालू किए जाने वाले ट्रैक के आईडी पास करें. उदाहरण के लिए, यहां दिया गया कोड, ऊपर बनाई गई कैप्शन ट्रैक को चालू करता है.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];
मौजूदा मीडिया आइटम पर किसी ट्रैक को बंद करने के लिए, GCKRemoteMediaClient पर -[setActiveTrackIDs:] को कॉल करें. इसके लिए, खाली कलेक्शन या शून्य का इस्तेमाल करें. नीचे दिया गया कोड, कैप्शन ट्रैक को बंद करता है.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];
टेक्स्ट ट्रैक को स्टाइल करना
GCKMediaTextTrackStyle क्लास, टेक्स्ट ट्रैक की स्टाइल की जानकारी को इनकैप्सुलेट करती है. -[GCKRemoteMediaClient
setTextTrackStyle] को कॉल करके, फ़िलहाल चल रहे मीडिया आइटम पर ट्रैक स्टाइल लागू की जा सकती है.
नीचे दिए गए कोड में बनाया गया ट्रैक स्टाइल, 50% ओपैसिटी (80) पर टेक्स्ट को लाल (FF) कर देता है और सेरिफ़ फ़ॉन्ट सेट करता है.
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; } }
ज़्यादा जानकारी के लिए, नीचे स्टेटस अपडेट देखें. ऐप्लिकेशन में, लोगों को टेक्स्ट ट्रैक की स्टाइल अपडेट करने की सुविधा मिलनी चाहिए. इसके लिए, वे सिस्टम की दी गई सेटिंग या ऐप्लिकेशन की सेटिंग का इस्तेमाल कर सकते हैं.
डिफ़ॉल्ट स्टाइल उपलब्ध कराई जाती है. इसे स्टैटिक मेथड +[GCKMediaTextTrackStyle
createDefault] के ज़रिए वापस पाया जा सकता है.
टेक्स्ट ट्रैक के स्टाइल एलिमेंट में ये बदलाव किए जा सकते हैं:
- फ़ोरग्राउंड (टेक्स्ट) का रंग और अपारदर्शिता
- बैकग्राउंड का रंग और अपारदर्शिता
- किनारे का प्रकार
- किनारे का रंग
- फ़ॉन्ट का स्केल
- फ़ॉन्ट परिवार
- फ़ॉन्ट स्टाइल
स्टेटस अपडेट पाना
जब एक ही ईमेल पते पर कई ईमेल पते कनेक्ट होते हैं, तो हर ईमेल पते को यह पता होना चाहिए कि ईमेल पते पर क्या बदलाव हुए हैं. भले ही, वे बदलाव किसी दूसरे ईमेल पते से किए गए हों.
यह पक्का करने के लिए कि ईमेल भेजने वाले व्यक्ति को, ईमेल पाने वाले व्यक्ति से स्टेटस अपडेट मिले, आपके ऐप्लिकेशन को GCKRemoteMediaClientListener रजिस्टर करना चाहिए.
अगर मौजूदा मीडिया का
GCKMediaTextTrackStyle
बदलता है, तो कनेक्ट किए गए सभी सेंडर को इसकी सूचना दी जाएगी. यह सूचना, -[remoteMediaClient:didUpdateMediaMetadata:] और -[remoteMediaClient:didUpdateMediaStatus:] दोनों कॉलबैक के ज़रिए दी जाएगी. इस मामले में, Receiver SDK यह पुष्टि नहीं करता कि नई स्टाइल, पिछली स्टाइल से अलग है या नहीं. साथ ही, यह सभी कनेक्ट किए गए सेंडर को सूचना देता है. हालांकि, अगर ऐक्टिव ट्रैक की सूची अपडेट की जाती है, तो कनेक्ट किए गए ईमेल पतों को सिर्फ़ -[remoteMediaClient:didUpdateMediaStatus:] के बारे में सूचना दी जाएगी.
सीओआरएस से जुड़ी ज़रूरी शर्तें पूरी करना
अनुकूलित मीडिया स्ट्रीमिंग के लिए, Google Cast को सीओआरएस हेडर की ज़रूरत होती है. हालांकि, अगर सामान्य mp4 मीडिया स्ट्रीम में ट्रैक शामिल हैं, तो उनके लिए भी सीओआरएस की ज़रूरत होती है. अगर आपको किसी मीडिया के लिए ट्रैक चालू करने हैं, तो आपको अपनी ट्रैक स्ट्रीम और मीडिया स्ट्रीम, दोनों के लिए सीओआरएस चालू करना होगा. इसलिए, अगर आपके सर्वर पर मौजूद सामान्य mp4 मीडिया के लिए सीओआरएस हेडर उपलब्ध नहीं हैं और फिर आपने सामान्य सबटाइटल ट्रैक जोड़ा है, तो आपको अपना मीडिया स्ट्रीम करने की अनुमति नहीं मिलेगी. ऐसा तब तक होगा, जब तक आप अपने सर्वर को अपडेट करके उसमें सही सीओआरएस हेडर शामिल नहीं कर लेते. इसके अलावा, आपको कम से कम इन हेडर को अनुमति देनी होगी: Content-Type, Accept-Encoding, और Range. ध्यान दें कि आखिरी दो हेडर ऐसे अतिरिक्त हेडर हैं जिनकी आपको पहले ज़रूरत नहीं पड़ी होगी.