De nuevo, trabajando en mi reproductor de audio...
He redescubierto un actualizador de mediasession en mi código que agrega una pequeña notificación desde el navegador con controles para mi música, y solía funcionar bien, un poco quisquilloso, pero ahora...
Nada. Jugué un poco y conseguí que mis botones de reproducción/pausa funcionaran, junto con las canciones siguiente/anterior y los botones de búsqueda, y el título de la música y el artista. Pero ahora descubrí que si presionas el botón de reproducción, el botón siguiente/anterior o, a veces, el botón de pausa, las opciones y los detalles de la canción desaparecen, dejándome solo con el botón de reproducción/pausa, que funciona perfectamente...
Ahora, al código. Tengo una función que carga las canciones en mi reproductor ( loadSong(songIndex) ), y cerca del final, tengo algunas líneas de código que restablecen los metadatos del navegador:
navigator.mediaSession.metadata.title = song.songname; navigator.mediaSession.metadata.author = song.artistname; navigator.mediaSession.metadata.artwork = ("./Music/" + song.thumbnail);El artista y el nombre funcionan perfectamente, pero la miniatura no... Más sobre eso en una pregunta separada.
Configuré los controles reales así:
/*media controls*/ let index = 0; let skipTime = 10; const actionHandlers = [ ['play', () => { main.playPauseControl.click(); navigator.mediaSession.playbackState = "playing"; updatePositionState();}], ['pause', () => { main.playPauseControl.click(); navigator.mediaSession.playbackState = "paused"; updatePositionState();}], ['previoustrack', () => { main.prevControl.click(); updatePositionState();}], ['nexttrack', () => { main.nextControl.click(); updatePositionState();}], ['seekbackward', (details) => { main.audio.currentTime = Math.max(main.audio.currentTime - skipTime, 0); updatePositionState();}], ['seekforward', (details) => { main.audio.currentTime = Math.min(main.audio.currentTime + skipTime, main.audio.duration); updatePositionState();}], ]; for (const [action, handler] of actionHandlers) { try { navigator.mediaSession.setActionHandler(action, handler); } catch (error) { console.log(`The media session action "${action}" is not supported yet.`); } }Tengo algunas otras cosas vinculadas a la mediaSession para poder registrar interacciones fuera del navegador.
main.audio.addEventListener('play', function() { navigator.mediaSession.playbackState = 'playing'; main.playPauseControl.classList.remove("paused"); }); main.audio.addEventListener('pause', function() { navigator.mediaSession.playbackState = 'paused'; main.playPauseControl.classList.add("paused"); });Ahora todo esto funciona, inicialmente, pero tan pronto como interactúo con el navegador, BOOM, todo desaparece. ¿Puede alguien, POR FAVOR, decirme qué está pasando? Esto me ha estado molestando por un tiempo...
PD: perdón por la pregunta larga.