Wie werden Daten für Audio korrekt bereitgestellt?

8

Ich liefere Binärdaten für HTML5-Audio über die .aspx-Seite. Die Datei kann abgespielt werden, aber es gibt ein Problem mit SeekBar und Wiedergabe in Safari (iPad), Chrome und Firefox.
Bearbeiten Ich habe den Code und die vollständige Liste vereinfacht (hoffentlich nicht zu viel) präsentiert (Seitendateiname ist offensichtlich play.aspx).

%Vor%

So werden die Header Content-Length und Content-Type geliefert. Zwei <audio> -Tags ermöglichen das Vergleichen von Verhalten, wenn auf die Datei direkt oder über eine ASPX-Seite zugegriffen wird.

Die Frage ist, wie Daten für <audio> tag korrekt auf allen erforderlichen Browsern (ff, Safari, Chrome, IE9 +) bereitgestellt werden.

Probleme

Safari (iPad): Wenn die Wiedergabetaste gedrückt wird, wird der Sound abgespielt, aber es gibt "Streaming ..." anstelle von Seek Bar und das Abspielen scheint ewig zu dauern und der Sound kann nicht wiedergegeben werden.
Firefox (windows): Die Suchleiste wird angezeigt, zeigt aber eine zunehmende Zeit bis zum Ende und verhält sich bei der Wiedergabe korrekt.
Chrome (windows): Suchleiste korrekt aber kann nicht wiedergegeben werden.
IE10: OK

Ich habe ähnliche Fragen gefunden, aber ohne Antwort. Wenn man eine andere Seite mit fiddler beobachtet, scheint es, dass header Accept-Ranges: bytes und Content-Range: bytes 0-8100780/8100781 helfen können. Allerdings bieten die notwendigen Features zu schwierig zu sein als nur ein Versuch, also habe ich es nicht versucht.

Hinweis Ich suche nach einer Lösung für andere verbundene Probleme in Wie wird .m4a mit HTML5-Audio in IE (9+) und Safari (Pad) abgespielt?

    
IvanH 20.08.2013, 13:20
quelle

1 Antwort

8

Einfache Antwort: Es ist notwendig, mit einem Browser range request umzugehen.

Vollständige Geschichte

Beim Vergleich von Fiddler erfasster Kommunikation zwischen Firefox und IIS habe ich festgestellt, dass der Antwortstatus für den direkten Link 206 Partial Content und für den indirekten Link ist Link 200 OK .
Eine genauere Analyse der Anfrage zeigte, dass Firefox Range: bytes=0- und iPad Range: bytes=0-1 und später Range: bytes=0-fullsize anfordert ( Traffic erfassen) von iOS-Gerät ).
Die Einstellung von Response.StatusCode = 206 reicht aus, um Firefox, nicht aber Safari zu täuschen. Aber ich habe die Schlüsselinformationen gewusst und der Rest war einfach. Es ist notwendig, die range -Anfrage zu beachten, siehe: SO: HTML5-Video wird nicht wiederholt . Die Erklärung, wie es geht, habe ich in Aha gefunden! # 1 - ASP.NET ASHX Video-Streaming für HTML5-Video . Also der neue Code ist (nur aktiver Teil ist dargestellt Rest ist der gleiche wie in der Antwort):

%Vor%

Es ist wahrscheinlich bequem, andere Header hinzuzufügen ( Content-Disposition , Accept-Ranges , Access-Control-Allow-Origin ), aber die Absicht war die vorhandene Lösung so einfach wie möglich.

Lektion genommen : Wenn ich nicht auf <audio> fixiert worden wäre und auch nach <video> gesucht hätte, hätte ich die Lösung schneller gefunden.

    
IvanH 22.08.2013, 15:08
quelle