📄 tvideothreadunit.pas
字号:
unit TVideoThreadUnit;
interface
uses
Classes, IdTCPServer, IdGlobal,SysUtils,ZLib;
type
TVideoThread = class(TThread)
private
SysThread:TIdPeerThread;
procedure UnCompressBitmap(Data:TMemoryStream; bmp: TMemoryStream);
protected
procedure Execute; override;
Public
constructor Create(AThread:TIdPeerThread);
destructor Destroy; override;
end;
implementation
uses Main;
constructor TVideoThread.Create(AThread:TIdPeerThread);
begin
inherited Create(True);
FreeOnTerminate:=True;
SysThread:=AThread;
Suspended := false;
//Priority:=tpIdle;
end;
procedure TVideoThread.UnCompressBitmap(Data:TMemoryStream; bmp: TMemoryStream);
var
ms : TMemoryStream;
buf : pointer;
size : integer;
TmpStr: String;
begin
SetLength(TmpStr, Data.Size);
Move(Data.Memory^, TmpStr[1], Data.Size);
try
DecompressBuf(@TmpStr[1], Length(TmpStr),Length (TmpStr) * 3, buf, size);
except
end;
ms := TMemoryStream.Create;
ms.Write(buf^, size);
FreeMem(buf);
ms.Position := 0;
Assert(bmp<>nil);
bmp.LoadFromStream(ms);
ms.Free;
end;
procedure TVideoThread.Execute;
var
MyStream,MyTempBmp:tmemorystream;
Thesize:integer;
begin
//循环接收图像
MyStream:=tmemorystream.Create;
MyTempBmp:=tmemorystream.Create;
HgzFsb.AddLineStr('开始视频了或! ' , 1, False);
try
repeat
Thesize:=SysThread.Connection.ReadInteger;
SysThread.Connection.ReadStream(MyTempBmp,Thesize,False);
MyTempBmp.Position :=0;
UnCompressBitmap(MyTempBmp,MyStream);
MyStream.Position :=0;
HgzFsb.Videobmp.LoadFromStream(MyStream);
HgzFsb.Image1.Width := HgzFsb.Videobmp.Width;
HgzFsb.Image1.Height:= HgzFsb.Videobmp.Height;
HgzFsb.Image1.Canvas.Draw(0, 0, HgzFsb.Videobmp);
MyStream.Clear;
MyTempBmp.Clear;
until (SysThread.Connection.Connected=False);
except
end;
HgzFsb.AddLineStr('终止视频了或! ' , 1, False);
end;
destructor TVideoThread.Destroy;
begin
inherited destroy;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -