J'essaie de créer un serveur de streaming vidéo en utilisant le serveur HTTP Indy. J'utilise des requêtes à distance pour envoyer de gros fichiers. Un morceau de données a une longueur de 10 Mo. Si le fichier vidéo qui demande le client est inférieur à 10 Mo alors tout est OK et vido est joué. Mais si la taille du fichier est supérieure à 10 Mo, je renvoie le premier bloc de données. Ensuite, le client me demande un autre morceau de données à la fin du fichier, puis mon client dit que c'est un format vidéo méconnaissable. Quelqu'un peut-il me dire où est le problème dans mon code.Créer un serveur de streaming vidéo en indy
mon code serveur
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;
Et voici mon code client (j'utilise 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>
Lorsque les charges de page http5 contrôle vidéo envoie automatiquement une demande. Le client est une page html valide. Et je veux envoyer tous les fichiers volumineux comme demandes de distance. –