Medya parçası, bir ses veya video akışı nesnesi ya da metin nesnesi (altyazı) olabilir.
GCKMediaTrack
nesnesi bir parkuru temsil eder. Benzersiz bir sayısal tanımlayıcının yanı sıra Content ID ve başlık gibi diğer özelliklerden oluşur. GCKMediaTrack
örneği aşağıdaki şekilde 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 parçası olabilir. Örneğin, birden fazla altyazısı (her biri farklı bir dil için) veya birden fazla alternatif ses akışı (farklı diller için) olabilir.
GCKMediaInformation
, medya öğesini temsil eden sınıftır. Bir GCKMediaTrack
nesne koleksiyonunu bir medya öğesiyle ilişkilendirmek için uygulamanızın mediaTracks
özelliğini güncellemesi gerekir. Uygulamanızın, medyayı alıcıya yüklemeden önce bu ilişkilendirmeyi aşağıdaki kodda olduğu gibi 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];
Medya öğesiyle ilişkilendirilmiş bir veya daha fazla parçayı, GCKRemoteMediaClient
üzerinde -[setActiveTrackIDs:]
çağrısı yaparak ve etkinleştirilecek parçaların kimliklerini ileterek (medya yüklendikten sonra) 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]];
Geçerli medya öğesinde bir parçayı devre dışı bırakmak için boş bir dizi veya nil ile GCKRemoteMediaClient
üzerinde -[setActiveTrackIDs:]
yöntemini çağırı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ı için stil oluşturma
GCKMediaTextTrackStyle
sınıfı, bir metin parçasının stil bilgilerini içerir. Şu anda oynatılan medya öğesine -[GCKRemoteMediaClient
setTextTrackStyle]
çağrısı yapılarak bir izleme stili uygulanabilir.
Aşağıdaki kodda oluşturulan izleme stili, %50 opaklıkta (80) metni kırmızıya (FF)
dönüştürür ve serif yazı tipi 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 sistem veya uygulamanın kendisi tarafından sağlanan ayarları kullanarak metin parçalarının stilini güncellemesine izin vermelidir.
Sağlanan varsayılan stil (iOS 7 ve sonraki sürümlerde) vardır. Bu stil, +[GCKMediaTextTrackStyle
createDefault]
statik yöntemiyle alınabilir.
Aşağıdaki metin izleme stili öğeleri değiştirilebilir:
- Ön plan (metin) rengi ve opaklığı
- Arka plan rengi ve şeffaflık
- Kenar türü
- Kenar Rengi
- Yazı Tipi Ölçeği
- Yazı Tipi Ailesi
- Yazı Tipi Stili
Durum güncellemelerini alın
Birden fazla gönderici aynı alıcıya bağlandığında, değişiklikler diğer gönderenlerden gelmiş olsa bile her gönderenin alıcıdaki değişikliklerden haberdar olması önemlidir.
Göndereninizin, alıcıdan durum güncellemeleri aldığından emin olmak için uygulamanızın bir GCKRemoteMediaClientListener
kaydetmesi gerekir.
Mevcut medya öğesinin GCKMediaTextTrackStyle
değeri değişirse bağlı gönderenlerin tümü hem -[remoteMediaClient:didUpdateMediaMetadata:]
hem de -[remoteMediaClient:didUpdateMediaStatus:]
geri çağırmalarıyla bilgilendirilir. Bu durumda Alıcı SDK'sı, yeni stilin önceki stilinden farklı olup olmadığını doğrulamaz ve ne olursa olsun bağlı tüm 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 gerektirir. Herhangi bir medya için Parçalar'ı etkinleştirmek istiyorsanız hem izleme akışlarınız hem de medya akışlarınız için CORS'yi etkinleştirmeniz gerekir. Dolayısıyla, sunucunuzda basit mp4 medyanız için CORS başlıkları yoksa ve daha sonra, basit bir altyazı parçası eklerseniz sunucunuzu uygun CORS başlığını içerecek şekilde güncellemediğiniz sürece medya akışı yapamazsınız. Ayrıca, en azından şu başlıklara izin vermeniz gerekir: Content-Type, Accept-Encoding ve Range. Son iki başlığın, daha önce ihtiyaç duymamış olabileceğiniz ek başlıklar olduğunu unutmayın.