Wie können die Byte-Range-Anforderungen von HTML5-Video (Pseudo-Streaming) funktionieren?

8

Wenn Sie ein HTML5-Video für ein Video abspielen, das auf einem Server gehostet wird, der Bereichsanforderungen akzeptiert, werden Sie beim Versuch, einen nicht gepufferten Teil des Videos zu finden, aus dem Netzwerkverkehr des Browsers erkennen macht eine Bytebereich-Anfrage. Ich nehme an, dass der Browser das Byte berechnet, indem er die gesamte Videogröße im Voraus kennt und eine konstante Bitrate annimmt (wenn Sie halb in den Fortschrittsbalken klicken, fordert er das Byte zur Hälfte an). Aber besonders wenn das Video eine variable Bitrate hat, scheint es unwahrscheinlich, dass das angeforderte Byte wirklich dem Zeitpunkt entspricht, auf den der Benutzer geklickt hat, und das Byte würde wahrscheinlich in die Mitte eines Rahmens fallen.

Wie weiß der Browser, was der Anfang des nächsten Frames ist, sobald er angefangen hat, ein beliebiges Byte zu holen?

    
bhh1988 12.08.2013, 01:24
quelle

2 Antworten

9

Ich nehme an, dass dein Video in einem Mp4-Container ist. Das mp4-Dateiformat enthält eine hierarchische Struktur von "Boxen". Eines dieser Felder ist das Feld Time-To-Sample (stts). Diese Box enthält die Zeit jedes Frames (in kompakter Form). Von hier aus können Sie den "Chunk" finden, der den Frame enthält, indem Sie das Sample-to-Chunk (stsc) -Atom verwenden. Und schließlich gibt das Chunk-Offset-Atom (stco) Ihnen den Byte-Offset in die Datei.

Die Gesamtdauer des Films wird im Movie header atom (mvhd) gespeichert. Wenn Sie das Scrub-Handle verschieben, wird basierend auf der Dauer des Films eine Zeit geschätzt. Wenn Sie den Scrub-Handle loslassen, wird eine Berechnung anhand des zuvor heruntergeladenen Dateiheaders durchgeführt und eine Anforderung wird gestellt.

Bearbeiten: Wenn es nicht mp4 ist, haben andere Container einen ähnlichen Mechanismus. Codec ist irrelevant.

    
szatmary 12.08.2013, 03:03
quelle
-1

Viele Video- / Medientypen, wie z. B. MPEG, sind in denselben Paketen mit fester Adresse codiert.

MPEG wurde ursprünglich auf 188-Byte-Paketen entworfen (ursprünglich als 8 Zellen der ATM-Transportschicht gewählt, obwohl das jetzt veraltet ist). Wenn Sie also ein Vielfaches dieser 188-Byte-Größe suchen, liest der Player gültige Pakete & amp; Stellt die Synchronisation wieder her, wenn der Anfang eines Frames gefunden wird.

Das aktuelle Bild kann angezeigt werden, wenn der Browser / Player einen I-Frame (oder Keyframe) erreicht, der unabhängig von anderen Frames decodiert werden kann. P- und B-Frames sind Interpolationen. Wenn Sie also nach ihnen suchen, können Sie noch kein Bild erstellen.

Siehe:

Thomas W 12.08.2013 01:29
quelle