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

📄 dscn说明.txt

📁 如何在Delphi下实现画面捕捉、传输、以及文件的传输原理
💻 TXT
字号:
                                 DSCN使用说明

一、功能简述:

    DSCN是基于Microsoft DirectShow技术,在Delphi7及DsPack2.34上开发的用于实时视
频(摄像头、捕获卡)的采集、拍照、压缩、传输处理与解压回放的控件,包括TDSCNSender
和TDSCNReceiver两个控件。可用于局域网、互联网上的视频聊天、视频会议及视频直播系
统的开发。

    其中TDSCNSender是一个继承TVideoWindow的控件,它已经包括了摄像头或捕获卡视频
的捕获、控制(如制式、端子、亮度、对比度、色度、色饱和度等等)、预览、拍照及传输
处理。TDSCNReceiver也是一个继承TVideoWindow的控件,它负责把接收到经TDSCNSender
压缩及分包的视频数据再组包及解码,并把视频送TVideoWindow显示。

    1. TDSCNSender的内部功能如下:

                     |-------------------->TVideoWindow预览
                     |
                     |(P2P)            |-->送P2P发送器
     控制 拍照       |-->压缩-->分包-->|
      |    |         |.                |<--接收反馈
      |    |         |.
    视频捕获设备---->|.(共16路,每路可用于P2P或Broadcast)
                     |.
                     |(Broadcast)
                     |-->压缩-->分包-->送广播发送器

    2. TDSCNReceiver的内部功能如下:

    P2P或Broadcast接收器---->组包---->解码---->TVideoWindow显示。
                       |                            |       
                       |<----------P2P反馈----------|

二、安装:

    先在Delphi7中安装DsPack2.34,然后再在Delphi中打开DSCN_D7.dpr安装DSCN,并在
Delphi环境中添加库路径指向DSCN所在的文件目录。

三、TDSCNSender属性、方法、事件:

    TDSCNSender是继承TVideoWindow的,除了TVideoWindow原有的属性、方法和事件外,
还增加了以下属性、方法和事件:

    1. property DSCompany: string;
      被授权公司名称;
    2. property DSAuthoriseCode: string;
      授权码;
    3. property Devices: TStringList;
      只读,系统当前所有视频捕获设备的名称列表;
    4. property DSDeviceID: Integer;
      取得或选择视频捕获设备ID,第一个设备ID是0,依次类推;
    5. property VideoInputs: TStringList;
      只读,当前所选设备所有模拟视频输入端子的名称列表;
    6. property DSInputID: Integer;
      取得或选择模拟视频端子ID,第一个端子ID是0,依此类推;
    7. property VideoStandards: TStringList;
      只读,当前所选设备所有支持的视频制式的名称列表;
    8. property DSVideoStandard: string;
      取得或输入视频制式的名称,如PAL_B制式;
    9. property Formats: TStringList;
      只读,当前所选设备所有支持的视频格式的名称列表;
    10. property DSFormatID: Integer;
      取得或选择视频格式ID,第一个ID是0,依此类推;
    11. procedure SetVideoSourceProperty;
      显示当前所选设备的属性窗口;
    12. property DSCaptureRate: Double;
      取得或设置捕获的帧率(1-30FPS);
    13. procedure StartCapture;
      启动视频捕获;
    14. procedure StopCapture;
      停止视频捕获;
    15. property Capturing: Boolean;
      只读,为True说明正在捕获视频;
    16. property Brightness: Longint;
      取得或设置视频的亮度,
    17. property Contrast: Longint;
      取得或设置视频的对比度;
    18. property Hue: Longint;
      取得或设置视频的色度;
    19. property Saturation: Longint;
      取得或设置视频的色饱和度;
    20. function Shoot(FileDirectory: string; PicPrefix: string = ''; ShootFPS: Integer = 1; ShootCount: Integer = 1): Boolean;
      视频快照,FileDirectory:保存图片文件(JPG)的路径;
                PicPrefix:文件名的起名前缀;
                ShootPFS:快照频率,即每秒多少幅;
                ShootCount:本次快照的图片数;
    21. property Shooting: Boolean;
      只读,为True说明正在快照;
    22. property DSTextOnFrames: TTextOnFrames;
      在视频上显示文字TextOnFrame的集合,其属性如下:
      a. property Font: TFont;
        文字字体;
      b. property Text: string;
        文字串;
      c. property Top, Left, Right: Integer;
        定义文字显示的区域
      d. property Align: TTextOnFrameAlign;
        文字在显示区域显示的位置,对中、对左、对右;
    23. property DSTransmitters: TCollection;
      视频发送器DSCNTransmitter的集合,在DSTransmitters可添加最多16路。每路的
    属性、方法、事件如下:
      a. property FrameRate: Integer;
        本路传输的最高帧速(1-40FPS),如果想发送捕获的所有帧,这个值应大于DSCaptureRate;
      b. property SendMode: TSendMode;
        本路的用途,smP2P、smExP2P或smBroadcast;
      c. property Sending: Boolean;
        只读,指示本路是否正在传送;
      d. function StartSend: Boolean;
        开始本路传送,成功返回True;
      e. procedure StopSend;
        结束本路传送;
      f. function Feedback(Buffer: Pointer; Count: Integer): Boolean;
        如果SendMode=smP2P或smExP2P,则用于接收反馈的数据包;Broadcast没有反馈。
      g. property OnStartSend: TOnSendState;
        在开始传送时触发;
      h. property OnStopSend: TOnSendState;
        在结束传送时触发;
      i. property OnSendBuffer: TOnSendBuffer;
        输出已分包的待发送数据包时触发,FrameID是数据包所在的帧号,FrameID=0说
      明本帧是关键帧,FrameID<0说明这个包是一个控制包;
      j. property OnSendRates: TOnSendRates;
        定时触发以输出传送帧速及位速。
    24. property DSCompressFilter: TBaseFilter;
      用于视频压缩的编码器(必须指定!),可以在设计阶段选择使用XVID或DIVX等MPEG4
    编码器;
    25. property DSOnCaptureFrame: TOnBuffer;
      在捕获到视频帧时触发;
    26. property DSOnStartCapture: TOnStartCapture;
      在启动捕获后触发;
    27. property DSOnStopCapture: TNotifyEvent;
      在停止捕获后触发;
    28. property DSOnCaptureRate: TOnCaptureRate;
      定时触发以输出捕获帧速。
    29. property DSOnBrightness: TDSOnQuality;
        property DSOnContrast: TDSOnQuality;
        property DSOnHue: TDSOnQuality;
        property DSOnSaturation: TDSOnQuality;
      在启动和停止捕获时触发输出当前的亮度、对比度、色度、色饱和度参数;
    30. property DSOnShootFinish: TNotifyEvent;
      在完成本次快照后触发;

四、TDSCNReceiver属性、方法、事件:

    TDSCNReceiver是继承TVideoWindow的,除了TVideoWindow原有的属性、方法和事件外,
还增加了以下属性、方法和事件:

    1. property Receiving: Boolean;
      只读,指示是否正在接收视频;
    2. function WriteBuffer(Buffer: Pointer; Count: Integer): Boolean;
      把网络接收器接收到的数据送入TDSNVideoReceiver进行处理;
    3. procedure StopReceive;
      停止接收视频,在执行这个命令前必须先断开网络的接收。
    4. property DSTextOnWindows: TTextOnWindows;
      在接收视频上显示文字TextOnWindow的集合:
      TTextOnWindows:
      a. procedure ShowAllText(Transparent: Boolean = True);
        显示TTextOnWindow集合里的所有项,Transparent=True说明使用透明叠加;
      b. procedure ErasureAllText;
        擦除所有显示的文字;
      TTextOnWindow:
      a. property Font: TFont;
        文字字体;
      b. property Text: string;
        文字串;
      c. property Top, Left, Right: Integer;
        定义文字显示的区域
      d. property Align: TTextOnFrameAlign;
        文字在显示区域显示的位置,对中、对左、对右;
      e. property Alpha: Single;
        文字显示时的透明度,范围0-1,注意:视频上所有已显示的文字内容仅使
        用最后一次显示项的Alpha值;
      f. procedure ShowText(Transparent: Boolean = True);
        显示本项,Transparent=True说明使用透明叠加;
    5. property DSOnFeedback: TOnFeedback;
      如果当前接收的是用P2P模式发送过来的视频,则会产生本事件,在本事件中
    必须把产生的反馈数据发送回传送端。
    6. property DSOnStartReceive: TNotifyEvent;
      在开始接收视频时触发;
    7. property DSOnStopReceive: TNotifyEvent;
      在结束接收视频时触发;
    8. property DSOnReceiveRates: TOnReceiveRates;
      定时触发以输出接收视频的帧速与位速。
    9. property DSOnRecvFrame: TOnRecvFrame;
      接收到一帧视频数据时触发,FrameID=0指示是关键帧。

四、应用提示:

对TDSCNSender:

    1. 注意各种名称列表的产生顺序,Devices是控件产生时就首先产生的,而其它
列表VideoInputs、VideoStandards、Formats则是在选择了DeviceID后才根据该设备
的情况来产生而且也不一定有相应的内容,比如摄像头就可能没有VideoInputs和
VideoStandards。选择了DeviceID后,DSInputID、DSVideoStandard、DSFormatID会
自动选择当前设备的默认项,但如果列表里没任何项,则值被设成-1,同时,DSCap-
tureRate也会取回默认捕获帧速。
    2. Brightness、Contrast、Hue、Saturation会在启动捕获后从事件中取回当前
的值,包括对应项是否有效、最小值、最大值、当前值。
    3. 注意有些属性值在捕获开始后修改的话可能会导致捕获自动重启或在下次重
启后才能生效。
    4. TextOnFrame是直接在帧上写文字的,所以它会和捕获的视频合成一起传输给
TDSCNReceiver。要注意的是,只有捕获的视频格式是RGB的才能在帧上写文字,否则
文字不会写到帧上。另外,TextOnFrame是要耗费一定的CPU时间而且经压缩和解压后
的文字在接收端显示可能会不很清楚,所以,除非必要,尽量不要使用,可以用把文
字传到客户端后,由TDSCNReceiver的TextOnWindow进行显示的方法来实现。
    5. DSCompressFilter是一定要选择的而且要使用能产生关键帧的压缩器,否则
可能会导致视频传输的错误。另外,并非所有格式的视频都能压缩和传输,这要取决
于所选择的压缩器。
    6. 在每一传输路中的FrameRate最大可以设为40FPS,如果要想把捕获的视频的
所有帧都传输出去,这个值必须大于捕获的DSCaptureRate。但FrameRate并非实际的
传输帧速,实际的传输帧数会根据机器的繁忙程度、所设置的传输模式以及当时网络
的情况变化的。
    7. smBroadcast模式没有要求客户端返回反馈信息,它只是按FrameRate设置的
帧速,尽可能快的把捕获到的帧传输出去,也没有可靠的传输机制。smP2P及smExP2P
模式要求客户端返回反馈信息,这两种模式提供了可靠的传输机制,但smExP2P在目
前只是一种试验性质的传输模式,按理说它会比smP2P传输的速度快。smBroadcast一
般只适合局域网,smP2P适合时延小的互联网,smExP2P适合时延比较大的互联网,它
们所耗资源是这样:smBroadcast < smP2P < smExP2P。
    8. 每一传输路中OnSendBuffer事件是输出经分包了的视频数据,它的一个输出
参数FrameID,其编码是从关键帧开始(编码0)到下一个关键帧的前一帧结束的。但传
输控制信息也是从这个事件中输出并要求传给接收端的,为了和视频数据分开识别,
当这个包是控制信息时,FrameID的值被设成小于0,另外,如果是控制信息,网络发
送器必须要立即把它发送出去。还有就是,每个数据包的前18个字节是留给开发者使
用的,开发者可以使用这些保留空间传输自己的信息。

对TDSCNReceiver:

    1. 视频接收无需任何人为的编程控制,它是根据发送端发送过来的控制信息自动
工作的,这给开发者的开发带来极大的方便。当如果要使用P2P模式的话,OnFeedback
这个事件的代码还是要写的,它只是简单的把事件产生的包发送回发送端就可以了。
    2. 这里要说一下的是TextOnWindow,它是把文字直接显示在VideoWindow上的,
TextOnWindow不会自动工作,它需要编程执行ShowText才能把文字显示项显示在Window
上,并要执行ErasureAllText来擦除显示的文字。


QQ:93202767(网上飘)

⌨️ 快捷键说明

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