O
owned139
Gast
Hätte jetzt keine direkt Lösung, aber warum schaust du nicht einfach im Source von Kodi nach, wie die es gelöst haben?
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
die machen es alle so...Bagbag schrieb:Ich schätze dein Response wird erst beireturn Ok();
abgeschickt (weil du bis dahin noch Header ändern könntest?!). Google mal, wie du mit .NET Core wirklich die Response Streamen kannst.
[HttpGet]
public FileStreamResult GetTest()
{
var stream = new MemoryStream(Encoding.ASCII.GetBytes("Hello World"));
return new FileStreamResult(stream, new MediaTypeHeaderValue("text/plain"))
{
FileDownloadName = "test.txt"
};
}
Das problem ist dass es nicht funktioniert wenn ich einen Stream zurückgebe der erst noch beschrieben wird! das ist das hauptproblem hier.Bagbag schrieb:Offenbar musst du das Bedienen von Google erlernen. 3 Sekunden habe ich gebraucht um das zu finden:
C#:[HttpGet] public FileStreamResult GetTest() { var stream = new MemoryStream(Encoding.ASCII.GetBytes("Hello World")); return new FileStreamResult(stream, new MediaTypeHeaderValue("text/plain")) { FileDownloadName = "test.txt" }; }
Wenn die encodierung länger dauert als das abspielen dann ist das immer schlecht. Aber da kann man ja mit entsprechenden Optionen nachhelfen.Kokujou schrieb:wenn ich den Stream vor dem zurückgeben beschreibe dauert er 5 Stunden
Du musst ffmpeg asynchron aufrufen und dann halt das was aus der Pipe kommt "aufsammeln" und rausschicken.Kokujou schrieb:weil er dann die Antwort erst zurückgibt wenn die Konvertierung fertig ist.
ja, aber wie?andy_m4 schrieb:Wenn die encodierung länger dauert als das abspielen dann ist das immer schlecht. Aber da kann man ja mit entsprechenden Optionen nachhelfen.
Du musst ffmpeg asynchron aufrufen und dann halt das was aus der Pipe kommt "aufsammeln" und rausschicken.
und wie?Bagbag schrieb:Deine eigene StreamResult Klasse implementieren. Und du scheinst das Video mit h264 neu zu kodieren, natürlich ist das langsam. Du darfst nur den Container anpassen und die Mediastreams musst du 1:1 kopieren.
ich benutze ja extra einen wrapper... wie gesagt du siehst es doch in meinem codebeispiel, ich benutze ja ProcessAsync. Aber wie ich bereits sagte, wen ich den Stream zurückgebe wird er geschlossen und ffmpeg bricht ab, wenn nicht wartet er bis die konversion fertig ist...andy_m4 schrieb:Ähm. Du solltest schon die Programmiersprache kennen, die Du nutzt :-)
Die Klasse Process() bietet doch die benötigte Funktionalität an.
var ffmpeg = new Process();
var startinfo = new ProcessStartInfo("D:\\Programme\\ffmpeg\\bin\\ffmpeg.exe",
$"-i {filePath} -o -");
startinfo.RedirectStandardError = true;
startinfo.RedirectStandardOutput = true;
startinfo.RedirectStandardInput = true;
startinfo.UseShellExecute = false;
startinfo.CreateNoWindow = true;
ffmpeg.StartInfo = startinfo;
ffmpeg.ErrorDataReceived += OnErrorDataReceived;
ffmpeg.Start();
ffmpeg.BeginErrorReadLine();
return File(new BufferedStream(ffmpeg.StandardOutput.BaseStream), "video/mp4", "video.mp4");
ich kenn mich mit ffmpeg auch gar nicht aus ich dachte "-o -" würde das machenandy_m4 schrieb:Ich sehe bei Deinem Quelltext nicht so ganz durch. Zum Beispiel finde ich auch gar keinen richtigen Aufruf von ffmpeg. Ja. Du rufst das irgendwie auf. Übergibst offenbar auch irgendwie mit einen Dateinamen. Aber mehr ist da nicht erkennbar. Schon gar nicht, das Du ffmpeg anweist die Ausgabe nach stdout zu schicken.
nein ich sehe 5 google antworten die alle was anderes sagen also probier ich jeden aus und hoffe es funktioniert >.< warum können die keine anständigen parameternamen benutzen?Bagbag schrieb:
Du packst da einfach Parameter hin ohne zu wissen obs die gibt und was die machen?