Medya kanalı, bir ses veya video akışı nesnesi ya da bir metin nesnesi (altyazı) olabilir veya altyazı) ekleyebilirsiniz.
GCKMediaTrack
nesnesi bir parkuru temsil eder. Benzersiz sayısal tanımlayıcıdan ve
içerik kimliği ve başlık gibi özellikleri vardır. GCKMediaTrack
örneği
şu şekilde oluşturulur:
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; birden fazla
Altyazı (her biri farklı bir dilde) veya birden fazla alternatif ses akışı
(farklı diller için).
GCKMediaInformation
bir medya öğesini temsil eden sınıftır. Bir koleksiyonu ilişkilendirmek için
GCKMediaTrack
nesne
bir medya öğesi içeriyorsa uygulamanız
mediaTracks
mülkü. Uygulamanızın yüklenmeden önce bu ilişkilendirmeyi yapması gerekiyor
medyayı alıcıya aşağıdaki kodda olduğu gibi gönderin:
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 kanalı etkinleştirin (
medya dosyası yüklendi) -[setActiveTrackIDs:]
çağrısı yaparak
GCKRemoteMediaClient
etkinleştirilecek parçaların kimliklerini aktarmalıdır. Örneğin,
kodu, yukarıda oluşturulan altyazı parçasını etkinleştirir.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];
Mevcut medya öğesindeki bir parçayı devre dışı bırakmak için şunu arayın:
-[setActiveTrackIDs:]
açık
GCKRemoteMediaClient
boş bir dizi veya nil ile değiştirin. 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
İlgili içeriği oluşturmak için kullanılan
GCKMediaTextTrackStyle
sınıfı, bir metin parçasının stil bilgilerini içerir. Parça stili
çağrısı yapılarak, şu anda oynatılan medya öğesine uygulandı
-[GCKRemoteMediaClient
setTextTrackStyle]
.
Aşağıdaki kodda oluşturulan parça stili, metni% 50 opaklıkta kırmızı (FF) yapar
(80)'i tıklayıp bir serif yazı tipi belirler.
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;
Döndürülen
GCKRequest
nesnesi
takip ediyorum.
// 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; } }
Durum güncellemeleri'ne bakın.
konusuna bakın. Uygulamalar, kullanıcıların metin stilini güncellemesine izin vermelidir
uygulaması sistem veya uygulamanın kendisi tarafından sağlanan ayarları kullanarak izler.
Alınabilen bir varsayılan stil mevcuttur (iOS 7 ve sonraki sürümlerde)
+[GCKMediaTextTrackStyle
createDefault]
statik yöntemiyle test edildi.
Aşağıdaki metin kanalı 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çeklendirme
- Yazı Tipi Ailesi
- Yazı Tipi Stili
Durum güncellemelerini alın
Aynı alıcıya birden fazla göndericinin bağlı olduğu durumlarda alıcıdaki değişikliklerden haberdar olması için diğer gönderenlerden değişiklik başlatıldı.
Göndereninizin, alıcıdan durum güncellemeleri almasını sağlamak için uygulamanız
bir kaydettirmek
GCKRemoteMediaClientListener
.
Öğe
GCKMediaTextTrackStyle
tüm bağlı gönderenlere bildirim gönderilir.
hem
-[remoteMediaClient:didUpdateMediaMetadata:]
ve
-[remoteMediaClient:didUpdateMediaStatus:]
geri arama. Bu durumda,
Alıcı SDK'sı, yeni stilin
ve tüm bağlı gönderenlere bildirim gönderir. Ancak,
etkin parçaların listesi güncellenir, yalnızca
Bağlı gönderenlerdeki -[remoteMediaClient:didUpdateMediaStatus:]
bildirim alır.
CORS şartlarını karşılama
Google Cast, uyarlanabilir medya akışı için CORS başlıklarının olmasını gerektirir. Ancak, Parçalar içeren basit mp4 medya akışları bile CORS'a ihtiyaç duyar. Şu durumda: herhangi bir medya için Track'leri etkinleştirmek istiyorsanız her iki kanalınız için de CORS'yi akışlarınız ve medya akışlarınız. CORS başlıkları yoksa, basit mp4 medyanız için oluşturuyor ve daha sonra, basit bir altyazı takip ederseniz, sunucunuzu güncellemediğiniz sürece ifadesini ekleyin. Ayrıca, son 30 güne ait şu üstbilgileri kullanabilirsiniz: Content-Type, Accept-Encoding ve Range. Lütfen son iki üstbilgi daha önce ihtiyaç duymadığınız ek başlıklardır.