Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 使用TStream从http服务器读取自定义流时的随机延迟_Delphi_Indy_Http Streaming_Sony Camera Api_Tstream - Fatal编程技术网

Delphi 使用TStream从http服务器读取自定义流时的随机延迟

Delphi 使用TStream从http服务器读取自定义流时的随机延迟,delphi,indy,http-streaming,sony-camera-api,tstream,Delphi,Indy,Http Streaming,Sony Camera Api,Tstream,我使用TIdHttp(来自Indy组件)连接到支持Sony Remote Api的摄像头。摄像头将实时视图流发送到http连接,作为http GET命令的响应。我编写了一个TStream子类,并将其用作流类。以下是我连接到live stream的代码: liveStream := TLiveStream.Create; IdHttp1.Get('http://192.168.122.1:8080/liveview/liveviewstream', liveStream); TLiveS

我使用TIdHttp(来自Indy组件)连接到支持Sony Remote Api的摄像头。摄像头将实时视图流发送到http连接,作为http GET命令的响应。我编写了一个TStream子类,并将其用作流类。以下是我连接到live stream的代码:

  liveStream := TLiveStream.Create;
  IdHttp1.Get('http://192.168.122.1:8080/liveview/liveviewstream', liveStream);
TLiveStream类的定义如下:

TLiveStream = class(TStream)
public
    constructor Create;
    function Read(var vBuffer; aCount: Longint): Longint; override;
    function Write(const aBuffer; aCount: Longint): Longint; override;
    function Seek(const aOffset: Int64; aOrigin: TSeekOrigin): Int64; override;
end;
程序已成功连接到实时流,并开始从摄像头接收实时视图。但它会在五秒钟内随机停止从摄像机接收任何东西(程序处于空闲状态,不会冻结)。我用来自的THttpCli替换了TIdHttp,但问题没有解决

任何帮助都将不胜感激

编辑:

我使用curl工具来确定问题是否在我的程序中,但问题仍然存在。我嗅探摄像头和PC之间传输的数据包,以下是延迟时间的屏幕截图:


您可以显示服务器正在发送的HTTP响应头吗?
HTTP/1.1 200 OK内容类型:应用程序/八位字节流传输编码:chunked
请阅读以下内容:@mjn:
应用程序/八位字节流
不是MIME类型。blog引用的选项仅适用于
multipart/..
类型。除非摄像机确实在发送MIME编码的数据,但发送了错误的
内容类型
值。Indy/ICS没有理由会出现延迟,但Curl不会。还有别的事情。试着使用数据包嗅探器,比如WireShark,来找出网络上到底发生了什么。如果您看到实时数据毫不延迟地到达NIC,那么您的应用程序中会出现一些奇怪的情况。