Saya membuat situs web di mana jika pengguna mengklik, itu memainkan suara. Untuk mencegah suara tumpang tindih, saya harus menambahkan kode:
n.pause();
n.currentTime = 0;
n.play();
Tapi itu menyebabkan kesalahan:
The play() request was interrupted by a call to pause()
Muncul setiap kali peristiwa suara dipicu tepat setelah pemicu lain. Suara masih diputar dengan baik, tetapi saya ingin mencegah pesan kesalahan ini terus-menerus muncul. Ada ide?
javascript
html
google-chrome
audio
Owen M
sumber
sumber
onCanPlay()
. Semua jawaban ini adalah peretasan kotor.n.play()
itun.pause()
. Untuk itu, artikel Dasar-Dasar Web ini menjelaskan solusinya. tl; dr:n.play().then(() => { n.pause()})
Jawaban:
Saya juga mengalami masalah ini baru-baru ini - ini bisa menjadi kondisi balapan antara
play()
danpause()
. Sepertinya ada referensi ke masalah ini, atau sesuatu yang terkait di sini .Seperti yang ditunjukkan @Patrick ,
pause
tidak mengembalikan janji (atau apa pun), jadi solusi di atas tidak akan berfungsi. Meskipun MDN tidak memiliki dokumenpause()
, dalam draf WC3 untuk Elemen Media , dikatakan:Jadi, seseorang juga dapat memeriksa
paused
atribut di callback batas waktunya.Berdasarkan jawaban SO yang hebat ini , berikut adalah cara Anda dapat memeriksa apakah video (atau tidak) benar-benar diputar, sehingga Anda dapat dengan aman memicu pemutaran () tanpa kesalahan.
Jika tidak, @Patrick 's jawaban harus bekerja.
sumber
Setelah berjam-jam mencari dan bekerja, saya menemukan solusi yang tepat .
Setelah itu, Anda dapat mengaktifkan putar / jeda secepat mungkin, ini akan berfungsi dengan baik .
sumber
Saya telah mengalami masalah ini, dan memiliki kasus di mana saya perlu menekan pause () lalu play () tetapi ketika menggunakan pause (). Then () saya tidak terdefinisi.
Saya menemukan bahwa jika saya mulai bermain 150ms setelah jeda itu menyelesaikan masalah. (Semoga Google segera memperbaiki)
sumber
Saya baru saja menerbitkan artikel tentang masalah ini di https://developers.google.com/web/updates/2017/06/play-request-was-interrupted yang memberi tahu Anda apa yang sebenarnya terjadi dan bagaimana cara memperbaikinya .
sumber
Cobalah
sumber
Solusi ini membantu saya:
sumber
Bergantung pada seberapa kompleks Anda menginginkan solusi Anda, ini mungkin berguna:
Ini sedikit berlebihan, tetapi membantu saat menangani Janji dalam skenario unik.
sumber
Solusi yang diusulkan di sini tidak berhasil untuk saya atau di mana harus besar, jadi saya mencari sesuatu yang lain dan menemukan solusi yang diusulkan oleh @dighan di bountysource.com/issues/
Jadi, inilah kode yang memecahkan masalah saya:
Itu masih membuat kesalahan ke konsol, tetapi setidaknya video diputar :)
sumber
Mungkin solusi yang lebih baik untuk ini seperti yang saya pikirkan. Spec mengatakan seperti yang dikutip dari @JohnnyCoder:
-> memuatnya
menunjukkan status kesiapan media HAVE_ENOUGH_DATA = 4
Pada dasarnya hanya memuat video jika belum dimuat. Kesalahan yang disebutkan terjadi pada saya, karena video tidak dimuat. Mungkin lebih baik daripada menggunakan waktu tunggu.
sumber
menghapus semua kesalahan: (skrip ketikan)
sumber
Dengan streaming langsung, saya menghadapi masalah yang sama. dan perbaikan saya adalah ini. Dari TAG video html pastikan untuk menghapus "putar otomatis" dan gunakan kode di bawah ini untuk memutar.
sumber
Chrome mengembalikan Janji dalam versi terbaru. Jika tidak, cukup:
sumber
Saya memiliki masalah yang sama, akhirnya saya menyelesaikan dengan:
sumber
Potongan kode ini diperbaiki untuk saya!
Kode @JohnnyCoder yang dimodifikasi
HTML:
JS:
sumber
Saya telah memperbaikinya dengan beberapa kode di bawah ini:
Saat Anda ingin bermain, gunakan yang berikut ini:
Begitu pula saat Anda ingin menjeda:
sumber
Berikut adalah solusi lain jika alasannya adalah unduhan video Anda sangat lambat dan video tidak buffer:
if (videoElement.state.paused) { videoElement.play(); } else if (!isNaN(videoElement.state.duration)) { videoElement.pause(); }
sumber
Sepertinya banyak programmer yang mengalami masalah ini. solusinya harus cukup sederhana. elemen media kembali
Promise
dari tindakan jadiharus melakukan triknya
sumber
berikut adalah solusi dari blog googler:
sumber
Semua video dukungan browser baru untuk diputar otomatis dengan hanya dibisukan jadi tolong masukkan Sesuatu seperti ini
URL video harus sesuai dengan status SSL jika situs Anda berjalan dengan https maka URL video juga harus dalam https dan sama untuk HTTP
sumber
Solusi terbersih dan paling sederhana :
sumber
Alasan satu - menelepon jeda tanpa menunggu janji permainan diselesaikan
terlalu banyak jawaban untuk skenario ini, jadi saya hanya akan merujuk ke dokumen terbaik untuk masalah itu:
https://developers.google.com/web/updates/2017/06/play-request-was-interrupted
Alasan kedua - memanggil putar saat tab tidak fokus
Dalam hal ini, browser dapat menginterupsi
play
dengan memanggilpause
saat tab tidak fokus. untuk menghemat sumber daya untuk tab aktif.Jadi Anda bisa menunggu tab difokuskan sebelum memanggil putar:
sumber
Saya mengalami masalah yang sama dan menyelesaikannya dengan menambahkan
autoplay
atribut secara dinamis daripada menggunakanplay()
. Dengan begitu browser dipikir untuk bermain tanpa mengalami kondisi balapan.sumber
Mencoba memutar ulang video secara otomatis dengan memanggilnya
play()
setelah berakhir, solusi batas waktu tidak berhasil untuk saya (betapapun lama waktu tunggu tersebut).Tetapi saya menemukan bahwa dengan mengkloning / mengganti video dengan jQuery ketika berakhir, itu akan berputar dengan benar.
Sebagai contoh:
dan
Saya menggunakan Chrome 54.0.2840.59 (64-bit) / OS X 10.11.6
sumber
Saya pikir mereka memperbarui video html5 dan menghentikan beberapa codec. Ini berhasil untuk saya setelah menghapus codec.
Pada contoh di bawah ini:
sumber
Ketika Anda melihat kesalahan dengan
Uncaught (in promise)
Ini berarti Anda harus menangani janji dengan.catch()
dalam kasus ini,.play()
mengembalikan sebuah janji. Anda dapat memutuskan apakah Anda ingin memasukkan pesan, menjalankan beberapa kode, atau tidak melakukan apa-apa, tetapi selama Anda memiliki.catch()
kesalahan itu akan hilang.sumber
Saya telah menggunakan trik untuk mengatasi masalah ini. Tentukan audio var variabel global;
dan di pemeriksaan fungsi
dan di fungsi stop
jadi panggilan berikutnya
audio.play
, audio akan siap dari '0' currentTimeSaya dulu
tapi tidak berhasil. Terima kasih.
sumber