用Delphi开发视频聊天软件
来源:天极开发 作者: 出处:综艺读书 2007-07-17 摘要:目前网上视频聊天软件、视频会议软件、可视IP电话软件随处可见,你是否想自己做一个玩玩?其实这类软件无非是视频加上网络而建成的。如果熟悉视频捕捉和网络传输技术,根本就难不倒你。
微软为软件开发人员提供了一个专门用于视频捕捉的VFW SDK(Video for Windows SDK),用它实现视频捕捉很简单,至于网络传输嘛,Delphi更是提供了N多种网络组件,随你用了。本文详细介绍了如何利用Delphi中开发视频聊天软件,同时给出了两个程序示例。
关键词:Delphi VFW 视频 视频会议 视频聊天 Video for Windows
一、引言
我们知道视频聊天软件的关键技术在于采集视频,并实时传输给聊天软件在线的人。对于视频的采集,这里采用微软公司的关于数字视频的一个软件包VFW(Video for Windows)。相信很多人对它都很熟习,VFW能使应用程序通过数字化设备从传统的模拟视频源得到数字化的视频剪辑,VFW的一个关键思想是播放时不需要专用硬件。为了解决数字视频数据量大的问题,需要对数据进行压缩,而VFW引进了AVI的文件标准。该标准未规定如何对视频进行捕捉、压缩及播放,仅规定视频和音频该如何存储在硬盘上及在AVI文件中交替存储视频帧和与之相匹配的音频数据。通过VFW,开发人员通过发送消息或设置属性来捕捉、播放和编辑视频剪辑。当用户在安装VFW时,安装程序会自动地安装配置视频所需要的组件,如设备驱动程序、视频压缩程序等。VFW主要由6个模块组成。VFW功能模块:
AVICAP.DLL 包含执行视频捕捉的函数,它给AVI文件的I/O处理和视频、音频设备驱动程序提供一个高级接口
MSVIDEO.DLL 包含一套特殊的DrawDib函数,用来处理屏幕上的视频操作
MCIAVI.DRV 包括对VFW的MCI命令解释器的驱动程序
AVIFILE.DLL 包含由标准多媒体I/O(mmio)函数提供的更高的命令,用来访问.AVI文件
ICM 压缩管理器,用于管理的视频压缩/解压缩的编译码器(Codec)
ACM 音频压缩管理器,提供与ICM相似的服务,适用于波形音频
对于视频的传输,我们使用UDP来传,因为UDP传输速度快,TCP是面向连接的,建立连接时双方需经过三次握手,数据传输可靠,FTP、telnet等就是基于TCP的,UDP是面向非连接的,发出信息不需对方确认,但这样速度比TCP快,但有可能丢失数据,象SMTP、tftp等就是基于UDP的。另外UDP还支持广播,UDP广播两种,一种是directed broadcast,比如你的网段是192.168.0.X,你就往192.168.0.255发就可以了。另一种是limited broadcast,广播地址是255.255.255.255
二、视频聊天软件的开发步骤
2.1 创建捕捉窗口,采集视频
在进行视频捕捉之前必需要先创建一个捕捉窗口,并应以此为基础进行所有的捕捉及设置操作。捕捉窗口可用AVICap窗口类的"CapCreateCaptureWindow"函数来创建,其窗口风格可设置为WSCHILD和WS_VISIBLE参数。
有了捕捉窗口,我们就可以将视频流和音频流捕捉到一个AVI文件中;动态地同视频和音频输入器件连接或断开;用Overlay或Preview模式对输入的视频流进行实时显示,设置捕捉速率,显示控制视频源、视频格式及视频压缩的对话框,创建、保存或载入调色板,将图像和相关的调色板拷贝到剪贴板,将捕捉的单帧图像保存到BMP格式文件中。
2.2 捕捉窗口和驱动程序的关联
仅仅一个捕捉窗口是不能工作起来的,它必须要与一个设备相关联才能取得视频信号。用函数CapDriverConnect可使捕捉窗与其设备驱动程序相关联。
2.3设置视频设备的属性
通过设置TcaptureParms结构变量的各个成员变量,可以控制设备的采样频率、中断采样按键、状态行为。设置好TcaptureParms结构变量后,可以用函CapCaptureSetSetup使设置生效。之后还可以用CapPreviewScale、CapPreviewRate设置预览的比例与速度,也可以直接使用设备的默认值。
2.4打开预览
利用函数CapOverlay可选择是否采用叠加模式预览,以使系统资源占用小,视频显示速度加快。然后用CapPreview启动预览功能,这时就可以在屏幕上看到来自摄像头的图像了。
2.5使用捕捉窗回调函数
前的四个步骤就可以建立一个基本的视频捕捉程序了,如果想自己处理从设备捕捉到的视频数据,则要使用捕捉窗回调函数来处理,比如一帧一帧地获得视频数据,也可以以流的方式获得视频数据等等。
2.6传输视频流
使用回调函数可以取得第一帧的数据,我们使用网络技术将数据发给其它机器,其它机品将接收的数据显示出来。
2.7接收视频
接收UDP数据,同时将接收到的数据回显出来,这样就可以看到远处传来的视频了。
三、用Delphi编写程序代码
微软的VFW SDK只有VC和VB版,并没有Delphi版,不过在网上可以找到VFW.PAS文件,FW.PAS文件声明了调用DLL中的各个函数和变量。(注:源代码中提供了VFW.PAS文件)
下面就以Delphi7开发一个网络视频聊天软件,聊天软件分两个程序,一个是视频采集程序并进行UDP广播的视频聊天软件服务器,另一个是接收UDP广播程序显示传来的视频数据的视频聊天软件客户端。
3.1建立视频聊天软件服务器
3.1.1新建一个工程,命名为Project1.dpr,并把VFW.PAS加到USE中
3.1.2在Form1上放置一个Tpanel控件,该控件用于显示视频。之后再放置两个Tbutton控件,一个caption为"开始",另一个Name为"停止",放置一个UDP组件,这里用indy的IdUDPClient用来传输视频,如图示:
3.1.3定义全局变量
更多内容请看Wlan组网----家庭专题 常用软件加密宝典 软件插件专题,或进入讨论组讨论。
|
|
|||
关键词:Delphi VFW 视频 视频会议 视频聊天 Video for Windows
一、引言
我们知道视频聊天软件的关键技术在于采集视频,并实时传输给聊天软件在线的人。对于视频的采集,这里采用微软公司的关于数字视频的一个软件包VFW(Video for Windows)。相信很多人对它都很熟习,VFW能使应用程序通过数字化设备从传统的模拟视频源得到数字化的视频剪辑,VFW的一个关键思想是播放时不需要专用硬件。为了解决数字视频数据量大的问题,需要对数据进行压缩,而VFW引进了AVI的文件标准。该标准未规定如何对视频进行捕捉、压缩及播放,仅规定视频和音频该如何存储在硬盘上及在AVI文件中交替存储视频帧和与之相匹配的音频数据。通过VFW,开发人员通过发送消息或设置属性来捕捉、播放和编辑视频剪辑。当用户在安装VFW时,安装程序会自动地安装配置视频所需要的组件,如设备驱动程序、视频压缩程序等。VFW主要由6个模块组成。VFW功能模块:
AVICAP.DLL 包含执行视频捕捉的函数,它给AVI文件的I/O处理和视频、音频设备驱动程序提供一个高级接口
MSVIDEO.DLL 包含一套特殊的DrawDib函数,用来处理屏幕上的视频操作
MCIAVI.DRV 包括对VFW的MCI命令解释器的驱动程序
AVIFILE.DLL 包含由标准多媒体I/O(mmio)函数提供的更高的命令,用来访问.AVI文件
ICM 压缩管理器,用于管理的视频压缩/解压缩的编译码器(Codec)
ACM 音频压缩管理器,提供与ICM相似的服务,适用于波形音频
对于视频的传输,我们使用UDP来传,因为UDP传输速度快,TCP是面向连接的,建立连接时双方需经过三次握手,数据传输可靠,FTP、telnet等就是基于TCP的,UDP是面向非连接的,发出信息不需对方确认,但这样速度比TCP快,但有可能丢失数据,象SMTP、tftp等就是基于UDP的。另外UDP还支持广播,UDP广播两种,一种是directed broadcast,比如你的网段是192.168.0.X,你就往192.168.0.255发就可以了。另一种是limited broadcast,广播地址是255.255.255.255
二、视频聊天软件的开发步骤
2.1 创建捕捉窗口,采集视频
在进行视频捕捉之前必需要先创建一个捕捉窗口,并应以此为基础进行所有的捕捉及设置操作。捕捉窗口可用AVICap窗口类的"CapCreateCaptureWindow"函数来创建,其窗口风格可设置为WSCHILD和WS_VISIBLE参数。
有了捕捉窗口,我们就可以将视频流和音频流捕捉到一个AVI文件中;动态地同视频和音频输入器件连接或断开;用Overlay或Preview模式对输入的视频流进行实时显示,设置捕捉速率,显示控制视频源、视频格式及视频压缩的对话框,创建、保存或载入调色板,将图像和相关的调色板拷贝到剪贴板,将捕捉的单帧图像保存到BMP格式文件中。
2.2 捕捉窗口和驱动程序的关联
仅仅一个捕捉窗口是不能工作起来的,它必须要与一个设备相关联才能取得视频信号。用函数CapDriverConnect可使捕捉窗与其设备驱动程序相关联。
2.3设置视频设备的属性
通过设置TcaptureParms结构变量的各个成员变量,可以控制设备的采样频率、中断采样按键、状态行为。设置好TcaptureParms结构变量后,可以用函CapCaptureSetSetup使设置生效。之后还可以用CapPreviewScale、CapPreviewRate设置预览的比例与速度,也可以直接使用设备的默认值。
2.4打开预览
利用函数CapOverlay可选择是否采用叠加模式预览,以使系统资源占用小,视频显示速度加快。然后用CapPreview启动预览功能,这时就可以在屏幕上看到来自摄像头的图像了。
2.5使用捕捉窗回调函数
前的四个步骤就可以建立一个基本的视频捕捉程序了,如果想自己处理从设备捕捉到的视频数据,则要使用捕捉窗回调函数来处理,比如一帧一帧地获得视频数据,也可以以流的方式获得视频数据等等。
2.6传输视频流
使用回调函数可以取得第一帧的数据,我们使用网络技术将数据发给其它机器,其它机品将接收的数据显示出来。
2.7接收视频
接收UDP数据,同时将接收到的数据回显出来,这样就可以看到远处传来的视频了。
三、用Delphi编写程序代码
微软的VFW SDK只有VC和VB版,并没有Delphi版,不过在网上可以找到VFW.PAS文件,FW.PAS文件声明了调用DLL中的各个函数和变量。(注:源代码中提供了VFW.PAS文件)
下面就以Delphi7开发一个网络视频聊天软件,聊天软件分两个程序,一个是视频采集程序并进行UDP广播的视频聊天软件服务器,另一个是接收UDP广播程序显示传来的视频数据的视频聊天软件客户端。
3.1建立视频聊天软件服务器
3.1.1新建一个工程,命名为Project1.dpr,并把VFW.PAS加到USE中
3.1.2在Form1上放置一个Tpanel控件,该控件用于显示视频。之后再放置两个Tbutton控件,一个caption为"开始",另一个Name为"停止",放置一个UDP组件,这里用indy的IdUDPClient用来传输视频,如图示:
3.1.3定义全局变量
| CapWnd:THandle; //定义捕捉窗句柄 CapParms:TcaptureParms; //用于设置设备属性的结构变量 BMPINFO:TBitmapInfo; //BMP图像信息 |
相关图文阅读
频道图文推荐
相关专题
·用Delphi开发视频聊天软件 (4213次浏览)
·利用Delphi实现系统状态栏图标 (65次浏览)
·第一章 Delphi快速入门(四) (35次浏览)
·Delphi:Daily build实践 (14次浏览)
·利用Delphi实现系统状态栏图标 (65次浏览)
·第一章 Delphi快速入门(四) (35次浏览)
·Delphi:Daily build实践 (14次浏览)
·用Delphi开发视频聊天软件 (4213次浏览)
·利用Delphi实现系统状态栏图标 (65次浏览)
·经验技巧:分享两条Delphi开发经验 (46次浏览)
·第一章 Delphi快速入门(四) (35次浏览)
·Delphi:Daily build实践 (14次浏览)
·利用Delphi实现系统状态栏图标 (65次浏览)
·经验技巧:分享两条Delphi开发经验 (46次浏览)
·第一章 Delphi快速入门(四) (35次浏览)
·Delphi:Daily build实践 (14次浏览)
·用Delphi开发视频聊天软件 (4213次浏览)
·利用Delphi实现系统状态栏图标 (65次浏览)
·Delphi 中动态链接库(dll)的建立和使用 (51次浏览)
·经验技巧:分享两条Delphi开发经验 (46次浏览)
·第一章 Delphi快速入门(四) (35次浏览)
·Delphi:Daily build实践 (14次浏览)
·利用Delphi实现系统状态栏图标 (65次浏览)
·Delphi 中动态链接库(dll)的建立和使用 (51次浏览)
·经验技巧:分享两条Delphi开发经验 (46次浏览)
·第一章 Delphi快速入门(四) (35次浏览)
·Delphi:Daily build实践 (14次浏览)
最新技术文档
·用Delphi开发视频聊天软件 07-17
·利用Delphi实现系统状态栏图标 07-16
·Delphi:Daily build实践 07-16
·第一章 Delphi快速入门(四) 07-15
·经验技巧:分享两条Delphi开发经验 06-27
·Delphi 中动态链接库(dll)的建立和使用 06-14
·DELPHI存取JPEG文件到SQL Server数据库(续文) 04-02
·Delphi程序与Chm帮助关联的简单实现 04-02
·Delphi程序设计综合训练任务书 04-02
·Delphi程序设计之--经验技巧 04-02
·利用Delphi实现系统状态栏图标 07-16
·Delphi:Daily build实践 07-16
·第一章 Delphi快速入门(四) 07-15
·经验技巧:分享两条Delphi开发经验 06-27
·Delphi 中动态链接库(dll)的建立和使用 06-14
·DELPHI存取JPEG文件到SQL Server数据库(续文) 04-02
·Delphi程序与Chm帮助关联的简单实现 04-02
·Delphi程序设计综合训练任务书 04-02
·Delphi程序设计之--经验技巧 04-02
站内各频道最新更新文档
站内最新制作专题
|
|||
| ·ACDSEE专题教程-下载使用 ·迅雷专题教程-下载使用 ·Windows XP频道 ·Windows Vista频道 ·Windows 2000频道 ·win2003频道 ·Freebsd频道 ·Oracle频道 |
·Linux频道 ·Windows频道 ·邮件服务器专题 ·协议大全 ·数据恢复指南教程 ·FreeBSD使用教程 ·Linux数据库宝典 ·Linux基础知识 |
||
热门关键字导读
站内频道文章精选
| · 秘密:Vista隐蔽的动态屏保 · 腾讯开发新电子宠物--QQ熊 · 惠普否认2999元PC有价无货 |
· 驱逐Win系统“流氓”文件 · WinXP中获取未使用的IP地址 · 尝试format C:格式化硬盘? |
| · 在DOS下恢复回收站中的文件 · 拯救WinXP崩溃的救命稻草 · Linux系统中超级权限的应用 |
· 搜狗PK谷歌:谁能代言拼... · 昨日重现,一键GHOST轻松.. · 实现Web迅雷在空闲时杀毒 |
| · AVIFile函数制做AVI文件 · VC中链接动态链接库的方法 · 熊猫烧香核心源码(Delphi) |
· DateDiff函数祥解 · JavaScript去除空格的三种 · js效果 图片加载进度实时.. |
| · SQL Server数据库优化方案 · Oracle的初学者入门心得 · JSP连接Mysql数据库 |
· Photoshop为美女做艺术处理 · 用Freehand创建发光字特效 · 设计自己的个性QQ动态表情 |
百度推荐,商机无限
搜索您感兴趣的内容






