Единственная проблема на данный момент заключается в том, что в Firefox проигрыватель запрашивает только один кусок данных, но отлично работает на Chrome. Но я думаю, что это не проблема вашего кода

аюсь создать сервер потокового видео, используя сервер Indy Http. Я использую удаленные запросы для отправки больших файлов. Один кусок данных имеет длину 10 Мб. Если размер видеофайла, который запрашивает клиент, меньше 10 Мб, то все в порядке и проигрывается видео. Но если размер файла превышает 10 Мб, я возвращаю первую порцию данных. Затем клиент запрашивает у меня другую порцию данных из конца файла, а затем мой клиент говорит, что это неузнаваемый формат видео. Может кто-нибудь сказать мне, где проблема в моем коде.

мой код сервера

procedure TForm1.Button1Click(Sender: TObject);
begin
  Caption := 'Running';
  FServer := TIdHTTPServer.Create(Self);
  FServer.DefaultPort := 7070;
  FServer.OnCommandGet:=@External_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; 

А вот мой код клиента (я использую 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>

Ответы на вопрос(0)

Ваш ответ на вопрос