استخدام مسارات الوسائط

يمكن أن يكون مسار الوسائط عبارة عن عنصر بث صوتي أو فيديو، أو عنصر نصي (ترجمة وشرح).

يمثّل عنصر 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 باستخدام مصفوفة فارغة أو قيمة فارغة. يؤدي الرمز البرمجي التالي إلى إيقاف مسار الترجمة والشرح.

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;
  }
}

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