📄 umvreceive.pas
字号:
unit uMvReceive;
interface
uses
Windows, AVReceive, SysUtils, Classes, Controls, ExtCtrls, Graphics, Forms, GlobalUnit, Dialogs, VideoDisp;
type
TMvReceive = class(TPanel)
private
VideoDisp: TVideoDisp;
FReceiverForm: TReceiverForm;
FUserID: Cardinal;
FRecFileName: String;
FAudioDrvIndex: Integer;
VideoSize : Integer;
FOnVolumeOut: TOnVolumeOut;
procedure SetRecFileName(const Value: String);
procedure SetUserID(const Value: Cardinal);
procedure SetAudioDrvIndex(const Value: Integer);
procedure SetOnVolumeOut(const Value: TOnVolumeOut);
protected
procedure DoVideoShow(VideoSize: TVideoSize; Adata: Pointer; Asize: Cardinal);
procedure DoVolumeOut(VolumeValue:integer);
public
constructor Create(A: TComponent); override;
destructor Destroy;
procedure Init;
function StartReceiveVideo: Boolean;
procedure StopReceiveVideo;
function StartReceiveAudio: Boolean;
procedure StopReceiveAudio;
procedure SetInputVideo(Adata: Pointer; Asize: Cardinal);
procedure SetInputAudio(Adata: Pointer; Asize: Cardinal);
procedure StartRec;
procedure StopRec;
published
property AudioDrvIndex: Integer read FAudioDrvIndex write SetAudioDrvIndex;
property RecFileName: String read FRecFileName write SetRecFileName;
property UserID: Cardinal read FUserID write SetUserID;
property OnVolumeOut: TOnVolumeOut read FOnVolumeOut write SetOnVolumeOut;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Standard', [TMvReceive]);
end;
constructor TMvReceive.Create(A: TComponent);
begin
inherited Create(A);
//Color := clBlack;
BorderStyle := bsNone;
BevelInner:= bvNone;
Width:=176;
Height:=144;
end;
destructor TMvReceive.Destroy;
begin
FReceiverForm.StopReceiveVideo;
FReceiverForm.StopReceiveAudio;
FReceiverForm.Free;
end;
procedure TMvReceive.Init;
var
bh: tagBITMAPINFOHEADER;
begin
FReceiverForm:= TReceiverForm.Create(self);
FReceiverForm.Init;
FReceiverForm.OnVideoShow := DoVideoShow;
FReceiverForm.OnVolumeOut := DoVolumeOut;
FReceiverForm.Visible :=false;
VideoDisp:=TVideoDisp.Create(self);
VideoDisp.Width := Width;
VideoDisp.Height := Height;
VideoDisp.ParentWindow := self.Handle;
bh.biSize := Sizeof(tagBITMAPINFOHEADER);
bh.biPlanes := 1;
bh.biWidth := VideoDisp.Width;
bh.biHeight := VideoDisp.Height;
bh.biCompression := BI_RGB;
bh.biSizeImage := 176 * 144 * 3;
bh.biBitCount := 24;
bh.biXPelsPerMeter := 0;
bh.biYPelsPerMeter := 0;
bh.biClrUsed := 0;
bh.biClrImportant := 0;
VideoDisp.BitMapInfoHeader := bh;
VideoDisp.visible := true;
VideoDisp.Invalidate;
end;
procedure TMvReceive.SetAudioDrvIndex(const Value: Integer);
begin
FAudioDrvIndex:=Value;
end;
procedure TMvReceive.SetInputAudio(Adata: Pointer; Asize: Cardinal);
begin
FReceiverForm.OnReadAudio(Adata, Asize);
end;
procedure TMvReceive.SetInputVideo(Adata: Pointer; Asize: Cardinal);
var
W,H: word;
info: tagBITMAPINFOHEADER;
begin
move(Adata,VideoSize, sizeof(VideoSize));
move((pchar(Adata) + sizeof(VideoSize))^,W,Sizeof(W));
move((pchar(Adata) + sizeof(VideoSize)+2)^,H,Sizeof(H));
if (W<>VideoDisp.BitMapInfoHeader.biWidth) or (H<>VideoDisp.BitMapInfoHeader.biHeight) then
begin
info := VideoDisp.BitMapInfoHeader;
info.biWidth := W;
info.biHeight := H;
info.biSizeImage := W * H * 3;
VideoDisp.BitMapInfoHeader:=info;
VideoDisp.Invalidate;
end;
FReceiverForm.OnReadVideo(Adata, Asize);
end;
procedure TMvReceive.SetRecFileName(const Value: String);
begin
FRecFileName:=Value;
end;
procedure TMvReceive.SetUserID(const Value: Cardinal);
begin
FUserID := Value;
end;
procedure TMvReceive.SetOnVolumeOut(const Value: TOnVolumeOut);
begin
FOnVolumeOut := Value;
end;
procedure TMvReceive.StartRec;
begin
FReceiverForm.StartRec;
end;
procedure TMvReceive.StopRec;
begin
FReceiverForm.StopRec;
end;
function TMvReceive.StartReceiveAudio: Boolean;
begin
StartReceiveAudio := FReceiverForm.StartReceiveAudio;
end;
procedure TMvReceive.StopReceiveVideo;
begin
FReceiverForm.StopReceiveVideo;
end;
procedure TMvReceive.StopReceiveAudio;
begin
FReceiverForm.StopReceiveAudio;
end;
function TMvReceive.StartReceiveVideo: Boolean;
begin
StartReceiveVideo :=FReceiverForm.StartReceiveVideo;
end;
procedure TMvReceive.DoVideoShow(VideoSize: TVideoSize; Adata: Pointer; Asize: Cardinal);
begin
try
VideoDisp.DrawStream(pchar(Adata), True);
except
VideoDisp.Invalidate;
end;
end;
procedure TMvReceive.DoVolumeOut(VolumeValue:integer);
begin
if Assigned(FOnVolumeOut) then begin
FOnVolumeOut(VolumeValue);
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -