2016-10-27 3 views
1

Ich frage mich, ob es möglich ist, den Start & End-Bytes in HTTP-Bereich Anforderungen zu bestimmen oder lassen Sie den Browser irgendwie wissen, wo zu starten und lassen Sie es einige Benutzer verwenden definierte Chunk-Größe oder so. Ich habe eine Datei in meiner Datenbank und es ist in mehrere Chunks aufgeteilt, jeder Chunk ist 2 MB.Wie HTTP-Bereich Anfrage Start-und End-Bytes (Nodejs + Mongodb)

z. 20 MB-Datei => 10 Chunks

Wenn der Browser startet die Datei (Video-Datei) herunterladen, ich habe studiert Chrome, es denden prüft den 'range=bytes 0-' Byte-Bereich, und wenn der Server antwortet erfolgreich mit dem ‚richtigen‘ Bytes und 206 Header zurück, dann sendet es eine weitere Anforderung für das End-Bytes der Datei zB 'range=bytes 1900000-',

es ist einfach checkes, wenn Ihr Server

Auf dem Serverside gut für die Teilantwort antwortet ich meine App codiert habe, so dass sie schicken 2 MB Teiltöne, wenn Sie es schön dazu fragen :)

Was ich will, der Browser

range=bytes 0-'

range=bytes 2000000-4000000 bytes'

range=bytes 4000000-6000000 bytes'

Aber wenn Sie einen Teil fragen, die in einem 2MB chunk fit tun zu tun, wird es einen Fehler geben. Oder es wird einfach nicht von der richtigen Position für eine Audio/Video-Datei abgespielt.

range=bytes 2500000-4000000 bytes'

range=bytes 0-1000000 bytes'

dies einen Fehler geben, weil ich nicht von einem Teil eines Chunks zu senden beginnen. Ansonsten muss ich meine Chunks in Scheiben schneiden und einige Pufferoperationen durchführen. Aber ich möchte es sauber halten. Wenn dies möglich ist, lass es mich wissen.

Antwort

3

Ich gehe davon aus, dass Sie eine mp4-Datei streamen? Verschiedene Teile (Kästchen) des MP4 haben unterschiedliche Zwecke, es ist nicht möglich, zu einer zufälligen Position in der Datei zu springen und das Abspielen zu beginnen, ohne zuerst den Ort jedes Rahmens durch Vorladen des Indexes (MOOV) zu identifizieren. Der MOOV kann am Anfang oder Ende einer Datei stehen, so dass der Browser das Ende der Datei zuerst benötigt. Er kann dies bestimmen, indem er von Anfang an beginnt und nach dem Moov sucht, wenn es nicht am Anfang ist, wird es einen Zeiger auf den Ort des nächsten Kästchens geben. Es kann einen Frosch durch die Datei springen, bis es den Index findet. Sobald der MOOV-Header heruntergeladen wurde, wird der Browser den genauen Byte-Offset und die Größe jedes einzelnen Frames im Video kennen und kann während der Suche um die Datei herumspringen. Das ist alles möglich, weil der Browser weiß, wie man mp4 nativ analysiert. TLDR. Nein, Ihre Lösung wird nicht funktionieren.

+0

Ich implementiere partielle Downloads nicht nur für mp4, sondern auch für andere Dateitypen, zB Audiodateien, ISO-Dateien usw. Ich wusste nichts über die Moov-Index-Sache. Aber ich bin gespannt wie es mit MongoDB Gridfs funktioniert. Der mongodb nodejs-Treiber teilt die Datei auch in Chunks auf und wenn ich die Datei abrufen möchte, beginnt der mp4 perfekt zu streamen und es ist suchbar. Sie schneiden definitiv die Pufferlänge des Stücks ab, um dem angeforderten Bytebereich und so weiter zu entsprechen. Aber ich bin nicht dort noch, Dank für die Info though – webmaster