Medya Kanalları'nı kullanma

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:

Hızlıca
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 öğ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:

Hızlıca
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];

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.

Hızlıca
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
Objective-C
[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.

Hızlıca
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
Objective-C
[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.

Hızlıca
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.

Hızlıca
// 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 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.