Ringkasan arsitektur aplikasi media

Bagian ini menjelaskan cara memisahkan aplikasi pemutar media ke dalam pengontrol media (untuk UI) dan sesi media (untuk pemutar sesungguhnya). Ini menggambarkan dua arsitektur aplikasi media: desain klien/server yang berfungsi dengan baik untuk aplikasi audio dan desain aktivitas tunggal untuk pemutar video. Ini juga menunjukkan cara membuat aplikasi media merespons kontrol hardware dan bekerja sama dengan aplikasi lain yang menggunakan streaming keluaran audio.

Pemutar dan UI

Aplikasi multimedia yang memutar audio atau video biasanya memiliki dua bagian:

  • Pemutar yang menggunakan media digital dan merendernya sebagai video dan/atau audio
  • UI dengan kontrol transpor untuk menjalankan pemutar dan secara opsional menampilkan status pemutar

ui-dan-pemutar

Di Android, pemutar bisa Anda buat sendiri dari dasar, atau Anda dapat memilih opsi ini:

  • Class MediaPlayer menyediakan fungsionalitas dasar untuk pemutar yang mendukung format audio/video dan sumber data yang paling umum.
  • ExoPlayer adalah library open source yang mengekspos API audio Android tingkat-lebih-rendah. ExoPlayer mendukung fitur berkinerja tinggi seperti streaming DASH dan HLS yang tidak tersedia di MediaPlayer. Anda bisa menyesuaikan kode ExoPlayer, sehingga mudah bila ingin menambahkan komponen baru. ExoPlayer hanya bisa digunakan dengan versi Android 4.1 dan yang lebih tinggi.

Sesi media dan pengontrol media

Meskipun API untuk UI dan pemutar bisa berubah-ubah, jenis interaksi antara dua bagian tersebut pada dasarnya sama untuk semua aplikasi pemutar media. Framework Android mendefinisikan dua class, media session dan media controller, yang menerapkan struktur yang dengan baik didefinisikan untuk mem-build aplikasi pemutar media.

Sesi media dan pengontrol media berkomunikasi satu sama lain menggunakan callback yang telah ditentukan sebelumnya yang diperuntukkan untuk tindakan pemutaran standar (putar, jeda, berhenti, dll.), serta panggilan khusus dapat diperluas yang Anda gunakan untuk menentukan perilaku khusus yang unik bagi aplikasi Anda.

pengontrol-dan-sesi

Sesi media

Sesi media bertanggung jawab untuk semua komunikasi dengan player. Sesi media menyembunyikan API pemutar dari bagian aplikasi yang lain. Pemutar hanya dipanggil dari sesi media yang mengontrolnya.

Sesi ini menjaga representasi status pemutar (putar/jeda) dan informasi tentang apa yang sedang diputar. Sesi bisa menerima callback dari satu atau beberapa pengontrol media. Hal ini memungkinkan pemutar Anda dikontrol oleh UI aplikasi serta perangkat pendamping yang menjalankan Wear OS dan Android Auto.

Pengontrol media

Pengontrol media mengisolasi UI Anda. Kode UI Anda hanya berkomunikasi dengan pengontrol media, bukan pemutar itu sendiri. Pengontrol media menerjemahkan tindakan kontrol transpor menjadi callback untuk sesi media. Pengontrol media juga menerima callback dari sesi media setiap kali status sesi berubah. Ini menyediakan mekanisme untuk secara otomatis memperbarui UI terkait. Sebuah pengontrol media hanya bisa terhubung ke satu sesi media dalam satu waktu.

Saat menggunakan pengontrol media dan sesi media, Anda bisa menerapkan antarmuka dan/atau pemutar yang berbeda pada waktu proses. Anda bisa mengubah penampilan dan/atau kinerja aplikasi Anda secara bebas, bergantung pada kemampuan perangkat yang menjalankannya.

Aplikasi video versus aplikasi audio

Saat memutar video, mata dan telinga Anda aktif bekerja. Saat memutar audio, Anda mendengarkannya, tetapi Anda juga bisa membuka aplikasi yang lain pada saat yang bersamaan. Itu adalah desain yang berbeda untuk setiap kasus penggunaan.

Aplikasi video

Aplikasi video membutuhkan jendela untuk menampilkan konten. Karena alasan ini, aplikasi video biasanya diimplementasikan sebagai aktivitas Android tunggal. Layar tempat video ditampilkan adalah bagian dari aktivitas.

aktivitas pemutar video

Aplikasi audio

Pemutar Audio tidak harus selalu menampilkan UI-nya. Setelah mulai memutar audio, pemutar bisa berjalan sebagai tugas latar belakang. Pengguna bisa beralih ke aplikasi lain dan bekerja sambil terus mendengarkan.

Untuk mengimplementasikan desain ini di Android, Anda bisa mem-build aplikasi audio menggunakan dua komponen: sebuah aktivitas untuk UI dan sebuah layanan untuk pemutar. Jika pengguna beralih ke aplikasi lain, layanan bisa berjalan di latar belakang. Dengan memisahkan dua bagian aplikasi audio ke dalam komponen terpisah, masing-masing bagian bisa berjalan dengan lebih efisien. UI biasanya berumur singkat dibandingkan dengan pemutar, yang dapat berjalan untuk waktu yang lama tanpa UI.

Aktivitas audio dan BrowserService

Support library menyediakan dua class untuk mengimplementasikan pendekatan klien/server ini: MediaBrowserService dan MediaBrowser. Komponen layanan diimplementasikan sebagai subclass MediaBrowserService yang berisi sesi media dan pemutarnya. Aktivitas dengan UI dan pengontrol media harus menyertakan MediaBrowser, yang berkomunikasi dengan MediaBrowserService.

Menggunakan MediaBrowserService akan mempermudah perangkat pendamping (seperti Android Auto dan Wear) untuk menemukan aplikasi Anda, menyambungkannya, mencari konten, dan mengontrol pemutaran, tanpa mengakses aktivitas UI sama sekali.

Aplikasi media dan infrastruktur audio Android

Aplikasi media yang dirancang baik harus "bermain bersama dengan baik" dengan aplikasi lain yang memutar audio. Aplikasi media harus siap berbagi ponsel dan bekerja sama dengan aplikasi lain pada perangkat Anda yang menggunakan audio. Aplikasi media juga harus merespons kontrol hardware pada perangkat.

bermain-dengan-yang-lain

Semua perilaku ini dijelaskan dalam Mengontrol Keluaran Audio.

Library media-compat

Library media-compat berisi class yang berguna untuk mem-build aplikasi yang memutar audio dan video. Class ini kompatibel dengan perangkat yang menjalankan Android 2.3 (API level 9) dan yang lebih tinggi. Mereka juga bekerja dengan fitur Android lainnya untuk menciptakan pengalaman Android yang familier dan menyenangkan.

Implementasi sesi media dan pengontrol media yang direkomendasikan adalah class MediaSessionCompat dan MediaControllerCompat, yang didefinisikan dalam library dukungan media-compat. Mereka menggantikan versi lama class MediaSession dan MediaController yang diperkenalkan dalam Android 5.0 (API level 21). Class compat menawarkan fungsionalitas yang sama tetapi mempermudah pengembangan aplikasi karena Anda hanya perlu menulis ke satu API. Library menangani kompatibilitas mundur dengan menerjemahkan metode sesi media ke metode yang setara pada versi platform lama bila tersedia.

Jika Anda memiliki aplikasi yang menggunakan class yang lebih lama, sebaiknya lakukan update ke class compat. Ketika Anda menggunakan versi compat, Anda bisa menghapus semua panggilan ke registerMediaButtonReceiver() dan semua metode dari RemoteControlClient.

Mengukur kinerja

Pada Android 8.0 (API level 26) dan yang lebih baru, metode getMetrics() tersedia untuk beberapa class media. Metode tersebut mengembalikan PersistableBundle objek yang berisi informasi konfigurasi dan kinerja, dinyatakan sebagai peta atribut dan nilai. Metode getMetrics() ditetapkan untuk class media ini:

Metrik dikumpulkan secara terpisah untuk setiap instance dan bertahan selama masa pakai instance. Jika tidak tersedia metrik, metode mengembalikan null. Metrik sebenarnya yang dikembalikan bergantung pada class.