Server für Ogg-Medien konfigurieren
HTML-<audio>
- und <video>
-Elemente ermöglichen die Medienpräsentation, ohne dass der Benutzer dazu Plug-ins oder andere Software installieren muss. Dieser Leitfaden behandelt einige Änderungen an der Serverkonfiguration, die möglicherweise notwendig sind, damit Ihr Webserver Ogg-Mediendateien korrekt bereitstellt. Diese Informationen können auch nützlich sein, wenn Sie auf andere Medientypen stoßen, die Ihr Server nicht bereits zu erkennen weiß.
Medien mit dem korrekten MIME-Typ bereitstellen
Dateien *.ogg
und *.ogv
, die Video enthalten (möglicherweise auch mit einer Tonspur), sollten mit dem MIME-Typ video/ogg
bereitgestellt werden. Dateien *.oga
und *.ogg
, die nur Audio enthalten, sollten mit dem MIME-Typ audio/ogg
bereitgestellt werden.
Wenn Sie nicht wissen, ob die Ogg-Datei Audio oder Video enthält, können Sie sie mit dem MIME-Typ application/ogg
bereitstellen, und der Browser behandelt sie als Videodatei.
Die meisten Server stellen Ogg-Medien standardmäßig nicht mit den korrekten MIME-Typen bereit, sodass Sie höchstwahrscheinlich die entsprechende Konfiguration dafür hinzufügen müssen.
Für Apache können Sie Folgendes zu Ihrer Konfiguration hinzufügen:
AddType audio/ogg .oga AddType video/ogg .ogv AddType application/ogg .ogg
Spezifische Informationen über mögliche Medientypen und die darin verwendeten Codecs finden Sie in unserem umfassenden Leitfaden zu Medienarten und -formaten im Web. Insbesondere der Artikel über Mediencontainerformate wird besonders hilfreich sein, wenn Sie Server richtig für Medien konfigurieren möchten.
HTTP 1.1-Bytebereichsanfragen korrekt behandeln
Um das Suchen und Abspielen von Bereichen der Medien zu unterstützen, die noch nicht heruntergeladen wurden, verwendet Firefox HTTP 1.1-Bytebereichsanfragen, um die Medien von der Zielposition des Suchvorgangs abzurufen. Zusätzlich verwendet er Bytebereichsanfragen, um zum Ende der Medien zu suchen (vorausgesetzt, Sie geben den Content-Length
-Header an), um die Dauer der Medien zu bestimmen.
Ihr Server sollte den HTTP-Header Accept-Ranges
: bytes
akzeptieren, wenn er Bytebereichsanfragen akzeptieren kann. Er muss auf alle Bytebereichsanfragen 206
: Partial content
zurückgeben; andernfalls können Browser nicht sicher sein, dass Sie Bytebereichsanfragen tatsächlich unterstützen. Ihr Server muss auch 206: Partial Content
für die Anfrage Range: bytes=0-
zurückgeben.
Weitere Informationen finden Sie in HTTP-Bereichsanfragen.
Regelmäßige Schlüsselbilder einfügen
Wenn der Browser durch Ogg-Medien zu einer bestimmten Zeit sucht, muss er zum nächstgelegenen Schlüsselbild vor dem Suchziel springen und das Video von dort aus herunterladen und dekodieren, bis die angeforderte Zielzeit erreicht ist. Je weiter Ihre Schlüsselbilder auseinander liegen, desto länger dauert dies, daher ist es hilfreich, Schlüsselbilder in regelmäßigen Abständen einzuschließen.
Standardmäßig verwendet ffmpeg2theora
ein Schlüsselbild alle 64 Bilder (oder etwa alle 2 Sekunden bei 30 Bildern pro Sekunde), was recht gut funktioniert.
Hinweis: Natürlich gilt: Je mehr Schlüsselbilder Sie verwenden, desto größer ist Ihre Videodatei, daher sollten Sie vielleicht ein wenig experimentieren, um das richtige Gleichgewicht zwischen Dateigröße und Suchleistung zu finden.
Überlegen Sie sich, das preload-Attribut zu verwenden
Die HTML-<audio>
- und <video>
-Elemente bieten das preload
-Attribut, das den Browser anweist, zu versuchen, die gesamte Media herunterzuladen, wenn die Seite geladen wird. Ohne preload
lädt der Browser nur genügend Medien herunter, um den ersten Videoframe anzuzeigen und die Dauer der Medien zu bestimmen.
preload
ist standardmäßig deaktiviert, daher könnten Ihre Benutzer es schätzen, wenn Sie preload
in Ihre Videoelemente einfügen, falls das Video der Hauptzweck Ihrer Webseite ist. Mit preload="metadata"
wird die Metadaten der Mediendatei und möglicherweise die ersten Bilder des Videos vorab geladen. Die Einstellung von preload
auf auto
weist den Browser an, automatisch mit dem Herunterladen der Medien zu beginnen, sobald die Seite geladen ist, in der Annahme, dass der Benutzer sie abspielen wird.
Konfiguration für ältere Firefox-Versionen
X-Content-Duration-Header bereitstellen
Hinweis: Ab Firefox 41 wird der X-Content-Duration
-Header nicht länger unterstützt. Siehe Firefox-Bug 1160695 für weitere Details.
Das Ogg-Format kapselt die Dauer der Medien nicht ein, sodass Gecko die Länge der Medien auf andere Weise bestimmen muss, damit die Fortschrittsleiste in den Videosteuerungen die Dauer des Videos anzeigen kann.
Es gibt zwei Möglichkeiten, wie Gecko dies tun kann. Der beste Weg ist die Bereitstellung eines X-Content-Duration
-Headers, wenn Ogg-Medien bereitgestellt werden. Dieser Header gibt die Dauer des Videos in Sekunden (nicht im HH:MM:SS-Format) als Gleitkommawert an.
Zum Beispiel, wenn das Video 1 Minute und 32,6 Sekunden lang ist, wäre dieser Header:
X-Content-Duration: 92.6
Wenn Ihr Server den X-Content-Duration
-Header bereitstellt, während Ogg-Medien bereitgestellt werden, muss Gecko keine zusätzlichen HTTP-Anfragen an das Ende der Datei senden, um deren Dauer zu berechnen. Dies macht den gesamten Prozess viel effizienter und genauer.
Als minderwertige Alternative kann Gecko die Videolänge basierend auf der Content-Length schätzen. Siehe den nächsten Punkt.
Keine HTTP-Komprimierung für Mediendateien verwenden
Eine übliche Methode, um die Last auf einem Webserver zu reduzieren, besteht darin, gzip- oder deflate-Komprimierung beim Bereitstellen an einen unterstützenden Webbrowser zu verwenden.
Obwohl es unwahrscheinlich ist, kann der Browser möglicherweise angeben, dass er HTTP-Komprimierung (gzip/deflate) unterstützt, indem er den Header Accept-Encoding: gzip,deflate
sendet, wenn er Mediendateien anfordert. Ihr Server sollte so konfiguriert sein, dass er dies nicht tut. Die Daten in Mediendateien sind bereits komprimiert, sodass Sie keinen wirklichen Vorteil aus der Komprimierung ziehen werden, und die Verwendung der Komprimierung macht es dem Browser unmöglich, das Video richtig zu durchsuchen oder dessen Dauer zu bestimmen.
Ein weiteres Problem mit der Erlaubnis von HTTP-Komprimierung für Medienstreaming: Apache-Server senden den Content-Length
-Antwortheader nicht, wenn gzip-Codierung verwendet wird.
Dauer von Ogg-Medien ermitteln
Sie können das Tool oggz-info
verwenden, um die Mediendauer zu ermitteln; dieses Tool ist im oggz-tools
-Paket enthalten. Die Ausgabe von oggz-info
sieht folgendermaßen aus:
$ oggz-info /g/media/bruce_vs_ironman.ogv Content-Duration: 00:01:00.046 Skeleton: serialno 1976223438 4 packets in 3 pages, 1.3 packets/page, 27.508% Ogg overhead Presentation-Time: 0.000 Basetime: 0.000 Theora: serialno 0170995062 1790 packets in 1068 pages, 1.7 packets/page, 1.049% Ogg overhead Video-Framerate: 29.983 fps Video-Width: 640 Video-Height: 360 Vorbis: serialno 0708996688 4531 packets in 167 pages, 27.1 packets/page, 1.408% Ogg overhead Audio-Samplerate: 44100 Hz Audio-Channels: 2
Beachten Sie, dass Sie die gemeldete Content-Duration-Zeile, die von oggz-info
ausgegeben wird, nicht direkt bereitstellen können, da sie im HH:MM:SS-Format vorliegt. Sie müssen sie lediglich in Sekunden umwandeln und dann diesen Wert als Ihren X-Content-Duration
-Wert bereitstellen. Einfach die HH, MM und SS in Zahlen aufteilen und dann (HH*3600)+(MM*60)+SS berechnen, um den Wert zu erhalten, den Sie angeben sollten.
Es ist wichtig zu beachten, dass oggz-info
offenbar einen Lesevorgang der Medien vornimmt, um deren Dauer zu bestimmen, sodass es sinnvoll sein könnte, den Dauerwert zu speichern, um lange Verzögerungen zu vermeiden, während der Wert für jede HTTP-Anfrage Ihrer Ogg-Medien berechnet wird.