大家好 我视频端的是IDUCPClient 把视频按帧发送出去,在监控端Web的OCX中用IDUDPServer 接收数据,现在出现这样的问题,请大家帮忙!
1、IDUCPClient 和 IDUDPServer 的buffersize我都是设的10000,一般情况还好 但是有的帧大 会出现丢帧的情况,因此我吧两个的Buffersize都设置成了60000,图像时没问题了 ,可是web监控的内存一路往上狂升,紧接着内存资源不足!
现把部分代码贴在下面视频发送代码
memStream := TMemoryStream.Create;
jpg := TJpegImage.Create;
jpg.Assign(NewBitmap);
jpg.CompressionQuality := 60;
jpg.JPEGNeeded;
jpg.Compress;
jpg.SaveToStream(memStream);
memStream.Position := 0;
jpg.Free;
Form1.IdUDPClient1.BroadcastEnabled := true; //用广播功能
if memStream.Size > Form1.IdUDPClient1.BufferSize then
begin
Form1.IdUDPClient1.SendBuffer("127.0.0.1", 7008, memStream.Memory^, Form1.IdUDPClient1.BufferSize);
end
else
begin
Form1.IdUDPClient1.SendBuffer("127.0.0.1", 7008, memStream.Memory^, memStream.Size);
end;
memStream.Free;
NewBitmap.Free;
web接收端OCX,使用delphi activeform开发,内存好像无法释放procedure TWAVideo.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
jpg: TJpegImage;
begin
try
jpg := TJpegImage.Create;
jpg.LoadFromStream(Adata);
Image1.Picture.Bitmap.Assign(jpg);
jpg.Free;
except
//...;
end;
end;
1、IDUCPClient 和 IDUDPServer 的buffersize我都是设的10000,一般情况还好 但是有的帧大 会出现丢帧的情况,因此我吧两个的Buffersize都设置成了60000,图像时没问题了 ,可是web监控的内存一路往上狂升,紧接着内存资源不足!
现把部分代码贴在下面视频发送代码
memStream := TMemoryStream.Create;
jpg := TJpegImage.Create;
jpg.Assign(NewBitmap);
jpg.CompressionQuality := 60;
jpg.JPEGNeeded;
jpg.Compress;
jpg.SaveToStream(memStream);
memStream.Position := 0;
jpg.Free;
Form1.IdUDPClient1.BroadcastEnabled := true; //用广播功能
if memStream.Size > Form1.IdUDPClient1.BufferSize then
begin
Form1.IdUDPClient1.SendBuffer("127.0.0.1", 7008, memStream.Memory^, Form1.IdUDPClient1.BufferSize);
end
else
begin
Form1.IdUDPClient1.SendBuffer("127.0.0.1", 7008, memStream.Memory^, memStream.Size);
end;
memStream.Free;
NewBitmap.Free;
web接收端OCX,使用delphi activeform开发,内存好像无法释放procedure TWAVideo.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
jpg: TJpegImage;
begin
try
jpg := TJpegImage.Create;
jpg.LoadFromStream(Adata);
Image1.Picture.Bitmap.Assign(jpg);
jpg.Free;
except
//...;
end;
end;
try
jpg := TJpegImage.Create;
jpg.LoadFromStream(Adata);
Image1.Picture.Bitmap.Assign(jpg);
finally
jpg.Free;
end;
高手继续上,小弟先说看法我怀疑是出现异常传输你又try掉了。所以没释放,要用finally你这种传输根本没考虑队列,一个劲的发出去。会堵塞丢包太正常了起码先zip一下把。server端口再unzipUDP是无连接类型,TCP是带连接类型。
你看QQ都从UDP换成了TCP,所以LZ,用TCP把。。