Ich habe eine Anwendung, die Videos aus unserer lokalen Datenbank streamen wollte. Ich habe gestern viel Zeit damit verbracht, zu versuchen, die Daten entweder RangeFileContentResult
oder RangeFileStreamResult
ohne Erfolg zurückgeben.RangeFileContentResult und Video-Streaming mit Fernanfragen
Kurz gesagt, wenn ich die Datei als eines dieser beiden Ergebnisse zurückgebe, kann ich nicht scheinen, ein Video zu erhalten, richtig zu streamen (oder überhaupt zu spielen).
Range: bytes=0-
Und die Antwort zur Verfügung gestellt kommt gibt diese Header als Beispiel:
Accept-Ranges: bytes
Content-Range: bytes 0-5103295/5103296
In Bezug auf den Netzwerkverkehr, bekomme ich
Die Anfrage vom Browser wird mit den folgenden Header gesendet eine Reihe von 206 für Teilergebnisse, dann eine 200 am Ende (nach Fiddler), die richtig erscheint. Die Netzwerk-Registerkarte von Chrome stimmt dem nicht zu und es gibt eine erste Anfrage (immer 13 Bytes, von denen ich annehme, dass es sich um einen Handshake handelt) und dann noch ein paar Anfragen, die entweder abgebrochen oder ausstehend sind. Soweit ich verstehe, ist das mehr oder weniger korrekt, 206 - Abbrechen, 206 - Abbrechen etc. Aber das Video wird nie abgespielt.
Wenn ich das Ergebnis von meinem Controller auf ein FileResult umschalte, wird das Video abgespielt und Chrome, IE10 und Firefox und scheint zu spielen, bevor das Ende des Downloads abgeschlossen ist (das fühlt sich ein wenig an wie es streamt! es ist nicht)
Aber mit der Reichweite Ergebnis bekomme ich nichts in Chrom oder IE und das gesamte Video-Downloads in einem Fall in Firefox.
Soweit ich verstanden habe, sollte die RangeFileContentResult
Antwort auf den Client mit einer Reihe von Bytes zum Download (was mir nicht scheint zu tun, es sagt nur, um die gesamte Datei (durch die obige Antwort dargestellt))). Und der Klient sollte darauf antworten, was er nicht zu tun scheint.
Hat jemand irgendwelche Gedanken in diesem Bereich? Speziell:
a) Sollte RangeFileContentResult
eine Reihe von Bytes zurück an den Client senden? b) Gibt es eine Möglichkeit, den Umfang der Bytes, die vom Client angefordert werden, explizit zu steuern? c) Gibt es irgendeinen Grund oder etwas, was ich hier falsch mache, was dazu führen würde, dass Browser das Video überhaupt nicht laden würden, wenn Sie eine RangeFileContentResult
anfordern?
EDIT: Hinzugefügt ein Diagramm, um zu beschreiben, was ich sehe:
EDIT2: Ok, also die Handlung verdichtet. Während des Spiel mit dem RangedFile gubbins brauchten wir eine andere System Testversion heraus zu drücken und ich verließ den ‚RangeFileContentResult‘ auf meiner Controller-Aktion wie folgt:
private ActionResult RetrieveVideo(MediaItem media)
{
return new RangeFileContentResult(media.Content, media.MimeType, media.Id.ToString(), DateTime.Now);
}
Eher seltsam, jetzt scheint dies auf unseren Azure wie erwartet zu funktionieren Systemtestumgebung, aber immer noch nicht auf meinem lokalen Rechner. Ich frage mich, ob es etwas IIS basiert, das glücklich auf Azure IIS8 funktioniert, aber nicht auf meiner lokalen 7.5-Instanz?
Hallo. Ich bin der Lib.Web.Mvc Autor und ich werde mich freuen, in dieser speziellen Ausgabe zu graben. Wir hatten eine ähnliche mit Safari auf dem iPad, die dadurch verursacht wurde, dass sie die Anfrage ohne Obergrenze machte, nur um die Information über die Datei zu bekommen. Der Browser löschte dann die Anfrage, ohne auf die Übertragung der Daten zu warten (im Allgemeinen wurde das Protokoll vom Browser verletzt). Dies könnte etwas Ähnliches sein. Bitte senden Sie mir eine E-Mail mit Details zu Ihrer Umgebung, damit ich das Problem erneut erstellen kann. Sie können auch den gesamten Quelltext von Lib.Web.Mvc und einige andere Dinge hier finden: http: \ tpeczek.codeplex.com. – tpeczek
@tpeczek Hallo Thomasz, danke dafür, kannst du mir die beste Adresse mitteilen, mit der ich dich kontaktieren kann. Die merkwürdigste Sache, die ich sehe, ist die Inkonsistenz zwischen dem Laden vom selben Build. z.B. Für Benutzer 1 funktioniert es, für Benutzer 2 nicht. Dann wird Benutzer 1 aktualisiert und es funktioniert, aber Benutzer 2 wird aktualisiert und nicht. Lass mich die beste Adresse wissen und ich werde dir ein paar Details geben. – dougajmcdonald
Der aus meinem Profil: [email protected] Bitte geben Sie so viele Details wie möglich an (Code, Video, beteiligte Browser, Hosting-Konfiguration, Ausnahmen, Logs etc.) – tpeczek