Pemutaran media latar belakang warisan

Artikel ini menjelaskan model dua proses warisan untuk menambahkan dukungan audio latar belakang ke aplikasi UWP Anda. Dimulai dengan Windows 10, versi 1607, model proses tunggal untuk audio latar belakang yang jauh lebih mudah diimplementasikan. Untuk informasi selengkapnya tentang rekomendasi saat ini untuk audio latar belakang, lihat Memutar media di latar belakang. Artikel ini dimaksudkan untuk memberikan dukungan untuk aplikasi yang telah dikembangkan menggunakan model dua proses warisan.

Catatan

Dimulai dengan Windows, versi 1703, BackgroundMediaPlayer tidak digunakan lagi dan mungkin tidak tersedia di versi Windows mendatang.

Arsitektur audio latar belakang

Aplikasi yang melakukan pemutaran latar belakang terdiri dari dua proses. Proses pertama adalah aplikasi utama, yang berisi UI aplikasi dan logika klien, berjalan di latar depan. Proses kedua adalah tugas pemutaran latar belakang, yang mengimplementasikan IBackgroundTask seperti semua tugas latar belakang aplikasi UWP. Tugas latar belakang berisi logika pemutaran audio dan layanan latar belakang. Tugas latar belakang berkomunikasi dengan sistem melalui Kontrol Transportasi Media Sistem.

Diagram berikut adalah gambaran umum tentang bagaimana sistem dirancang.

windows 10 background audio architecture

MediaPlayer

Windows. Namespace layanan Media.Playback berisi API yang digunakan untuk memutar audio di latar belakang. Ada satu instans MediaPlayer per aplikasi di mana pemutaran terjadi. Aplikasi audio latar belakang Anda memanggil metode dan mengatur properti di kelas MediaPlayer untuk mengatur trek saat ini, memulai pemutaran, menjeda, maju cepat, memutar balik, dan sebagainya. Instans objek pemutar media selalu diakses melalui properti BackgroundMediaPlayer.Current .

Proksi dan Stub MediaPlayer

Saat BackgroundMediaPlayer.Current diakses dari proses latar belakang aplikasi Anda, instans MediaPlayer diaktifkan di host tugas latar belakang dan dapat dimanipulasi secara langsung.

Ketika BackgroundMediaPlayer.Current diakses dari aplikasi latar depan, instans MediaPlayer yang dikembalikan sebenarnya adalah proksi yang berkomunikasi dengan stub dalam proses latar belakang. Stub ini berkomunikasi dengan instans MediaPlayer yang sebenarnya, yang juga dihosting dalam proses latar belakang.

Proses latar depan dan latar belakang dapat mengakses sebagian besar properti instans MediaPlayer , dengan pengecualian MediaPlayer.Source dan MediaPlayer.SystemMediaTransportControls yang hanya dapat diakses dari proses latar belakang. Aplikasi latar depan dan proses latar belakang keduanya dapat menerima pemberitahuan peristiwa khusus media seperti MediaOpened, MediaEnded, dan MediaFailed.

Daftar Pemutaran

Skenario umum untuk aplikasi audio latar belakang adalah memutar beberapa item secara berturut-turut. Ini paling mudah dicapai dalam proses latar belakang Anda dengan menggunakan objek MediaPlaybackList , yang dapat diatur sebagai sumber di MediaPlayer dengan menetapkannya ke properti MediaPlayer.Source .

Tidak dimungkinkan untuk mengakses MediaPlaybackList dari proses latar depan yang diatur dalam proses latar belakang.

Kontrol Transportasi Media Sistem

Pengguna dapat mengontrol pemutaran audio tanpa langsung menggunakan UI aplikasi Anda melalui cara-cara seperti perangkat Bluetooth, SmartGlass, dan Kontrol Transportasi Media Sistem. Tugas latar belakang Anda menggunakan kelas SystemMediaTransportControls untuk berlangganan peristiwa sistem yang dimulai pengguna ini.

Untuk mendapatkan instans SystemMediaTransportControls dari dalam proses latar belakang, gunakan properti MediaPlayer.SystemMediaTransportControls . Aplikasi latar depan mendapatkan instans kelas dengan memanggil SystemMediaTransportControls.GetForCurrentView, tetapi instans yang dikembalikan adalah instans khusus latar depan yang tidak terkait dengan tugas latar belakang.

Mengirim Pesan Antar Tugas

Ada kalanya Anda ingin berkomunikasi antara dua proses aplikasi audio latar belakang. Misalnya, Anda mungkin ingin tugas latar belakang memberi tahu tugas latar depan saat trek baru mulai diputar, lalu mengirim judul lagu baru ke tugas latar depan untuk ditampilkan di layar.

Mekanisme komunikasi sederhana meningkatkan peristiwa dalam proses latar depan dan latar belakang. Metode SendMessageToForeground dan SendMessageToBackground setiap memanggil peristiwa dalam proses yang sesuai. Pesan dapat diterima dengan berlangganan peristiwa MessageReceivedFromBackground dan MessageReceivedFromForeground .

Data dapat diteruskan sebagai argumen ke metode kirim pesan yang kemudian diteruskan ke penanganan aktivitas yang diterima pesan. Teruskan data menggunakan kelas ValueSet . Kelas ini adalah kamus yang berisi string sebagai kunci dan jenis nilai lainnya sebagai nilai. Anda dapat meneruskan jenis nilai sederhana seperti bilangan bulat, string, dan boolean.

Siklus Hidup Tugas Latar Belakang

Masa pakai tugas latar belakang terkait erat dengan status pemutaran aplikasi Anda saat ini. Misalnya, saat pengguna menjeda pemutaran audio, sistem dapat menghentikan atau membatalkan aplikasi Anda tergantung pada keadaannya. Setelah jangka waktu tertentu tanpa pemutaran audio, sistem dapat secara otomatis mematikan tugas latar belakang.

Metode IBackgroundTask.Run disebut pertama kali aplikasi Anda mengakses BackgroundMediaPlayer.Current dari kode yang berjalan di aplikasi latar depan atau saat Anda mendaftarkan handler untuk peristiwa MessageReceivedFromBackground , mana pun yang terjadi terlebih dahulu. Disarankan agar Anda mendaftar untuk handler yang diterima pesan sebelum memanggil BackgroundMediaPlayer.Current untuk pertama kalinya sehingga aplikasi latar depan tidak melewatkan pesan apa pun yang dikirim dari proses latar belakang.

Agar tugas latar belakang tetap hidup, aplikasi Anda harus meminta BackgroundTaskDeferral dari dalam metode Jalankan dan memanggil BackgroundTaskDeferral.Complete saat instans tugas menerima peristiwa Dibatalkan atau Selesai . Jangan mengulang atau menunggu dalam metode Jalankan karena ini menggunakan sumber daya dan dapat menyebabkan tugas latar belakang aplikasi Anda dihentikan oleh sistem.

Tugas latar belakang Anda mendapatkan peristiwa Selesai ketika metode Jalankan selesai dan penundaan tidak diminta. Dalam beberapa kasus, saat aplikasi Anda mendapatkan peristiwa Dibatalkan , peristiwa tersebut juga dapat diikuti oleh peristiwa Selesai . Tugas Anda mungkin menerima peristiwa Dibatalkan saat Jalankan sedang dijalankan, jadi pastikan untuk mengelola potensi konkurensi ini.

Situasi di mana tugas latar belakang dapat dibatalkan meliputi:

  • Aplikasi baru dengan kemampuan pemutaran audio dimulai pada sistem yang memberlakukan sub-kebijakan pengecualian. Lihat bagian Kebijakan sistem untuk masa pakai tugas audio latar belakang di bawah ini.

  • Tugas latar belakang telah diluncurkan tetapi musik belum diputar, dan kemudian aplikasi latar depan ditangguhkan.

  • Gangguan media lainnya, seperti panggilan telepon masuk atau panggilan VoIP.

Situasi di mana tugas latar belakang dapat dihentikan tanpa pemberitahuan meliputi:

  • Panggilan VoIP masuk dan tidak ada cukup memori yang tersedia pada sistem untuk menjaga tugas latar belakang tetap hidup.

  • Kebijakan sumber daya dilanggar.

  • Pembatalan atau penyelesaian tugas tidak berakhir dengan baik.

Kebijakan sistem untuk masa pakai tugas audio latar belakang

Kebijakan berikut membantu menentukan bagaimana sistem mengelola masa pakai tugas audio latar belakang.

Eksklusivitas

Jika diaktifkan, sub-kebijakan ini membatasi jumlah tugas audio latar belakang menjadi paling banyak 1 pada waktu tertentu. Ini diaktifkan pada Seluler dan SKU non-Desktop lainnya.

Batas Waktu Tidak Aktif

Karena kendala sumber daya, sistem dapat mengakhiri tugas latar belakang Anda setelah periode tidak aktif.

Tugas latar belakang dianggap "tidak aktif" jika kedua kondisi berikut terpenuhi:

  • Aplikasi latar depan tidak terlihat (ditangguhkan atau dihentikan).

  • Pemutar media latar belakang tidak dalam status main.

Jika kedua kondisi ini terpenuhi, kebijakan sistem media latar belakang akan memulai timer. Jika tidak ada kondisi yang berubah ketika timer kedaluwarsa, kebijakan sistem media latar belakang akan mengakhiri tugas latar belakang.

Masa Pakai Bersama

Jika diaktifkan, sub-kebijakan ini memaksa tugas latar belakang bergantung pada masa pakai tugas latar depan. Jika tugas latar depan dimatikan, baik oleh pengguna atau sistem, tugas latar belakang juga akan dimatikan.

Namun, perhatikan bahwa ini tidak berarti bahwa latar depan tergantung pada latar belakang. Jika tugas latar belakang dimatikan, ini tidak memaksa tugas latar depan untuk dimatikan.

Tabel berikut mencantumkan kebijakan mana yang diberlakukan pada jenis perangkat mana.

Sub-kebijakan Desktop Seluler Lainnya
Eksklusivitas Dinonaktifkan Aktif Aktif
Batas Waktu Tidak Aktif Dinonaktifkan Aktif Nonaktif
Masa Pakai Bersama Aktif Nonaktif Nonaktif