يمكن أن يكون مسار الوسائط عبارة عن عنصر بث صوتي أو فيديو، أو عنصر نصي (ترجمة وشرح).
يمثّل عنصر 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];
فعِّل مسارًا واحدًا أو أكثر مرتبطًا بعنصر الوسائط (بعد تحميل الوسائط) من خلال استدعاء -[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; } }
يمكنك الاطّلاع على آخر الأخبار
أدناه للحصول على مزيد من المعلومات. يجب أن تسمح التطبيقات للمستخدمين بتعديل نمط مقاطع الفيديو التي تتضمّن نصًا، إما باستخدام الإعدادات التي يوفّرها النظام أو من خلال التطبيق نفسه.
يتوفّر نمط تلقائي يمكن استرداده باستخدام الطريقة الثابتة +[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. يُرجى العِلم أنّ العنوانَين الأخيرَين هما عنوانان إضافيان قد لا تكون بحاجة إليهما سابقًا.