Kebijakan putar otomatis di Chrome

Meningkatkan pengalaman pengguna, meminimalkan insentif untuk menginstal pemblokir iklan, dan mengurangi konsumsi data

François Beaufort
François Beaufort

Kebijakan putar otomatis Chrome berubah pada April 2018 dan kami ingin memberitahukan alasan dan pengaruhnya terhadap pemutaran video dengan suara. Peringatan spoiler: pengguna akan menyukainya.

Liam Neeson: Aku akan menemukanmu dan aku akan menghentikanmu.
Sean Bean: Kita tidak bisa begitu saja memutar video secara otomatis.
Meme internet yang diberi tag "putar otomatis" yang ditemukan di Imgflip dan Imgur.

Perilaku baru

Seperti yang mungkin telah Anda perhatikan, browser web beralih ke kebijakan pemutaran otomatis yang lebih ketat untuk meningkatkan pengalaman pengguna, meminimalkan insentif untuk menginstal pemblokir iklan, dan mengurangi konsumsi data di jaringan yang mahal dan/atau terbatas. Perubahan ini dimaksudkan untuk memberikan kontrol pemutaran yang lebih besar kepada pengguna dan untuk menguntungkan penayang dengan kasus penggunaan yang sah.

Kebijakan putar otomatis Chrome sangat sederhana:

  • Putar otomatis yang dibisukan selalu diizinkan.
  • Putar otomatis dengan suara diizinkan jika:
  • Frame atas dapat mendelegasikan izin putar otomatis ke iframe-nya untuk mengizinkan putar otomatis dengan suara.

Indeks Engagement Media

Media Engagement Index (MEI) mengukur kecenderungan individu untuk mengonsumsi media di situs. Pendekatan Chrome adalah rasio kunjungan ke peristiwa pemutaran media yang signifikan per origin:

  • Konsumsi media (audio/video) harus lebih dari tujuh detik.
  • Audio harus ada dan tidak dibisukan.
  • Tab dengan video aktif.
  • Ukuran video (dalam piksel) harus lebih besar dari 200x140.

Dari situ, Chrome menghitung skor engagement media, yang tertinggi di situs tempat media diputar secara rutin. Jika cukup tinggi, media diizinkan untuk diputar otomatis hanya di desktop.

MEI pengguna tersedia di halaman internal about://media-engagement.

Screenshot halaman internal about://media-engagement.
Screenshot halaman internal about://media-engagement di Chrome.

Tombol developer

Sebagai developer, Anda mungkin ingin mengubah perilaku kebijakan putar otomatis Chrome secara lokal untuk menguji situs Anda dengan berbagai tingkat interaksi pengguna.

  • Anda dapat menonaktifkan kebijakan putar otomatis sepenuhnya menggunakan flag command line: chrome.exe --autoplay-policy=no-user-gesture-required. Hal ini memungkinkan Anda menguji situs seolah-olah pengguna sangat berinteraksi dengan situs Anda dan pemutaran otomatis akan selalu diizinkan.

  • Anda juga dapat memutuskan untuk memastikan pemutaran otomatis tidak pernah diizinkan dengan menonaktifkan MEI dan apakah situs dengan MEI keseluruhan tertinggi mendapatkan pemutaran otomatis secara default untuk pengguna baru. Lakukan ini dengan flag: chrome.exe --disable-features=PreloadMediaEngagementData, MediaEngagementBypassAutoplayPolicies.

Delegasi iframe

Kebijakan izin memungkinkan developer mengaktifkan dan menonaktifkan API dan fitur browser secara selektif. Setelah menerima izin putar otomatis, origin dapat mendelegasikan izin tersebut ke iframe lintas origin dengan kebijakan izin untuk putar otomatis. Perhatikan bahwa pemutaran otomatis diizinkan secara default di iframe dengan origin yang sama.

<!-- Autoplay is allowed. -->
<iframe src="https://cross-origin.com/myvideo.html" allow="autoplay">

<!-- Autoplay and Fullscreen are allowed. -->
<iframe src="https://cross-origin.com/myvideo.html" allow="autoplay; fullscreen">

Jika kebijakan izin untuk putar otomatis dinonaktifkan, panggilan ke play() tanpa gestur pengguna akan menolak promise dengan DOMException NotAllowedError. Selain itu, atribut putar otomatis juga akan diabaikan.

Contoh

Contoh 1: Setiap kali pengguna mengunjungi VideoSubscriptionSite.com di laptop, mereka menonton acara TV atau film. Karena skor engagement medianya tinggi, pemutaran otomatis diizinkan.

Contoh 2: GlobalNewsSite.com memiliki konten teks dan video. Sebagian besar pengguna mengunjungi situs untuk membaca konten teks dan hanya sesekali menonton video. Skor engagement media pengguna rendah, sehingga pemutaran otomatis tidak akan diizinkan jika pengguna membuka langsung dari halaman media sosial atau penelusuran.

Contoh 3: LocalNewsSite.com memiliki konten teks dan video. Sebagian besar orang memasuki situs melalui halaman beranda, lalu mengklik artikel berita. Pemutaran otomatis di halaman artikel berita akan diizinkan karena interaksi pengguna dengan domain. Namun, Anda harus berhati-hati untuk memastikan pengguna tidak terkejut dengan konten yang diputar otomatis.

Contoh 4: MyMovieReviewBlog.com menyematkan iframe dengan cuplikan film untuk disertakan dengan ulasan. Pengguna berinteraksi dengan domain untuk membuka blog, sehingga putar otomatis diizinkan. Namun, blog harus secara eksplisit mendelegasikan hak istimewa tersebut ke iframe agar konten dapat diputar otomatis.

Kebijakan Chrome Enterprise

Anda dapat mengubah perilaku putar otomatis dengan kebijakan perusahaan Chrome untuk kasus penggunaan seperti kios atau sistem tanpa pengawasan. Lihat halaman bantuan Daftar Kebijakan untuk mempelajari cara menetapkan kebijakan perusahaan terkait putar otomatis:

  • Kebijakan AutoplayAllowed mengontrol apakah putar otomatis diizinkan atau tidak.
  • Kebijakan AutoplayAllowlist memungkinkan Anda menentukan daftar yang diizinkan untuk pola URL tempat pemutaran otomatis akan selalu diaktifkan.

Praktik terbaik untuk developer web

Elemen Audio/Video

Berikut adalah satu hal yang perlu diingat: Jangan pernah berasumsi bahwa video akan diputar, dan jangan tampilkan tombol jeda saat video tidak benar-benar diputar. Hal ini sangat penting sehingga saya akan menulisnya sekali lagi di bawah untuk mereka yang hanya membaca sekilas postingan tersebut.

Anda harus selalu melihat Promise yang ditampilkan oleh fungsi play untuk melihat apakah promise tersebut ditolak:

var promise = document.querySelector('video').play();

if (promise !== undefined) {
  promise.then(_ => {
    // Autoplay started!
  }).catch(error => {
    // Autoplay was prevented.
    // Show a "Play" button so that user can start playback.
  });
}

Salah satu cara keren untuk berinteraksi dengan pengguna adalah menggunakan putar otomatis yang dibisukan dan mengizinkan mereka memilih untuk membunyikannya. (Lihat contoh di bawah.) Beberapa situs sudah melakukannya secara efektif, termasuk Facebook, Instagram, Twitter, dan YouTube.

<video id="video" muted playsinline autoplay>
<button id="unmuteButton"></button>

<script>
  unmuteButton.addEventListener('click', function() {
    video.muted = false;
  });
</script>

Peristiwa yang memicu aktivasi pengguna masih harus ditentukan secara konsisten di seluruh browser. Sebaiknya Anda tetap menggunakan "click" untuk saat ini. Lihat masalah GitHub whatwg/html#3849.

Audio Web

Web Audio API telah dicakup oleh pemutaran otomatis sejak Chrome 71. Ada beberapa hal yang perlu diketahui tentangnya. Pertama, sebaiknya tunggu interaksi pengguna sebelum memulai pemutaran audio agar pengguna mengetahui sesuatu yang terjadi. Misalnya, pikirkan tombol "putar" atau tombol "aktif/nonaktif". Anda juga dapat menambahkan tombol "nonaktifkan bisukan" bergantung pada alur aplikasi.

Jika membuat AudioContext saat pemuatan halaman, Anda harus memanggil resume() beberapa saat setelah pengguna berinteraksi dengan halaman (misalnya, setelah pengguna mengklik tombol). Atau, AudioContext akan dilanjutkan setelah gestur pengguna jika start() dipanggil di node yang terpasang.

// Existing code unchanged.
window.onload = function() {
  var context = new AudioContext();
  // Setup all nodes
  // ...
}

// One-liner to resume playback when user interacted with the page.
document.querySelector('button').addEventListener('click', function() {
  context.resume().then(() => {
    console.log('Playback resumed successfully');
  });
});

Anda juga dapat membuat AudioContext hanya saat pengguna berinteraksi dengan halaman.

document.querySelector('button').addEventListener('click', function() {
  var context = new AudioContext();
  // Setup all nodes
  // ...
});

Untuk mendeteksi apakah browser memerlukan interaksi pengguna untuk memutar audio, periksa AudioContext.state setelah Anda membuatnya. Jika diizinkan, pemutaran akan segera beralih ke running. Jika tidak, kolom akan ditetapkan ke suspended. Jika memproses peristiwa statechange, Anda dapat mendeteksi perubahan secara asinkron.

Untuk melihat contohnya, lihat Pull Request kecil yang memperbaiki pemutaran Audio Web untuk aturan kebijakan putar otomatis ini untuk https://airhorner.com.