Medya Kanalları'nı kullanma

Medya parçası; ses veya video akışı nesnesi ya da metin nesnesi (altyazı) olabilir.

GCKMediaTrack nesnesi bir parçayı temsil eder. Benzersiz bir sayısal tanımlayıcı ve içerik kimliği ile başlık gibi diğer özelliklerden oluşur. GCKMediaTrack örneği şu şekilde oluşturulabilir:

Swift
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)
Objective-C
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 öğesinde birden fazla parça olabilir. Örneğin, birden fazla altyazı (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. Bir GCKMediaTrack nesne koleksiyonunu bir medya öğesiyle ilişkilendirmek için uygulamanız mediaTracks özelliğini güncellemelidir. Uygulamanız, medyayı alıcıya yüklemeden önce bu ilişkilendirmeyi yapmalıdır. Örneğin, aşağıdaki kodda olduğu gibi:

Swift
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()
Objective-C
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:] işlevini GCKRemoteMediaClient üzerinde çağırarak ve etkinleştirilecek parçaların kimliklerini ileterek medya öğesiyle ilişkilendirilmiş bir veya daha fazla parçayı etkinleştirin (medya yüklendikten sonra). Örneğin, aşağıdaki kod, yukarıda oluşturulan altyazı parçasını etkinleştirir.

Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
Objective-C
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];

Mevcut medya öğesindeki bir parçayı devre dışı bırakmak için boş bir dizi veya nil ile GCKRemoteMediaClient üzerinde -[setActiveTrackIDs:] öğesini çağırın. Aşağıdaki kod, altyazı parçasını devre dışı bırakır.

Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
Objective-C
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];

Metin parçalarının stilini ayarlama

GCKMediaTextTrackStyle sınıfı, bir metin parçasının stil bilgilerini kapsar. -[GCKRemoteMediaClient setTextTrackStyle] işlevi çağrılarak, şu anda oynatılan medya öğesine bir parça stili uygulanabilir. Aşağıdaki kodda oluşturulan parça stili, metni% 50 opaklıkta (80) kırmızı (FF) yapar ve serif yazı tipi ayarlar.

Swift
let textTrackStyle = GCKMediaTextTrackStyle.createDefault()
textTrackStyle.foregroundColor = GCKColor.init(cssString: "#FF000080")
textTrackStyle.fontFamily = "serif"
styleChangeRequest = sessionManager.currentSession?.remoteMediaClient?.setTextTrackStyle(textTrackStyle)
styleChangeRequest?.delegate = self
Objective-C
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.

Swift
// MARK: - GCKRequestDelegate

func requestDidComplete(_ request: GCKRequest) {
  if request == styleChangeRequest {
    print("Style update completed.")
    styleChangeRequest = nil
  }
}
Objective-C
#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 tarafından sağlanan ayarları veya uygulamanın kendi ayarlarını kullanarak metin parçalarının stilini güncellemesine izin vermelidir. Varsayılan bir stil sağlanır ve bu stil, +[GCKMediaTextTrackStyle createDefault] statik yöntemiyle alınabilir. Aşağıdaki metin parçası stil öğ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 alma

Aynı alıcıya birden fazla gönderen bağlandığında, bu değişiklikler diğer gönderenler tarafından başlatılmış olsa bile her gönderenin alıcıdaki değişikliklerden haberdar olması önemlidir.

Göndereninizin alıcıdan durum güncellemeleri almasını sağlamak için uygulamanızın GCKRemoteMediaClientListener kaydetmesi gerekir. Mevcut medyanın GCKMediaTextTrackStyle değişirse bağlı tüm gönderenlere hem -[remoteMediaClient:didUpdateMediaMetadata:] hem de -[remoteMediaClient:didUpdateMediaStatus:] geri çağırmaları aracılığıyla bildirim gönderilir. Bu durumda, alıcı SDK yeni stilin önceki stilden farklı olup olmadığını doğrulamaz ve bağlı tüm gönderenleri buna bakılmaksızın bilgilendirir. Ancak etkin parçaların listesi güncellenirse yalnızca bağlı gönderenlerdeki -[remoteMediaClient:didUpdateMediaStatus:] bildirilir.

CORS koşullarını 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ı, Parçalar içeriyorsa CORS gerektirir. Parçaları herhangi bir medyada etkinleştirmek istiyorsanız hem parça akışlarınız hem de medya akışlarınız için CORS'u etkinleştirmeniz gerekir. Bu nedenle, sunucunuzdaki basit mp4 medyanız için CORS başlıklarınız yoksa ve ardından basit bir altyazı parçası eklerseniz sunucunuzu uygun CORS başlığını içerecek şekilde güncellemediğiniz sürece medyanızı yayınlayamazsınız. Ayrıca, en azından şu üstbilgilere 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.