⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 umvreceive.~pas

📁 音视频控件SunAM-V1.0 音视频控件SunAM-V1.0 音视频控件SunAM-V1.0 音视频控件SunAM-V1.0
💻 ~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 + -