Medya Kanallarını Kullanma

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:

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)
Amaç 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 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:

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()
Amaç 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];

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.

Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
Amaç C
[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.

Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
Amaç 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 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.

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