یک آهنگ رسانه می تواند یک شی جریان صوتی یا تصویری یا یک شیء متنی (زیرنویس یا عنوان) باشد.
یک شی 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) تبدیل می کند و یک فونت سریف تنظیم می کند.
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; } }
برای اطلاعات بیشتر ، بهروزرسانیهای وضعیت را در زیر ببینید. برنامه ها باید به کاربران اجازه دهند تا سبک آهنگ های متنی را با استفاده از تنظیمات ارائه شده توسط سیستم یا خود برنامه به روز کنند. یک سبک پیشفرض ارائه شده است (در 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. توجه داشته باشید که دو هدر آخر هدرهای اضافی هستند که ممکن است قبلاً به آنها نیاز نداشته باشید.