Ich versuche, Video-Streaming-Server mit Indy Http Server zu erstellen. Ich verwende Entfernungsanfragen, um große Dateien zu senden. Ein Datenblock ist 10 MB lang. Wenn die Videodatei, die den Client anfordert, kleiner als 10 Mb ist, ist alles in Ordnung und es wird Vido abgespielt. Aber wenn die Dateigröße länger als 10 MB ist, gebe ich den ersten Datenblock zurück. Dann fragt mich der Client nach einem weiteren Datenblock vom Ende der Datei und dann sagt mein Client, dass es ein nicht erkennbares Videoformat ist. Kann mir jemand sagen, wo das Problem in meinem Code ist?Erstellen Sie Video-Streaming-Server in Indy
mein Servercode
procedure TForm1.Button1Click(Sender: TObject);
begin
Caption := 'Running';
FServer := TIdHTTPServer.Create(Self);
FServer.DefaultPort := 7070;
FServer.OnCommandGet:[email protected]_Get;
FServer.Active := True;
end;
procedure TForm1.External_Get(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
FS: TFileStream;
Ranges: TIdEntityRanges;
Range: TIdEntityRange;
begin
Ranges := ARequestInfo.Ranges;
Range := Ranges.Ranges[0];
FS := TFileStream.Create('/home/user/Desktop/large_file.mp4', fmOpenRead or fmShareDenyWrite);
AResponseInfo.ContentType := 'video/mp4';
AResponseInfo.AcceptRanges := 'bytes';
AResponseInfo.ContentStream := TIdHTTPRangeStream.Create(
FS,
Range.StartPos,
Range.StartPos + 1024*1024*10,
True
);
AResponseInfo.FreeContentStream := True;
AResponseInfo.ContentRangeStart := TIdHTTPRangeStream(AResponseInfo.ContentStream).RangeStart;
AResponseInfo.ContentRangeEnd := TIdHTTPRangeStream(AResponseInfo.ContentStream).RangeEnd;
AResponseInfo.ContentRangeInstanceLength := AResponseInfo.ContentRangeEnd - Range.StartPos + 1;
AResponseInfo.ContentLength := FS.Size;
AResponseInfo.ResponseNo := 206;
end;
Und hier ist mein Client-Code (ich benutze Firefox):
<!DOCTYPE html>
<html>
<head>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
</head>
<body>
<video width="400" controls>
<source src="http://localhost:7070/test38.mp4" type="video/mp4">
Your browser does not support HTML5 video.
</video>
</body>
</html>
Wenn Seite geladen http5 Videosteuerung automatisch Anfrage sendet. Client ist eine gültige HTML-Seite. Und ich möchte alle großen Dateien als Bereichsanforderungen senden. –