大家好 我视频端的是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.   

    begin
      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把。。
      

  2.   

    我怀疑是出现异常传输你又try掉了。所以没释放,要用finally我觉得有道理 我试试看
      

  3.   

    内存还是增长 只是不那么飚了!是不是delphi的activeform做的ocx 有这方面的bug 还是我没有处理好?
      

  4.   

    你可以吧Stream流压缩,再解压这样要好些
      

  5.   

    你用JPG压缩这样难道不会影响质量吗