AVPhone 的一些说明

目前还没有在 .Net 下对它进行详细测试,但由于它是标准的 ActiveX,.Net 应该支持吧!

你可以在 .Net 中尝试直接打开 “HelloWorld” 示例程序,如果可以工作,那就没有什么问题了。对于同步 AVPhone 控件有所考虑,但同步不是绝对的,而是在一个可以接受的范围内动态变化。AVPhone 控件是视频及音频的实时捕获、压缩及回放控件,本身并不包含任何传输,但它使用了简单实用的接口,你可以容易地通过 Winsock 把数据传到任意一个或多个远端。

下面是一个简单的控件使用概要:

AVPhone 是一个用于实时视频和音频捕获、压缩、回放及存储的控件组。AVPhone 采用 VFW 及 WaveForm 技术编制,支持意ACM和ICM压缩引擎,包括H263及G723和MPEG4,捕获后的数据直接压缩到内存Byte数组内,可不产生文件,也可以直接写入AVI文件内。
安装程序中包含MyAVPhone示例程序,可在网上打可视电话。它包含四个控件:

1:VidCap,用于视频的内存级捕获及压缩。
第一步:连接视频设备: VidCap.Connect
你的系统内必须装有合乎 VFW 标准的视频捕获设备,在连接时你可以指定一个索引来连接到你想连接的设备,

如果忽略,VidCap 将连接到系统中第一个可用的视频设备。

第二步,调用 StartCapture 方法后,VidCap 立即开始捕获视频,每当捕获并压缩一帧图象,就会有 Frame

事件产生,其中参数 Data 为一 Byte 数组包含了图象数据。你可以在此操纵 Data 存盘或由传输通路例如

Winsock 发送到远端。VidCap.BitmapFormat 为一 Byte 数组中包含了压缩图象的格式。

第三步:本步骤是可选的。
选择ICM 压缩引擎: VidCap.Compressor = “h263″,当然,你可以把当前你系统的任意压缩引擎的四字节描述付给 VidCap。默认情况下 VidCap 使用 iv50 格式压缩图象,你可以仅仅通过一个名字就来指定任意的压缩引擎包括 MPEG4 来压缩图象。你也可以调用 VidCap.CompressorDlg 由用户自由选择。对于某些 ICM,在被打开之后必须要有 License 消息解锁才能工作,你可以在 DriverOpened 事件中使用 VidCap.SendMessage 来传递这些消息。
压缩速率:VidCap1.Rate,1-30。
捕获的格式:VidCap1.DeviceFormat。此属性为一 Byte 数组,包含了视频格式。或者直接调用

VidCap.Format 由用户自由选择。
压缩质量:Quality,0-100。
缩放比例:ZoomFactor,1 或 2 或 3 或 4 倍原始大小。
视频源及显示选择:调用 SourceDlg 或者 DisplayDlg。
每当图象尺寸改变,VidCap 将产生 Resize 事件。
每当控件被点击是会产生 Click 事件。

2:VidRnd,用于压缩视频的回放。
第一步:调用 VidRnd.StartDecompress 开始解压视频数据。其中参数 BitmapFormat 是压缩视频的格式,你

可以从另外的 VidCap 控件或 AVIFile 控件的 BitmapFormat 属性得到(或通过网络传输得到)。

第二步:每当有新的视频数据,就由 VidRnd.Frame Data 写入控件,控件会自动缓冲及解压并显示。每当缓冲

区的数据被显示完,BufferEmpty 事件将会产生,你可以在此写入新的视频数据到 VidRnd。

第三步:本步骤是可选的。
VidRnd 拥有和 VidCap 相似的 Rate 及 ZoomFactor 属性,SendMessage 方法和 Resize及Click事件

3:Audio,用于音频的捕获、压缩及回放。
第一步:Audio.CapConnect 连接音频设备。你可以由参数 Driver 指定一个设备索引或连接到缺省设备。参数

Format 指定压缩格式,缺省时使用 GSM610 格式,你可以通过选择不同的 Format 来指定任何 ACM 压缩格式

。你也可以调用 Audio.CompressorDlg 由用户自由选择。

第二步,调用 StartCapture 方法后,Audio 立即开始捕获视频,每当捕获并压缩一帧图象,就会有 Frame 事

件产生,其中参数 Data 为一 Byte 数组包含了音频数据。你可以在此操纵 Data 存盘或由传输通路例如

Winsock 发送到远端。Audio.WaveFormat 为一 Byte 数组中包含了压缩音频的格式。

第三步,如果你还要回放音频,你可以调用 Audio.FeedConnect 方法,其中参数 Wft 是压缩音频的格式,你

可以从另外的 Audio 控件或 AVIFile 控件的 WaveFormat 属性得到(或通过网络传输得到)。

第四步:每当有新的音频数据,就由 Audio.Frame Data 写入控件,控件会自动缓冲及解压并重放。每当缓冲

区的数据被显示完,BufferEmpty 事件将会产生,你可以在此写入新的视频数据到 Audio。

4:AVIFile,用于与 AVI 格式文件交换数据。
第一步:如果你要捕获并压缩视频及音频到 AVI 文件,你可以在 VidCap 及 Audio 开始工作后调用

AVIFile.Create “文件名”,VidCap.BitmapFormat, Audio.WaveFormat 方法,然后在每一个 VidCap 或 Audio

的 Frame 事件中把数据 Data 通过 AVIFile.WriteVideo 和 AVIFile.WriteAudio 存盘。

第二步:如果你要回放已压缩的 AVI 文件,你可以调用 AVIFile.OpenA “文件名” 后把VIFile.BitmapFormat

和 AVIFile.WaveFormat 传递到 VidRnd.StartDecompress 或 Audio.FeedConnect,并在使用 ReadAudio 和

ReadVideo 方法读取数据并由控件的 Frame 方法写入到控件进行回放,以后可以在控件的 BufferEmpty 事件

中继续读取 AVI 文件的数据并写入到控件。

下面这几行 VB 源代码演示了在同一台机器上进行视频及音频捕获、压缩及回放的最简代码。(HelloWorld 的完整源程序)

Private Sub Audio1_Frame(Data As Variant)
     Audio1.Frame Data
End Sub

Private Sub VidCap1_Frame(Data As Variant)
     VidRnd1.Frame Data
End Sub

Private Sub Form_Load()
    
     On Error GoTo ErrorHandle
    
     Audio1.CapConnect
     Audio1.StartCapture
    
     Audio1.FeedConnect Audio1.WaveFormat
    
     VidCap1.Connect
     VidCap1.StartCapture
    
     VidRnd1.StartDecompress VidCap1.BitmapFormat
     Exit Sub
    
ErrorHandle:
     MsgBox Err.Description, vbCritical
End Sub

来源:CSDN

相关日志

Leave a Reply