Google vient de changer la manière dont les précharges Google Chrome audio
et video
; voir: https://googlechrome.github.io/samples/media/preload-metadata
Je crois comprendre que le simple fait de définir l'attribut preload
sur auto
devrait résoudre le problème. Cependant, je n'ai pas pu le faire:
let mp3 = 'https://s3-staging.read2me.online/audio/5a745d88483d86.76121223.mp3';
let audio = new Audio(mp3);
audio.preload = 'auto';
audio.play();
<audio src="https://s3-staging.read2me.online/audio/5a745d88483d86.76121223.mp3" preload="auto" autoplay></audio>
Ces deux jeux cesseront de jouer dans la minute sur Chrome 64 et Chrome 65-dev (les autres navigateurs et les anciens Chromes ne sont pas affectés). J'ai reproduit ce problème sur Mac, Windows et Android.
Au cours de mon processus de débogage, j’ai attaché tous les événements médiatiques possibles à l’objet JS (c.-à-d. audio.addEventListener('timeupdate', () => { console.log('timeupdate') })
) et les événements se sont d'abord déroulés comme suit:
progress
timeupdate
progress
timeupdate
[...]
Plus tard, comme ceci:
timeupdate
timeupdate
timeupdate
[...]
Lorsque la lecture audio s'est arrêtée, j'ai reçu une poignée d'événements error
et le dumping audio.error
renvoie: PIPELINE_ERROR_DECODE: Failed to send audio packet for decoding: timestamp=81763265 duration=26122 size=201 side_data_size=0 is_key_frame=1 encrypted=0 discard_padding (ms)=(0, 0)
Comment puis-je réparer ça? Est-ce un bug de Chrome?
METTRE À JOUR:
MISE À JOUR 2:
chrome://media-internals/
révèle ceci:
MISE À JOUR 3:
Ce problème a été résolu dans Chrome 65.
Après quelques jours d'essais et d'erreurs et de recherches, j'ai confirmé ce qui ne fonctionne pas et ne fonctionne pas.
mp3wrap output.mp3 *.mp3
le fichier de sortie est toujours corrompu et s'arrête
ffmpeg -i "concat:0.mp3|1.mp3" -acodec copy output.mp3
le fichier de sortie est toujours corrompu et s'arrête
Concaténez/implodez simplement vos fichiers binaires audio (dans PHP je fais implode('', $audioBinaries)
puis exécutez mp3val -f concatenated-audio-file.mp3
. L'argument -f
est essentiel et signifie "essayez de corriger les erreurs".
Comment installer mp3val?
Sur MacOS: brew install mp3val
Sous Deb/Ubu: apt-get install mp3val
Même problème que je rencontre avec la technique de concaténation. Avec ffmpeg, cela fonctionne bien. Essayez ffmpeg avec cette commande.
ffmpeg -f concat -i "{textfile}" -c:v copy -ab 48k -y "{output}"
textfile aura une liste de fichiers écrits par ligne.