HTML5-Audio-Tag, das die falsche MP3-Dauer in Chrome anzeigt

8

Wenn ich versuche, einige meiner MP3s über den HTML5-Player abzuspielen, scheint der Player zwei verschiedene Dauerzeiten zurückzugeben. Wenn ich die Dauer mit jQuery abfrage, erhalte ich die aktuelle Dauer, aber im Standard-Chrome-Player versucht das Lied deutlich länger zu spielen, als das Lied tatsächlich ist. Dies ist kein Problem in Safari (7.0.1 auf MacOSX). Was verursacht dieses Problem bei bestimmten MP3s und wie kann ich Chrome (V. 31) dazu bringen, die richtige Zeit zu verwenden?

Hier ist der Code:

%Vor%

Hier ist ein JSFiddle der Audiodatei:   http://jsfiddle.net/spKqh/5/

    
Colin 20.12.2013, 20:30
quelle

1 Antwort

17

Das alles läuft auf die spezifische MP3-Datei hinaus. Die Länge einer MP3-Datei zu schätzen, klingt wie eine einfache Aufgabe, aber es gibt keinen richtigen Weg, dies zu tun. Es gibt verschiedene Markierungsstandards beim Spielen und manchmal speichern solche Markierungen eine Länge, die korrekt sein kann oder nicht. Ein anderer Ansatz besteht darin, zu bestimmen, ob die MP3-Datei eine Datei mit konstanter oder variabler Bitrate ist, und dann einige Zahlen zu knacken, um die Länge zu bestimmen.

Meine Vermutung ist, dass Safari das erstere (Schätzung mit Tags) verwendet, um die wahre Länge von 126 Sekunden zu finden, während Chrome letzteres (Schätzung nach Bitrate und Dateigröße) auf eine Länge von 227 Sekunden schätzt. Weiter erklären:

Ich habe die fragliche MP3 zur Analyse heruntergeladen (clown-car_2.mp3). Es ist 9096504 Bytes lang. Laut Wiedergabeprogrammen wird es mit einer konstanten Bitrate von 320 Kilobit pro Sekunde codiert. Angenommen, ein Kilobit ist 1000 Bits:

%Vor%

Was ist hier los? Die MP3-Datei enthält eine Menge Gepäck in Form von zusätzlichen Metadaten. FFmpeg identifiziert es als eine Motion-JPEG-Videospur (wahrscheinlich ein statisches Cover-Art-Bild). Das wirft wahrscheinlich die Längenberechnung ab.

Ich habe FFmpeg verwendet, um die MP3 neu zu codieren, während ich die Metadaten schrubbe:

%Vor%

Dieser Befehl ignoriert die Videospur ( -vn ) und wandelt die codierte Audiodatei verlustfrei um (ohne Verlust von Audioqualität). FFmpeg identifiziert diese Datei als 126 Sekunden (während 227 Sekunden zuvor beansprucht). Beachten Sie, dass diese neue Datei 5043953 Byte ist:

%Vor%

Sie sollten also daran arbeiten, diese MP3-Dateien zu straffen, indem Sie die unförmigen Metadaten verlieren (und vielleicht eine niedrigere Bitrate als 320 kbit / s in Betracht ziehen).

    
Multimedia Mike 21.12.2013, 06:58
quelle