Chrome: Abspielen mancher Ogg Files nicht möglich

Dienstag, 22. Januar, 2013

Mehr durch Zufall habe ich festgestellt: manche meiner Stereo-Ogg Files lassen sich im Chrome mit dem html5 audio player gar nicht abspielen. Firefox spielte sie allesamt klaglos.

Ich habe zwar schon als Stereo-Quelle MP3 Dateien in verschiedenen Bitraten, aber alle Ogg Files, die daraus erstellt werden, gehen vorher durch ffmpeg und werden zu PCM WAV Dateien umgewandelt.

  • Die Quelle zum Encoden nach Ogg ist somit immer WAV mit 44.1 kHz.
  • Encoder ist immmer oggenc2 - also immer derselbe Encoder und denselben Parametern.

Also habe ich irgendwann die Suche nach Encoder-Problemen aufgegeben.

Soweit ich es debuggt habe, wird im Javascript-Code das Audio Objekt erfolgreich initialisiert. Auch die Methode play() wird erfolgreich aufgerufen. Chrome macht anschliessend - was man in der Entwicklerkonsole unter Netzwerk sieht - partial Requests auf das Audiofile. Und hier bleibt er hängen: “pending” steht da im Status.

2013-01-22-chrome-html5-ogg.png

Workaround:
Was ich gefunden hab: die URLs der Audiosourcen werden um ein “?” ergänzt - und schon funktionierts im Chrome.

also ALT:

<audio>
  <source src="/data/song_2.0_.ogg" type="audio/ogg">
  <source src="/data/song_2.0_.mp3" type="audio/mp3">
  (...)
</audio>

und NEU:

<audio>
  <source src="/data/song_2.0_.ogg?" type="audio/ogg">
  <source src="/data/song_2.0_.mp3?" type="audio/mp3">
  (...)
</audio>

… und das Javascript Snippet:
aSource ist ein Array mit den Keys src (eine URL des Audios) und type (MIME Type). Wenn kein “?” in der Audio-URL vorkommt, wird dieses angefügt.

s+='<audio>';
(...)
  sourcesrc=String(aSource.src);
  if(sourcesrc.indexOf("?")<0) sourcesrc+="?";
  s+='<source src="' + sourcesrc + '" type="'+aSource.type+'">';
(...)
s+='</audio>';
(...)
document.getElementById("divaudios").innerHTML=s;

weiterführende Links