动力设备网 加入收藏  -  设为首页
您的位置:动力设备网 > 科技 > 正文
用Delphi开发视频聊天软件(一)
用Delphi开发视频聊天软件(一)
提示:

用Delphi开发视频聊天软件(一)

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

DELPHI基础教程:Delphi开发数据库应用程序概述(一)[4]
提示:

DELPHI基础教程:Delphi开发数据库应用程序概述(一)[4]

  值得指出的是在绝大多数数据库应用中 一般都是使用数据集部件TTable TQuery或TStoredProc与磁盘上的数据库进行连接 用TDataSource部件连接数据控制部件和数据集部件 当然用户也可以自定义数据集部件 用于数据库应用当中 TTable TQuery 和TStoredProc部件中都包含一个不可见的TField类型的对象Fields Fields是一个串列表 它对应于数据库表或一个查询结果的列或字段 Fields对象是伴随着TTable TQuery 和TStoredproc部件的活动状态动态地建立的 当数据库表被关闭时 Fields 对象也随之消失 它在程序设计和程序运行过程中都是不可见的   当然也可以利用Fields Editor建立永久性的Fields对象供Delphi应用程序使用 我们将在后面的内容中详细阐述    TTable部件   利用TTable部件程序设计人员甚至可以不需要编写任何程序便可对数据库进行访问 在一个应用程序窗体中放置一个TTable部件的过程如下    在部件选择板上选择Data Access页    单击Table图标    在窗体内单击鼠标 获得一个TTable部件    为TTable部件设置有关的属性   DatabaseName属性指定要访问的数据库所在的路径名 路径名可以用别名来表示   TableName属性指定要访问数据库中具体的数据库表   Active属性设置为True时 表示打开要访问的数据库表 设置为False时 暂时不打开要访问的数据库表   缺省情况下 TTtable部件中包含了要访问的数据库表中所有的字段和记录 用鼠标双击TTable图标时 会出现一个字段编辑器(Fields Editor) 使用Fields Editor可以对TTable部件中包含的数据库表中的字段的显示格式等属性进行编辑 具体可以控制   ● 建立一个永久性的字段列表 包括字段的顺序 字段的类型等 即使磁盘上实际的数据库表的表结构发生了改变 我们建立的这个永久性的字段列表也不会发生改变   ● 为每个字段指定一个便于阅读和使用的名字   ● 指定字段显示的顺序   ● 为每个字段指定一个用于显示的字符串   ● 为字段增加合法性检验   ● 为了显示的需要还可以建立新的字段(如可计算的字段)具体的使用方法见后面的内容    TQuery部件   TQuery部件是我们使用SQL语言开发数据库应用程序的有力工具 因为使用SQL语言 我们可以非常方便灵活地对一个或多个数据库表中的记录进行访问 所以利用TQuery我们可以查询本地的数据库如Pà?aradox和dBASE数据库系统中的数据 我们还可以使用TQuery部件对一个远地的数据库SQL服务器进行访问 建立Client/Server模式的应用程序   在一个应用程序窗体中放置一个TQuery部件的过程如下    在部件选择板上选择Data Access页    单击Query图标    在窗体内单击鼠标 获得一个TQuery部件    为TQuery部件设置有关的属性   DatabaseName属性指定将要访问的数据库的路径名   SQL属性指定对数据库表进行访问SQL语句 它可以是一条查询语句也可以是一条修改语句或插入语句等 在对象浏览器上 单击SQL属性时 会打开一个字符串编辑器供程序设计者输入SQL语句   在这里要注意在TQuery部件中 不是用TableName 属性来指定要访问的数据库中的数据库表 而是在SQL属性中 通过SQL语句来指定将要访问的数据库表    TDataSouece部件   TDataSource部件是连接数据集部件TTable TQuery TStoredProc 和数据控制部件TDBGrid TDBEdit等的桥梁 TTable TQuery TStoredProc部件通过BDE可以实现与磁盘上的数据库连接即访问 但它们本身不能显示数据库中的数据信息 而数据控制部件如TDBGrid TDBEdit等能够提供可视化的界面 显示数据库中的数据信息 但它们不具备访问磁盘数据库的能力 正是TDataSource将这两者有机地结合起来 使得用户才能交互地对数据库中的数据信息进行查询 修改 插入 删除等操作   在应用程序窗体中放置TDataSource部件的过程如下    在部件选择板上选择Data Access页    单击DataSource图标    在窗体内单击鼠标 获得一个TDataSource部件    为TDataSource部件设置有关的属性   Dataset属性指定一个数据集部件 可以是TTable TQuery或TStoredProc部件的名字    返回目录 DELPHI基础教程 编辑推荐 Java程序设计培训视频教程 J EE高级框架实战培训视频教程   Visual C++音频/视频技术开发与实战   Oracle索引技术   ORACLE G数据库开发优化指南   Java程序性能优化 让你的Java程序更快 更稳定   C嵌入式编程设计模式   Android游戏开发实践指南 lishixinzhi/Article/program/Delphi/201311/25181

DELPHI基础教程:Delphi开发数据库应用程序概述(二)[2]
提示:

DELPHI基础教程:Delphi开发数据库应用程序概述(二)[2]

   数据库窗体专家和数据库操作台(DBD)   Delphi为用户开发简单的数据库应用程序提供了一个开发工具叫做 数据库窗体专家 (Database Form Expert) 在Delphi系统菜单Tool菜单下可以找到   数据库窗体专家能够自动生成简单的数据库应用程序中所必须完成的许多任务 它还可以生成基于单个数据库表的应用程序窗体或基于主要──明细型多个数据库表的应用程序窗体 数据库窗体专家能够自动完成的任务如下   ● 放置数据库部件到窗体中(TDataSource部件)   ● 为数据集部件(TTable TQuery)和磁盘上的数据库建立连接   ● 建立数据源(TDataSource)与数据控制部件的连接 数据源(TDataSource)与 数据访问部件(TTable TQuery)的连接   ● 为TQuery部件编写SQL语句   ● 为窗体中的部件定义Tab顺序   数据库操作台(DBD)是数据库维护和数据定义工具 程序设计人员利用它可以查询 连接 建立 重构 索引 修改和拷贝数据库表 包括Pà€aradox和dBASE文件和基于 SQL语言的数据库表 而且在使用DBD操作Paradox或dBASE的表时 用户不必拥有 Paradox 或dBASE数据库管理系统 DBD还可以把一种格式的数据和数据字典拷贝成另一种格式 例如 你可以将一个dBASE的表拷贝到远程的SQL服务器上的一个数据库中去 有关DBD详细描述 请参看 数据库操作台(DBD)的使用    Delphi数据库应用程序的开发方法和步骤    概述   用Derphi用开数据库应用程序 虽然与开发其他应用程序有相似之处 但是也有一些重要的区别 我们必须要加以注意   利用Delphi的客户/服务器功能 程序设计者可以在本地数据库上或远程数据库服务器上开发客户/服务器模式的应用程序 Delphi 的一个强有力的功能之一是可以将基于本地桌面数据库系统的应用程序很容易地修改成客户/服务器模式的应用 一个Delphi 数据库应用程序访问的是本地数据库还是远程SQL数据库服务器上的数据库 这对于最终用户是完全透明的 即数据库的物理位置对最终用户是透明的 当数据库的物理位置发生变化时 用户界面不必随之变化   因为数据库应用程序的是依赖于它所访问的数据库的 所以在开发数据库应用程序之前必须要建立一个完善的数据库即数据定义 数据定义应当是开发数据库应用程序的一部分 但它超出了书本的范围 有关数据定义的内容 请参看关系数据库设计方面的资料 在我们用Derphi开发一个数据库应用程序时 可能有下列四种情况    数据库不存在或者必须要重新定义 使用DBD为本地数据库定义Paradox或dBASE 数据库表 使用Delphi提供的服务器开发工具如Windows ISQL或DBD定义本地或远程SQL数据库务器上的数据库    数据库在桌面数据库系统中或局域网上(如Paradox或dBASE) 而且BDE 数据库和应用程序在同一台机器上 这是典型的独立应用    数据库在桌面数据库系统中 但是用户要把它改变到SQL数据库服务器中去 这种情况我们在附录C中详细讨论    数据库在SQL数据库服务器中 而且应用程序将到SQL数据库服务器中去访问数据库 这是一个标准的客户/服务器应用   有关开发客户/服务器应用程序的详细内容 参看 客户/服务器应用 一章    数据库应用程序的开发步骤   数据库应用程序的最终目标就是为用户提供一个满足其长期需要的软件产品 因此 成功地开发一个数据库应用程序的关键之一是要详细地定义用户的需求 然后再围绕用户的需求进行开发 数据库应用程序的一般开发的三个基本步骤如下   ● 系统设计   ● 系统实现   ● 系统运行和维护   在这个三个基本步骤中 都包含着数据库的开发和应用程序界面的开发两大类任务 对于一个客户/服务器模式的应用 数据库和应用界面的区别就更明显一些 因为它们运行在不同的平台之上 而且使用的操作系统都常常不一样 如(一个Unix环境的服务器和Windows环境的客户机)    系统设计   系统设计阶段应当根据用户的需求 明确地描述数据库(数据库服务器端)和应用界面(客户机端)实现的功能 即决定哪些功能由服务器端实现 哪些功能由客户机端实现 对于客户/服务器应用程序 许多功能既可以在服务器端实现又可以在客户端实现的 例如一个复杂的数学变换功能既可以由客户端的应用程序实现 也可以由服务器端的存贮过程实现 服务器和客户端应用程序功能的划分往往取决于应用程序运行的硬件环境 例如 如果客户端是低档的PC机 服务器端是高档的工作站 那么大量的计算由服务器完成是比较理想的    系统实现   系统实现阶段的主要任务是使用Delphi提供的工具和部件以及Pascal语言实现系统设计阶段的设想 并进行调试   在系统实现阶段 最好使用数据库的一个备份数据库 这个备份的数据库与原数据库具有相同的结构 但其中的数据库只是原数据库中的一部分 至所以不在原数据库上开发应用程序 是因为考虑到没有调试好的应用程序可能会破坏数据库中的数据或者妨碍数据库的正常操作   如果应用程序是基于远程SQL数据库服务器的 在系统实现阶段可以采用两种方法   ● 在本地InterBase服务器上 使用数据库的备份数据库进行开发和调试   ● 在远程服务器上 使用数据库的备份数据库进行开发和调试   第一种方法优越性在于 它是独立于服务器的 而不至于影响服务器的其它的操作 而且不消耗服务器的资源不增加网络的负担 它的不利的方面是开发出来的应用程序只能在标准的SQL服务器上使用和调试 第二种方法能够使程序设计人员直接感受到服务器的特性 但它在调试阶段要消耗网络和服务器的资源 这种方法具有一定的危险性 程序中的错误可能会导致服务器的瘫痪    系统运行和维护   一个应用系统性能的优劣 效率的高低始终应当由用户来做出判决 应用程序在运行过程中 用户会提出一些新的需求和建议 根据用户需求的变化 应当对应用程序做一定的修改 使其进一步地得到完善和提高    交付数据库应用程序   交付数据库应用程序意味着将它交付给最终用户 并且提供应用程序运行所需的软件 非数据库应用程序往往只需要一个EXE文件 而数据库应用程序要包括下列几类文件   ● 数据库应用程序生成的EXE文件和DLL文件(如果有的话)   ● 必要的辅助文件(如Readme文件或HLP联机帮助文件)   ● 支持访问数据库的BDE 有时也称为IDAPI   ● 用于打印输出报表的ReportSmith报表工具   ● 如果应用中使用了VBX控件 还要包括VBX和BIVBXII DLL    安装BDE   在交付数据库应用程序时 必须同时在运行应用程序的机器上安装BDE Delphi 本身包含可再安装的BDE 在准备数据库应用程序安装盘时 同时从Delphi中复制一份BDE 到最终用户的机器中 BDE中包含访问多种数据库系统的驱动程序 为了节省磁盘空间 在安装BDE时 可以只安装应用程序必须的驱动程序 例如 如果我们的应用程序只需要访问dBASE数据库文件 那么在安装BDE时 只需安装dBASE的驱动程序就行了 要访问Paradox数据库 BDE至少需要 KB的磁盘空间 BDE主要包括下列文件 请参看DEPLOY TXT文件 lishixinzhi/Article/program/Delphi/201311/25177