Estamos trabajando en una estación de trabajo de audio digital en el navegador. Necesitamos trabajar con múltiples archivos de audio en una pestaña. Usamos new Audio(audioUrl) para poder reproducir el audio en nuestro propio mezclador de audio. Ha estado trabajando para nosotros hasta ahora.
Con la última versión de Chrome (92), tenemos el problema de que el fragmento de código anterior provoca el siguiente error:
[Intervention] Blocked attempt to create a WebMediaPlayer as there are too many WebMediaPlayers already in existence. See crbug.com/1144736#c27No puedo acceder al enlace de error proporcionado, dice permiso denegado. ¿Y hay una solución sugerida para manejar esto?
ACTUALIZACIÓN: Dejé de usar HTMLAudioElement para AudioBufferSourceNode . Parece la única solución sencilla, ya que el equipo de Chrome está discutiendo para limitarlos de todos modos. Nota: es posible que necesitemos más de 1000 clips de audio para reproducir. Esto es en referencia al hilo de discusión de Chrome donde van a aumentar la cantidad de webmediaplayers a 1000 en el próximo lanzamiento para el 5 de agosto de 2021.
const MaxWebMediaPlayerCount = 75; class VideoProducer { static #documentForVideo static createVideo() { if (!this.#documentForVideo || this.#documentForVideo.videoCount === MaxWebMediaPlayerCount) { const iframeForVideo = document.body.appendChild(document.createElement('iframe')); iframeForVideo.style.display = 'none'; iframeForVideo.contentDocument.videoCount = 0; this.#documentForVideo = iframeForVideo.contentDocument; } this.#documentForVideo.videoCount++; const video = this.#documentForVideo.createElement('video'); return video; } foo() { const video = VideoProducer.createVideo(); // ... }Chrome 92 ha introducido un límite en la cantidad de etiquetas de audio y video que se pueden asignar en una pestaña en particular. 75 para navegadores de escritorio y 40 para navegadores móviles.
Por ahora, la única solución es limitar la cantidad de etiquetas de audio y video creadas en la página. Intente reutilizar los elementos de audio/video ya asignados.
El número solo se puede aumentar pasando el siguiente indicador al iniciar Chrome, por ejemplo --max-web-media-player-count=5000 (Por supuesto, no podemos esperar que el usuario final haga esto)
Código fuente relacionado aquí: https://chromium-review.googlesource.com/c/chromium/src/+/2816118
Editar:
Antes de desasignar los elementos de audio/video, la siguiente configuración parece forzar la limpieza del elemento.
mediaElement.remove(); mediaElement.srcObject = null;Sí, a mí también me rompió el juego. Esto es lo que encontré como solución, espero que esto ayude mientras tanto:
function playSound( ) { var jump_sound = new Audio("./jump.mp3"); jump_sound.play(); jump_sound.onended = function(){ this.currentSrc = null; this.src = ""; this.srcObject = null; this.remove(); }; }Nota: aún se bloquea si hay demasiados sonidos simultáneos, pero con este código, el bloqueo es temporal.
Chrome versión 92.0.4515.131 parece resolver el problema