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

📄 umvsender.~pas

📁 音视频控件SunAM-V1.0 音视频控件SunAM-V1.0 音视频控件SunAM-V1.0 音视频控件SunAM-V1.0
💻 ~PAS
字号:
unit uMVSender;

interface

uses
  AVSender,
  ExtCtrls,
  StdCtrls,
  GlobalUnit,
  Dialogs,
  Forms,
  Controls,
  Graphics,
  Classes,
  Variants,
  SysUtils,
  Messages,
  Windows;

type
  TMvSender = class(TPanel)
  private
    FSenderForm: TSenderForm;
    FVideoFrameRate: Integer;
    FAudioDrvIndex: Integer;
    FVideoDrvIndex: Integer;
    FMaxKeyFrameInterval: Integer;
    FVideoMode: TVideoDispMode;
    FVideoRate: TVideoRate;
    FHasVideo: Boolean;
    FHasAudio: Boolean;
    FOnAudioOut: TOnAudioOut;
    FOnVideoOut: TOnVideoOut;
    FOnVolumeOut: TOnVolumeOut;
    procedure SetAudioDrvIndex(const Value: Integer);
    procedure SetMaxKeyFrameInterval(const Value: Integer);
    procedure SetVideoDrvIndex(const Value: Integer);
    procedure SetVideoFrameRate(const Value: Integer);
    procedure SetVideoMode(const Value: TVideoDispMode);
    procedure SetVideoRate(const Value: TVideoRate);
    procedure SetOnAudioOut(const Value: TOnAudioOut);
    procedure SetOnVideoOut(const Value: TOnVideoOut);
    procedure SetOnVolumeOut(const Value: TOnVolumeOut);
  protected
    procedure DoAudioOut(Abuf: Pointer; Asize: Cardinal);
    procedure DoVideoOut(Abuf: Pointer; Asize: Cardinal);
    procedure DoVideoShow(FrameImage: TGraphic);
    procedure DoVolumeOut(VolumeValue:integer);
  public
    constructor Create(A: TComponent); override;
    destructor Destroy;
    function ConnectDrv: Boolean;
    function DisConnectDrv: Boolean;
    function OpenVideo: Boolean;
    procedure CloseVideo;
    function OpenAudio: Boolean;
    procedure CloseAudio;
    procedure Init;
  published
    property HasAudio: Boolean read FHasAudio;
    property HasVideo: Boolean read FHasVideo;
    property AudioDrvIndex: Integer read FAudioDrvIndex write SetAudioDrvIndex;
    property VideoDrvIndex: Integer read FVideoDrvIndex write SetVideoDrvIndex;
    property MaxKeyFrameInterval: Integer read FMaxKeyFrameInterval write SetMaxKeyFrameInterval;
    property VideoFrameRate: Integer read FVideoFrameRate write SetVideoFrameRate;
    property VideoRate: TVideoRate read FVideoRate write SetVideoRate;
    property VideoMode: TVideoDispMode read FVideoMode write SetVideoMode;
    property OnAudioOut: TOnAudioOut read FOnAudioOut write SetOnAudioOut;
    property OnVideoOut: TOnVideoOut read FOnVideoOut write SetOnVideoOut;
    property OnVolumeOut: TOnVolumeOut read FOnVolumeOut write SetOnVolumeOut;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Standard', [TMvSender]);
end;

procedure TMvSender.CloseAudio;
begin
  FSenderForm.CloseAudio;
end;

procedure TMvSender.CloseVideo;
begin
  FSenderForm.CloseVideo;
  Canvas.Brush.Color := clBlack;
  Canvas.FillRect(Canvas.ClipRect);
end;

function TMvSender.ConnectDrv: Boolean;
begin
   ConnectDrv:=FSenderForm.ConnectDrv;
end;

constructor TMvSender.Create(A: TComponent);
begin
  inherited Create(A);
  Color := clBlack;
  BorderStyle := bsNone;
  BevelInner:= bvNone;
  Width:=176;
  Height:=144;
end;

destructor TMvSender.Destroy;
begin
  { FSenderForm.CloseVideo;
   FSenderForm.CloseAudio;
   FSenderForm.DisconnectDrv;
   Free; }
end;

function TMvSender.DisConnectDrv: Boolean;
begin
   DisConnectDrv:=FSenderForm.DisconnectDrv;
end;

procedure TMvSender.DoAudioOut(Abuf: Pointer; Asize: Cardinal);
begin
   if Asize<=0 then exit;
   if Assigned(FOnAudioOut) then begin
      FOnAudioOut(Abuf,Asize);
   end;
end;

procedure TMvSender.DoVideoOut(Abuf: Pointer; Asize: Cardinal);
begin
   if Asize<=0 then exit;
   if Assigned(FOnVideoOut) then begin
      FOnVideoOut(Abuf,Asize);
   end;
end;

procedure TMvSender.DoVideoShow(FrameImage: TGraphic);
begin
   Canvas.Lock;
   Canvas.Draw(0,0,FrameImage);
   Canvas.Unlock;
end;

procedure TMvSender.DoVolumeOut(VolumeValue:integer);
begin
   if Assigned(FOnVolumeOut) then begin
      FOnVolumeOut(VolumeValue);
   end;
end;

procedure TMvSender.Init;
begin
  FSenderForm:= TSenderForm.Create(self);
  FSenderForm.Visible :=false;
  FSenderForm.OnAudioOut:=DoAudioOut;
  FSenderForm.OnVideoOut:=DoVideoOut;
  FSenderForm.OnVideoShow:=DoVideoShow;
  FSenderForm.OnVolumeOut:=DoVolumeOut;
  PopupMenu:=FSenderForm.PopupSetting;
  FSenderForm.VideoDrvIndex := FVideoDrvIndex;
  FSenderForm.AudioDrvIndex := FAudioDrvIndex;
  FSenderForm.VideoMode := FVideoMode;
  FSenderForm.Init;
end;

function TMvSender.OpenAudio: Boolean;
begin
  OpenAudio:=FSenderForm.OpenAudio;
end;

function TMvSender.OpenVideo: Boolean;
begin
  FSenderForm.Init;
  OpenVideo:=FSenderForm.OpenVideo;
end;

procedure TMvSender.SetAudioDrvIndex(const Value: Integer);
begin
   FAudioDrvIndex:=Value;
end;

procedure TMvSender.SetMaxKeyFrameInterval(const Value: Integer);
begin
   FMaxKeyFrameInterval:=Value;
end;

procedure TMvSender.SetOnAudioOut(const Value: TOnAudioOut);
begin
   FOnAudioOut:= Value;
end;

procedure TMvSender.SetOnVideoOut(const Value: TOnVideoOut);
begin
   FOnVideoOut := Value;
end;

procedure TMvSender.SetOnVolumeOut(const Value: TOnVolumeOut);
begin
   FOnVolumeOut := Value;
end;

procedure TMvSender.SetVideoDrvIndex(const Value: Integer);
begin
   FVideoDrvIndex:=Value;
end;

procedure TMvSender.SetVideoFrameRate(const Value: Integer);
begin
   FVideoFrameRate:=Value;
end;

procedure TMvSender.SetVideoMode(const Value: TVideoDispMode);
begin
   FVideoMode:=Value;
end;

procedure TMvSender.SetVideoRate(const Value: TVideoRate);
begin
   FVideoRate:= Value;
end;


end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -