قطعه رسانه میتواند یک شیء جاریسازی صوتی یا ویدیویی، یا یک شیء نوشتاری (زیرنویس یا زیرنویس ناشنوایان) باشد.
یک شیء 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
با آرایه خالی یا nil فراخوانی کنید. کد زیر قطعه زیرنویس ناشنوایان را غیرفعال میکند.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];
سبکبندی قطعههای نوشتار
کلاس
GCKMediaTextTrackStyle
اطلاعات سبک قطعه نوشتاری را دربرمیگیرد. سبک قطعه را میتوان با فراخوانی -[GCKRemoteMediaClient
setTextTrackStyle] روی عنصر رسانهای درحال پخش اعمال کرد.
سبک قطعه ایجادشده در کد زیر نوشتار را در کدورت ۵۰٪ (۸۰) قرمز (FF) میکند و قلم سنسریف تنظیم میکند.
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:] پاسخبرگ مطلع خواهند شد. در این مورد، «کیت توسعه نرمافزار گیرنده» بررسی نمیکند که آیا سبک جدید با سبک قبلی متفاوت است یا نه و درهرصورت به همه فرستندههای متصل اطلاع میدهد. بااینحال، اگر فهرست دستههای هدف فعال بهروز شود، فقط -[remoteMediaClient:didUpdateMediaStatus:] در فرستندگان متصل مطلع خواهند شد.
الزامات CORS را برآورده کنید
برای جاریسازی رسانه تطبیقی، Google Cast به وجود سرایندهای CORS نیاز دارد، اما حتی جاریسازیهای رسانه mp4 ساده نیز اگر شامل «قطعهها» باشند به CORS نیاز دارند. اگر میخواهید «دستهها» را برای هر رسانهای فعال کنید، باید CORS را هم برای جاریسازیهای دسته و هم برای جاریسازیهای رسانه فعال کنید. بنابراین، اگر سرصفحههای CORS برای رسانه mp4 ساده خود در سرورتان دردسترس ندارید و سپس یک قطعه زیرنویس ساده اضافه میکنید، نمیتوانید رسانهتان را جاریسازی کنید، مگر اینکه سرورتان را بهروزرسانی کنید تا سرصفحه CORS مناسب را اضافه کند. علاوهبراین، باید حداقل سرصفحههای زیر را مجاز کنید: Content-Type، Accept-Encoding، و Range. توجه داشته باشید که دو سرصفحه آخر، سرصفحههای اضافی هستند که ممکن است قبلاً به آنها نیاز نداشتهاید.