Delphi 使用TStream从http服务器读取自定义流时的随机延迟
我使用TIdHttp(来自Indy组件)连接到支持Sony Remote Api的摄像头。摄像头将实时视图流发送到http连接,作为http GET命令的响应。我编写了一个TStream子类,并将其用作流类。以下是我连接到live stream的代码: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
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,那么您的应用程序中会出现一些奇怪的情况。