一
引言
我们知道视频聊天软件的关键技术在于采集视频并实时传输给聊天软件在线的人对于视频的采集这里采用微软公司的关于数字视频的一个软件包VFW(Video for Windows)相信很多人对它都很熟习VFW能使应用程序通过数字化设备从传统的模拟视频源得到数字化的视频剪辑VFW的一个关键思想是播放时不需要专用硬件为了解决数字视频数据量大的问题需要对数据进行压缩而VFW引进了AVI的文件标准该标准未规定如何对视频进行捕捉压缩及播放仅规定视频和音频该如何存储在硬盘上及在AVI文件中交替存储视频帧和与之相匹配的音频数据通过VFW开发人员通过发送消息或设置属性来捕捉播放和编辑视频剪辑当用户在安装VFW时安装程序会自动地安装配置视频所需要的组件如设备驱动程序视频压缩程序等VFW主要由个模块组成VFW功能模块
AVICAPDLL 包含执行视频捕捉的函数它给AVI文件的I/O处理和视频音频设备驱动程序提供一个高级接口
MSVIDEODLL 包含一套特殊的DrawDib函数用来处理屏幕上的视频操作
MCIAVIDRV 包括对VFW的MCI命令解释器的驱动程序
AVIFILEDLL 包含由标准多媒体I/O(mmio)函数提供的更高的命令用来访问AVI文件
ICM 压缩管理器用于管理的视频压缩/解压缩的编译码器(Codec)
ACM 音频压缩管理器提供与ICM相似的服务适用于波形音频
对于视频的传输我们使用UDP来传因为UDP传输速度快TCP是面向连接的建立连接时双方需经过三次握手数据传输可靠FTPtelnet等就是基于TCP的UDP是面向非连接的发出信息不需对方确认但这样速度比TCP快但有可能丢失数据象SMTPtftp等就是基于UDP的另外UDP还支持广播UDP广播两种一种是directed broadcast比如你的网段是X你就往发就可以了另一种是limited broadcast广播地址是
二视频聊天软件的开发步骤
创建捕捉窗口采集视频
在进行视频捕捉之前必需要先创建一个捕捉窗口并应以此为基础进行所有的捕捉及设置操作捕捉窗口可用AVICap窗口类的CapCreateCaptureWindow函数来创建其窗口风格可设置为WSCHILD和WS_VISIBLE参数
有了捕捉窗口我们就可以将视频流和音频流捕捉到一个AVI文件中动态地同视频和音频输入器件连接或断开用Overlay或Preview模式对输入的视频流进行实时显示设置捕捉速率显示控制视频源视频格式及视频压缩的对话框创建保存或载入调色板将图像和相关的调色板拷贝到剪贴板将捕捉的单帧图像保存到BMP格式文件中
捕捉窗口和驱动程序的关联
仅仅一个捕捉窗口是不能工作起来的它必须要与一个设备相关联才能取得视频信号用函数CapDriverConnect可使捕捉窗与其设备驱动程序相关联
设置视频设备的属性
通过设置TcaptureParms结构变量的各个成员变量可以控制设备的采样频率中断采样按键状态行为设置好TcaptureParms结构变量后可以用函CapCaptureSetSetup使设置生效之后还可以用CapPreviewScaleCapPreviewRate设置预览的比例与速度也可以直接使用设备的默认值
打开预览
利用函数CapOverlay可选择是否采用叠加模式预览以使系统资源占用小视频显示速度加快然后用CapPreview启动预览功能这时就可以在屏幕上看到来自摄像头的图像了
使用捕捉窗回调函数
前的四个步骤就可以建立一个基本的视频捕捉程序了如果想自己处理从设备捕捉到的视频数据则要使用捕捉窗回调函数来处理比如一帧一帧地获得视频数据也可以以流的方式获得视频数据等等
传输视频流
使用回调函数可以取得第一帧的数据我们使用网络技术将数据发给其它机器其它机品将接收的数据显示出来
接收视频
接收UDP数据同时将接收到的数据回显出来这样就可以看到远处传来的视频了
三用Delphi编写程序代码
微软的VFW SDK只有VC和VB版并没有Delphi版不过在网上可以找到VFWPAS文件FWPAS文件声明了调用DLL中的各个函数和变量(注源代码中提供了VFWPAS文件)
下面就以Delphi开发一个网络视频聊天软件聊天软件分两个程序一个是视频采集程序并进行UDP广播的视频聊天软件服务器另一个是接收UDP广播程序显示传来的视频数据的视频聊天软件客户端
建立视频聊天软件服务器
)新建一个工程命名为Projectdpr并把VFWPAS加到USE中
)在Form上放置一个Tpanel控件该控件用于显示视频之后再放置两个Tbutton控件一个caption为开始另一个Name为停止放置一个UDP组件这里用indy的IdUDPClient用来传输视频如图示
用Delphi开发视频聊天软件(二)
用Delphi开发视频聊天软件(三)