استفاده از آهنگ های رسانه ای

یک آهنگ رسانه می تواند یک شی جریان صوتی یا تصویری یا یک شیء متنی (زیرنویس یا عنوان) باشد.

یک شی 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)
هدف-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 خود را به روز کند. برنامه شما باید قبل از بارگیری رسانه در گیرنده، مانند کد زیر، این ارتباط را ایجاد کند:

سویفت
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()
هدف-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 و ارسال شناسه‌های تراک‌هایی که باید فعال شوند، یک یا چند آهنگ مرتبط با آیتم رسانه را (پس از بارگیری رسانه) فعال کنید. به عنوان مثال، کد زیر آهنگ زیرنویس ایجاد شده در بالا را فعال می کند.

سویفت
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
هدف-C
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];

برای غیرفعال کردن یک آهنگ در مورد رسانه فعلی، -[setActiveTrackIDs:] را در GCKRemoteMediaClient با یک آرایه خالی یا صفر تماس بگیرید. کد زیر مسیر زیرنویس ها را غیرفعال می کند.

سویفت
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
هدف-C
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];

سبک آهنگ های متنی

کلاس GCKMediaTextTrackStyle اطلاعات سبک یک آهنگ متنی را کپسوله می کند. با فراخوانی -[GCKRemoteMediaClient setTextTrackStyle] می توان یک سبک آهنگ را برای آیتم رسانه ای در حال پخش اعمال کرد. سبک آهنگ ایجاد شده در کد زیر متن را به رنگ قرمز (FF) با کدورت 50٪ (80) تبدیل می کند و یک فونت سریف تنظیم می کند.

سویفت
let textTrackStyle = GCKMediaTextTrackStyle.createDefault()
textTrackStyle.foregroundColor = GCKColor.init(cssString: "#FF000080")
textTrackStyle.fontFamily = "serif"
styleChangeRequest = sessionManager.currentSession?.remoteMediaClient?.setTextTrackStyle(textTrackStyle)
styleChangeRequest?.delegate = self
هدف-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 برگشتی برای ردیابی این درخواست استفاده کنید.

سویفت
// MARK: - GCKRequestDelegate

func requestDidComplete(_ request: GCKRequest) {
  if request == styleChangeRequest {
    print("Style update completed.")
    styleChangeRequest = nil
  }
}
هدف-C
#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:] مطلع خواهند شد. در این حالت، Receiver SDK بررسی نمی‌کند که آیا سبک جدید با سبک قبلی متفاوت است یا خیر و بدون در نظر گرفتن این موضوع به همه فرستنده‌های متصل اطلاع می‌دهد. با این حال، اگر لیست آهنگ‌های فعال به‌روزرسانی شود، فقط -[remoteMediaClient:didUpdateMediaStatus:] در فرستنده‌های متصل مطلع می‌شود.

الزامات CORS را برآورده کنید

برای پخش جریانی رسانه تطبیقی، Google Cast به وجود سرصفحه‌های CORS نیاز دارد، اما حتی جریان‌های رسانه mp4 ساده نیز اگر شامل Tracks باشند، به CORS نیاز دارند. اگر می‌خواهید آهنگ‌ها را برای هر رسانه‌ای فعال کنید، باید CORS را هم برای جریان‌های آهنگ و هم برای پخش‌های رسانه‌ای فعال کنید. بنابراین، اگر هدرهای CORS را برای رسانه mp4 ساده خود روی سرور خود ندارید، و سپس یک آهنگ زیرنویس ساده اضافه می‌کنید، نمی‌توانید رسانه خود را پخش کنید، مگر اینکه سرور خود را به‌روزرسانی کنید تا هدر CORS مناسب را درج کند. علاوه بر این، باید حداقل هدرهای زیر را مجاز کنید: Content-Type، Accept-Encoding و Range. توجه داشته باشید که دو هدر آخر هدرهای اضافی هستند که ممکن است قبلاً به آنها نیاز نداشته باشید.