Medya Kanalları'nı kullanma

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:

Swift
ziyaret edin.
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)
Hedef-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; 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:

Swift
ziyaret edin.
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()
Hedef-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 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.

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

Swift
ziyaret edin.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
Hedef-C
[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.

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

Döndürülen GCKRequest nesnesi takip ediyorum.

Swift
ziyaret edin.
// MARK: - GCKRequestDelegate

func requestDidComplete(_ request: GCKRequest) {
  if request == styleChangeRequest {
    print("Style update completed.")
    styleChangeRequest = nil
  }
}
Hedef-C
#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.