Medya parçaları, ses veya video akışı nesnesi ya da metin nesnesi (altyazı) olabilir.
GCKMediaTrack
nesnesi bir kanalı temsil eder. Benzersiz bir sayısal tanımlayıcıdan ve Content ID, başlık gibi diğer özelliklerden oluşur. GCKMediaTrack
örneği aşağıdaki gibi oluşturulabilir:
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];
Bir medya öğesinin birden fazla kanalı olabilir. Örneğin, bir reklam öğesinin birden fazla altyazısı (her biri farklı bir dil için) veya birden fazla alternatif ses akışı (farklı diller için) olabilir.
GCKMediaInformation
bir medya öğesini temsil eden sınıftır. Uygulamanız, GCKMediaTrack
nesnelerinden oluşan bir koleksiyonu bir medya öğesiyle ilişkilendirmek için mediaTracks
özelliğini güncellemelidir. Uygulamanızın, medyayı alıcıya yüklemeden önce aşağıdaki kodda olduğu gibi bu ilişkilendirmeyi yapması gerekir:
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];
GCKRemoteMediaClient
tarihinde -[setActiveTrackIDs:]
öğesini çağırıp etkinleştirilecek kanalların kimliklerini ileterek (medya yüklendikten sonra) medya öğesiyle ilişkilendirilmiş bir veya daha fazla kanalı etkinleştirin. Örneğin, aşağıdaki kod yukarıda oluşturulan altyazı parçasını etkinleştirir.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];
Mevcut medya öğesinde bir parçayı devre dışı bırakmak için
GCKRemoteMediaClient
kanalında boş dizi veya sıfır ile -[setActiveTrackIDs:]
arayın. Aşağıdaki kod, altyazı parçasını devre dışı bırakır.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];
Metin parçalarının stilini ayarlama
GCKMediaTextTrackStyle
sınıfı, bir metin parçasının stil bilgilerini içerir. -[GCKRemoteMediaClient
setTextTrackStyle]
çağırılarak o anda oynatılan medya öğesine izleme stili uygulanabilir.
Aşağıdaki kodda oluşturulan kanal stili, %50 opaklıkta (80) kırmızı (FF) metni ve
bir yazı tipini ayarlar.
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;
Bu isteği izlemek için döndürülen GCKRequest
nesnesini kullanabilirsiniz.
// 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; } }
Daha fazla bilgi için aşağıdaki Durum güncellemeleri bölümüne bakın. Uygulamalar, kullanıcıların metin parçalarının stilini
sistem tarafından veya uygulamanın kendisi tarafından sağlanan ayarları kullanarak güncellemesine izin vermelidir.
iOS 7 ve sonraki sürümlerde sağlanan ve +[GCKMediaTextTrackStyle
createDefault]
statik yöntemiyle alınabilecek bir varsayılan stil mevcuttur.
Aşağıdaki metin izleme stili öğeleri değiştirilebilir:
- Ön plan rengi (metin) ve opaklık
- Arka plan rengi ve şeffaflık
- Kenar türü
- Kenar Rengi
- Yazı Tipi Ölçeki
- Yazı Tipi Ailesi
- Yazı Tipi Stili
Durum güncellemelerini al
Aynı alıcıya birden fazla gönderici bağlandığında, bu değişiklikler diğer gönderenlerden başlatılmış olsa bile her gönderenin alıcıdaki değişikliklerden haberdar olması önemlidir.
Gönderenin, durum güncellemelerini alıcıdan aldığından emin olmak için uygulamanızın bir GCKRemoteMediaClientListener
kaydetmesi gerekir.
Mevcut medyanın GCKMediaTextTrackStyle
değişirse bağlı tüm gönderenler hem -[remoteMediaClient:didUpdateMediaMetadata:]
hem de -[remoteMediaClient:didUpdateMediaStatus:]
geri çağırmaları aracılığıyla bilgilendirilir. Bu durumda, Alıcı SDK'sı yeni stilin öncekinden farklı olup olmadığını doğrulamaz ve tüm bağlı gönderenleri bilgilendirir. Bununla birlikte, etkin kanalların listesi güncellenirse yalnızca bağlı gönderenlerdeki -[remoteMediaClient:didUpdateMediaStatus:]
bilgilendirilir.
CORS gereksinimlerini karşılayın
Google Cast, uyarlanabilir medya akışı için CORS başlıklarının bulunmasını gerektirir, ancak basit mp4 medya akışları bile Parçaları içeriyorsa CORS'u gerektirir. Herhangi bir medyada İzlemeleri etkinleştirmek isterseniz hem kanal yayınlarınız hem de medya yayınlarınız için CORS'yi etkinleştirmeniz gerekir. Sunucunuzdaki basit mp4 medyanız için CORS başlıkları yoksa ve basit bir altyazı parçası eklerseniz sunucunuzu uygun CORS başlığını içerecek şekilde güncellemediğiniz sürece medya akışını gerçekleştiremezsiniz. Ayrıca, en az şu başlıklara izin vermeniz gerekir: İçerik Türü, Kabul Kodlama ve Aralık. Son iki başlığın daha önce ihtiyacınız olmayabilecek ek başlıklar olduğunu unutmayın.