Trek media dapat berupa objek streaming audio atau video, atau objek teks (subtitel atau teks).
Objek GCKMediaTrack
mewakili trek. Project ID terdiri dari ID numerik yang unik serta atribut lainnya, seperti judul dan ID konten. Instance GCKMediaTrack
dapat
dibuat sebagai berikut:
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)
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, dapat memiliki beberapa
subjudul (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
. Aplikasi Anda perlu membuat pengaitan ini sebelum memuat
media ke penerima, seperti dalam kode berikut:
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()
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:]
di
GCKRemoteMediaClient
dan meneruskan ID trek yang akan diaktifkan. Misalnya, kode
berikut mengaktifkan trek teks yang dibuat di atas.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];
Untuk menonaktifkan trek pada item media saat ini, panggil
-[setActiveTrackIDs:]
pada
GCKRemoteMediaClient
dengan array kosong atau nilai nol. Kode berikut menonaktifkan trek teks.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];
Menata gaya trek teks
Class
GCKMediaTextTrackStyle
mengenkapsulasi informasi gaya trek teks. Gaya trek dapat
diterapkan ke 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 menetapkan font serif.
let textTrackStyle = GCKMediaTextTrackStyle.createDefault() textTrackStyle.foregroundColor = GCKColor.init(cssString: "#FF000080") textTrackStyle.fontFamily = "serif" styleChangeRequest = sessionManager.currentSession?.remoteMediaClient?.setTextTrackStyle(textTrackStyle) styleChangeRequest?.delegate = self
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.
// MARK: - GCKRequestDelegate func requestDidComplete(_ request: GCKRequest) { if request == styleChangeRequest { print("Style update completed.") styleChangeRequest = nil } }
#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 mengizinkan pengguna memperbarui gaya untuk jalur
teks, baik menggunakan setelan yang disediakan oleh sistem atau aplikasi itu sendiri.
Tersedia gaya default (di iOS 7 dan yang lebih baru), yang dapat diambil
melalui metode statis +[GCKMediaTextTrackStyle
createDefault]
.
Elemen gaya jalur teks berikut dapat diubah:
- Warna dan opasitas latar depan (teks)
- Warna dan opasitas latar belakang
- Jenis tepi
- Warna Tepi
- Skala Font
- Jenis Font
- Gaya Font
Menerima pembaruan status
Saat beberapa pengirim terhubung ke penerima yang sama, setiap pengirim harus menyadari 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 memberi tahu semua pengirim yang terhubung. Namun, jika
daftar jalur aktif diperbarui, hanya
-[remoteMediaClient:didUpdateMediaStatus:]
dalam pengirim yang terhubung yang akan
diberi tahu.
Memenuhi persyaratan CORS
Untuk streaming media adaptif, Google Cast memerlukan kehadiran header CORS, bahkan streaming media mp4 sederhana pun memerlukan CORS jika menyertakan Track. Jika ingin mengaktifkan Trek untuk media apa pun, Anda harus mengaktifkan CORS untuk streaming lagu dan streaming media. Jadi, jika Anda tidak memiliki header CORS untuk media mp4 sederhana di server, lalu menambahkan trek subtitel sederhana, Anda tidak akan dapat melakukan streaming media kecuali jika server diupdate untuk menyertakan header CORS yang sesuai. Selain itu, Anda perlu mengizinkan setidaknya header berikut: Content-Type, Accept-Encoding, dan Range. Perhatikan bahwa dua header terakhir adalah header tambahan yang mungkin tidak Anda perlukan sebelumnya.