Menggunakan Trek Media

Trek media dapat berupa objek streaming video atau audio, atau objek teks (subtitel atau teks).

Objek GCKMediaTrack mewakili jalur. Atribut ini terdiri dari ID numerik unik dan atribut lain seperti ID konten dan judul. Instance GCKMediaTrack dapat dibuat sebagai berikut:

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];

Item media dapat memiliki beberapa trek; misalnya, item tersebut dapat memiliki beberapa subtitel (masing-masing untuk bahasa yang berbeda) atau beberapa streaming audio alternatif (untuk bahasa yang berbeda). GCKMediaInformation adalah class yang mewakili item media. Untuk mengaitkan kumpulan objek GCKMediaTrack dengan item media, aplikasi Anda harus memperbarui properti mediaTracks-nya. Aplikasi Anda harus membuat pengaitan ini sebelum memuat media ke penerima, seperti pada kode berikut:

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];

Aktifkan satu atau beberapa jalur yang terkait dengan item media (setelah media dimuat) dengan memanggil -[setActiveTrackIDs:] pada GCKRemoteMediaClient dan meneruskan ID jalur yang akan diaktifkan. Misalnya, kode berikut mengaktifkan trek teks yang dibuat di atas.

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

Untuk menonaktifkan jalur pada item media saat ini, panggil -[setActiveTrackIDs:] pada GCKRemoteMediaClient dengan array kosong atau nol. Kode berikut menonaktifkan trek teks.

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

Menata gaya trek teks

Class GCKMediaTextTrackStyle mengenkapsulasi informasi gaya trek teks. Gaya trek dapat diterapkan pada item media yang sedang diputar dengan memanggil -[GCKRemoteMediaClient setTextTrackStyle]. Gaya trek yang dibuat dalam kode di bawah mengubah teks menjadi merah (FF) dengan opasitas 50% (80) dan menyetel font serif.

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;

Anda dapat menggunakan objek GCKRequest yang ditampilkan untuk melacak permintaan ini.

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;
  }
}

Lihat Pembaruan status di bawah untuk informasi selengkapnya. Aplikasi harus memungkinkan pengguna memperbarui gaya untuk jalur teks, baik menggunakan setelan yang disediakan oleh sistem atau oleh aplikasi itu sendiri. Ada gaya default yang disediakan (di iOS 7 dan yang lebih baru), yang dapat diambil melalui metode statis +[GCKMediaTextTrackStyle createDefault]. Elemen gaya trek teks berikut dapat diubah:

  • Warna dan opasitas (teks) latar depan
  • Warna dan opasitas latar belakang
  • Jenis tepi
  • Warna Tepi
  • Skala Font
  • Jenis Font
  • Gaya Font

Menerima pembaruan status

Jika beberapa pengirim terhubung ke penerima yang sama, setiap pengirim harus mengetahui perubahan pada penerima meskipun perubahan tersebut dimulai dari pengirim lain.

Untuk memastikan pengirim menerima pembaruan status dari penerima, aplikasi Anda harus mendaftarkan GCKRemoteMediaClientListener. Jika GCKMediaTextTrackStyle media saat ini berubah, semua pengirim yang terhubung akan diberi tahu melalui callback -[remoteMediaClient:didUpdateMediaMetadata:] dan -[remoteMediaClient:didUpdateMediaStatus:]. Dalam hal ini, Receiver SDK tidak memverifikasi apakah gaya baru berbeda dengan gaya sebelumnya dan akan memberi tahu semua pengirim yang terhubung. Namun, jika daftar jalur aktif diperbarui, hanya -[remoteMediaClient:didUpdateMediaStatus:] pada pengirim terhubung yang akan diberi tahu.

Memenuhi persyaratan CORS

Untuk streaming media adaptif, Google Cast memerlukan keberadaan header CORS, tetapi bahkan streaming media mp4 sederhana juga memerlukan CORS jika menyertakan Trek. Jika ingin mengaktifkan Trek untuk media apa pun, Anda harus mengaktifkan CORS untuk streaming jalur dan aliran media. Jadi, jika Anda tidak memiliki header CORS yang tersedia untuk media mp4 sederhana di server, kemudian Anda menambahkan trek subtitel sederhana, Anda tidak akan dapat melakukan streaming media kecuali jika Anda mengupdate server untuk menyertakan header CORS yang sesuai. Selain itu, Anda harus mengizinkan setidaknya header berikut: Content-Type, Accept-Encoding, dan Rentang. Perhatikan bahwa dua header terakhir adalah header tambahan yang mungkin tidak Anda perlukan sebelumnya.