Wir verwenden ein FileStreamResult, um Videodaten für einen Silverlight MediaElement-basierten Videoplayer bereitzustellen:
%Vor% Leider lädt der Silverlight-Videoplayer die gesamte Videodatei herunter, bevor sie abgespielt wird. Dieses Verhalten wird erwartet, da unsere Preview
-Aktion das Herunterladen partieller Inhalte nicht unterstützt.
(Hinweis: Wenn die Datei in einem virtuellen IIS-Verzeichnis gehostet wird, können wir die Wiedergabe an einem beliebigen Ort im Video starten, während es noch heruntergeladen wird. Aus Sicherheits- und Überwachungsgründen können wir jedoch keinen direkten Download-Link bereitstellen Dies ist keine Option.)
Wie können wir die Controller-Aktion zur Unterstützung von partiellem HTTP-Inhalt verbessern?
Ich nehme an, wir müssen zuerst den Client informieren, dass wir es unterstützen (Hinzufügen einer "Accept-Ranges: Bytes" Header zu einer HEAD Anfrage), dann müssen wir den HTTP "Range" Header auswerten und den angeforderten Dateibereich streamen mit einem Antwortcode von 206. Funktioniert das mit ASP.NET MVC, das auf IIS6 gehostet wird? Gibt es bereits einen Code?
Siehe auch:
Es gibt ein Projekt auf CodePlex, das genau diese Funktionalität bietet.
Sieh es dir an. Es wurde speziell für dieses Szenario erstellt, in dem eine Aktion eine Anforderung für eine virtuelle Ressource darstellen und teilweise Inhalt zurückgeben soll, wenn dies gewünscht wird, ohne dass der Entwickler viel tun muss (ein Aktionsfilter und eine Auswahl von Ergebnistypen) / p>
Dann müssen Sie das Drosselungsmodul neu implementieren:)
Die Idee besteht darin, die Bitrate Ihres Videostreams zu berechnen und dann so viel wie nötig an den Client zu senden. Sie müssen also (ganz kurz) einen Block aus Ihrem Stream lesen und ihn für eine Sekunde an den Client senden.
Thread.Sleep (1000) ist nicht wirklich eine gute Idee für die Behandlung von IIS-Ressourcen, so dass Sie Dinge auf asynchrone Weise tun müssen. IAsyncResult wird dein Freund sein.
Es gibt viel Platz für alle Arten von Optimierungen.
Und das letzte ... Ich habe es als einfachen httphandler funktioniert, nicht als MVC ActionResult. Wenn es in Ihrer Website möglich ist, empfehle ich es als Handler zu tun.
Tags und Links asp.net-mvc http partial streaming