Menggunakan Trek Media

MediaTrack mewakili trek media, yang dapat berupa streaming audio, streaming video, atau teks (seperti subtitel atau teks tertutup). Aplikasi Anda dapat mengelompokkan, menata gaya, dan mengaktifkan trek media.

Mengonfigurasi trek

Anda dapat mengonfigurasi jalur dan menetapkan ID unik ke jalur tersebut. Kode berikut membuat trek teks berbahasa Inggris, trek teks bahasa Prancis, dan trek audio bahasa Prancis, masing-masing dengan ID mereka sendiri:

Kotlin
val englishSubtitle = MediaTrack.Builder(1 /* ID */, MediaTrack.TYPE_TEXT)
    .setName("English Subtitle")
    .setSubtype(MediaTrack.SUBTYPE_SUBTITLES)
    .setContentId("https://some-url/caption_en.vtt")
    /* language is required for subtitle type but optional otherwise */
    .setLanguage("en-US")
    .build()

val frenchSubtitle = MediaTrack.Builder(2, MediaTrack.TYPE_TEXT)
    .setName("French Subtitle")
    .setSubtype(MediaTrack.SUBTYPE_SUBTITLES)
    .setContentId("https://some-url/caption_fr.vtt")
    .setLanguage("fr")
    .build()

val frenchAudio = MediaTrack.Builder(3, MediaTrack.TYPE_AUDIO)
    .setName("French Audio")
    .setContentId("trk0001")
    .setLanguage("fr")
    .build()
Java
MediaTrack englishSubtitle = new MediaTrack.Builder(1 /* ID */,
MediaTrack.TYPE_TEXT)
  .setName("English Subtitle")
  .setSubtype(MediaTrack.SUBTYPE_SUBTITLES)
  .setContentId("https://some-url/caption_en.vtt")
  /* language is required for subtitle type but optional otherwise */
  .setLanguage("en-US")
  .build();

MediaTrack frenchSubtitle = new MediaTrack.Builder(2, MediaTrack.TYPE_TEXT)
  .setName("French Subtitle")
  .setSubtype(MediaTrack.SUBTYPE_SUBTITLES)
  .setContentId("https://some-url/caption_fr.vtt")
  .setLanguage("fr")
  .build();

MediaTrack frenchAudio = new MediaTrack.Builder(3, MediaTrack.TYPE_AUDIO)
  .setName("French Audio")
  .setContentId("trk0001")
  .setLanguage("fr")
  .build();

Trek grup

Anda dapat mengelompokkan beberapa trek ke dalam item media, yang diwakili oleh MediaInfo Instance MediaInfo mengambil berbagai trek dan menggabungkan informasi lain tentang item media tersebut. Berdasarkan contoh, aplikasi Anda dapat menambahkan tiga trek media tersebut ke media dengan meneruskan daftar ketiga trek tersebut ke MediaInfo.Builder.setMediaTracks(List) Aplikasi Anda perlu mengaitkan jalur di MediaInfo dengan cara ini sebelum dimuat media ke penerima.

Kotlin
val tracks: MutableList<MediaTrack> = ArrayList<MediaTrack>()
tracks.add(englishSubtitle)
tracks.add(frenchSubtitle)
tracks.add(frenchAudio)
val mediaInfo = MediaInfo.Builder(url)
    .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
    .setContentType(getContentType())
    .setMetadata(getMetadata())
    .setMediaTracks(tracks)
    .build()
Java
List tracks = new ArrayList();
tracks.add(englishSubtitle);
tracks.add(frenchSubtitle);
tracks.add(frenchAudio);
MediaInfo mediaInfo = MediaInfo.Builder(url)
  .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
  .setContentType(getContentType())
  .setMetadata(getMetadata())
  .setMediaTracks(tracks)
  .build();

Hapus track

Untuk menghapus semua trek dari media saat ini (seperti mematikan tiga sub judul dalam contoh), panggil MediaInfo.Builder.setMediaTracks(List) dan meneruskan daftar ID kosong.

Perbarui jalur

Aplikasi Anda dapat mengaktifkan satu atau beberapa jalur yang terkait dengan media (setelah media dimuat), dengan memanggil RemoteMediaClient.setActiveMediaTracks(long[]) dan meneruskan ID jalur yang akan diaktifkan. Contoh ini mengaktifkan Subtitel bahasa Prancis dan audio bahasa Prancis:

Kotlin
// the ID for the French subtitle is '2' and for the French audio '3'
remoteMediaClient.setActiveMediaTracks(longArrayOf(2, 3))
    .setResultCallback(ResultCallback {
            mediaChannelResult: RemoteMediaClient.MediaChannelResult ->
                if (!mediaChannelResult.status.isSuccess) {
                    Log.e(TAG, "Failed with status code:" +
                            mediaChannelResult.status.statusCode
                    )
                }
    })
Java
// the ID for the French subtitle is '2' and for the French audio '3'
remoteMediaClient.setActiveMediaTracks(new long[]{2, 3})
    .setResultCallback(mediaChannelResult -> {
        if (!mediaChannelResult.getStatus().isSuccess()) {
            Log.e(TAG, "Failed with status code:" +
                    mediaChannelResult.getStatus().getStatusCode());
        }
    });

Mengatur gaya trek teks

TextTrackStyle mengenkapsulasi informasi gaya visual dari trek teks. Setelah membuat atau memperbarui TextTrackStyle yang sudah ada, Anda dapat menerapkan gaya tersebut ke item media dengan memanggil RemoteMediaClient.setTextTrackStyle, seperti ini:

Kotlin
// the ID for the French subtitle is '2' and for the French audio '3'
remoteMediaClient.setTextTrackStyle(style)
    .setResultCallback(ResultCallback {
            mediaChannelResult: RemoteMediaClient.MediaChannelResult ->
                if (!mediaChannelResult.status.isSuccess) {
                    Log.e(TAG, "Failed to set the style, status code: " +
                            mediaChannelResult.status.statusCode
                    )
                }
    })
Java
remoteMediaClient.setTextTrackStyle(style)
    .setResultCallback(mediaChannelResult -> {
        if (!mediaChannelResult.getStatus().isSuccess()) {
            Log.e(TAG, "Failed to set the style, status code: " +
                    mediaChannelResult.getStatus().getStatusCode());
        }
    });

Aplikasi Anda harus memungkinkan pengguna untuk memperbarui gaya untuk trek teks, baik menggunakan pengaturan yang disediakan oleh sistem atau oleh aplikasi itu sendiri. Di Android KitKat dan di lain waktu, Anda dapat menggunakan setelan teks tertutup di seluruh sistem yang disediakan oleh kerangka kerja:

Kotlin
val textTrackStyle = TextTrackStyle.fromSystemSettings(context)
Java
TextTrackStyle textTrackStyle = TextTrackStyle.fromSystemSettings(context);

Untuk versi sebelum KitKat, panggilan di atas akan menampilkan objek yang kolom belum ditentukan, jadi Anda harus mengisi kolom tersebut di aplikasi, berdasarkan pilihan pengguna dan beberapa nilai default. Anda dapat menata gaya teks berikut elemen gaya trek:

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

Misalnya, setel warna teks ke merah (FF) dengan opasitas 50% (80) sebagai berikut:

Kotlin
textTrackStyle.foregroundColor = Color.parseColor("#80FF0000")
Java
textTrackStyle.setForegroundColor(Color.parseColor("#80FF0000"));

Di KitKat dan versi yang lebih baru, Anda harus mendaftarkan aplikasi untuk mendapatkan notifikasi saat setelan teks tertutup di seluruh sistem diperbarui. Untuk mencapai tujuan ini, Anda perlu terapkan CaptioningManager.CaptioningChangeListener dalam aplikasi Anda dan daftarkan pemroses ini dengan memanggil:

Kotlin
CaptioningManager.addCaptioningChangeListener(yourChangeListener)
Java
CaptioningManager.addCaptioningChangeListener(yourChangeListener);

Ketika aplikasi Anda menerima panggilan balik bahwa setelan teks telah berubah, Anda kemudian perlu mengekstrak pengaturan baru dan memperbarui gaya teks teks untuk media yang sedang diputar dengan memanggil RemoteMediaClient.setTextTrackStyle dan meneruskan gaya baru.

Terima info terbaru terkait status

Ketika beberapa pengirim terhubung ke penerima yang sama, penting untuk setiap pengirim mengetahui perubahan pada penerima bahkan jika perubahan itu dimulai dari pengirim lain.

Untuk mencapai hal ini, aplikasi Anda harus mendaftarkan RemoteMediaClient.Listener dan RemoteMediaClient.ProgressListener.

Jika TextTrackStyle perubahan media saat ini, maka semua pengirim yang terhubung akan diberi tahu melalui kedua pemroses terdaftar di atas. Dalam hal ini, SDK penerima tidak memverifikasi apakah gaya baru berbeda dari gaya sebelumnya dan memberi tahu semua pengirim yang terhubung. Namun, jika status perubahan jalur aktif, hanya RemoteMediaClient.ProgressListener dalam pengirim yang terhubung akan diberi tahu.

Memenuhi persyaratan CORS

Untuk streaming media adaptif, Google Cast memerlukan keberadaan CORS, tetapi bahkan file mp4 sederhana aliran media memerlukan CORS jika menyertakan Trek. Jika Anda ingin mengaktifkan Lagu untuk media apa pun, Anda harus mengaktifkan CORS untuk streaming lagu dan media Anda feed. Jadi, jika Anda tidak memiliki header CORS untuk media mp4 sederhana di server Anda, dan kemudian Anda menambahkan trek sub judul sederhana, Anda tidak akan dapat untuk melakukan streaming media kecuali Anda memperbarui server header CORS. Selain itu, Anda harus mengizinkan setidaknya header berikut: Content-Type, Accept-Encoding, dan Range. Perhatikan bahwa dua {i>header<i} terakhir adalah {i>header<i} tambahan yang mungkin tidak diperlukan sebelumnya.