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

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

GCKMediaTrack مسارًا. وهو يتألف من مُعرّف رقمي فريد مثل Content ID والعنوان. يمكن أن يكون مثيل 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)
الهدف-ج
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()
الهدف-ج
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])
الهدف-ج
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];

لإيقاف مقطع صوتي في ملف الوسائط الحالي، يُرجى الاتصال خيار "-[setActiveTrackIDs:]" مفعَّل GCKRemoteMediaClient بصفيف فارغ أو مع عدم وجود. تُوقف الرمز التالي مسار الترجمة والشرح.

Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
الهدف-ج
[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
الهدف-ج
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
  }
}
الهدف-ج
#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. لاحظ أن الرأسان الأخيران هما رؤوس إضافية ربما لم تكن بحاجة إليها من قبل.