亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 用delphi開發視頻聊天室.htm

?? 用Delphi開發視頻聊天室用Delphi開發視頻聊天室
?? HTM
?? 第 1 頁 / 共 2 頁
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>用Delphi開發視頻聊天室</title>
</head>

<body>
<h1 align="center">用Delphi開發視頻聊天室</h1>
<p><br>
  <strong>摘要:</strong>目前網上視頻聊天室、視頻會議軟件、可視IP電話軟件隨處可見,你是否想自己做一個玩玩?其實這類軟件無非是視頻加上網絡而建成的。如果熟悉視頻捕捉和網絡傳輸技術,根本就難不倒你。微軟為軟件開發人員提供了一個專門用于視頻捕捉的VFW SDK(Video for Windows SDK),用它實現視頻捕捉很簡單,至于網絡傳輸嘛,Delphi更是提供了N多種網絡組件,隨你用了。本文詳細介紹了如何利用Delphi中開發視頻聊天室,同時給出了兩個程序示例。 </p>
<p> </p>
<p> 關鍵詞:Delphi VFW 視頻 視頻會議 視頻聊天 Video for Windows<BR>
作者:徐長友(yousoft@sina.com)</p>
<h2>一、引言</h2>
  我們知道視頻聊天室的關鍵技術在于采集視頻,并實時傳輸給聊天室在線的人。對于視頻的采集,這里采用微軟公司的關于數字視頻的一個軟件包VFW(Video for Windows)。相信很多人對它都很熟習,VFW能使應用程序通過數字化設備從傳統的模擬視頻源得到數字化的視頻剪輯,VFW的一個關鍵思想是播放時不需要專用硬件。為了解決數字視頻數據量大的問題,需要對數據進行壓縮,而VFW引進了AVI的文件標準。該標準未規定如何對視頻進行捕捉、壓縮及播放,僅規定視頻和音頻該如何存儲在硬盤上及在AVI文件中交替存儲視頻幀和與之相匹配的音頻數據。通過VFW,開發人員通過發送消息或設置屬性來捕捉、播放和編輯視頻剪輯。當用戶在安裝VFW時,安裝程序會自動地安裝配置視頻所需要的組件,如設備驅動程序、視頻壓縮程序等。VFW主要由6個模塊組成。VFW功能模塊:</p>
<p> AVICAP.DLL 包含執行視頻捕捉的函數,它給AVI文件的I/O處理和視頻、音頻設備驅動程序提供一個高級接口 </p>
<p> MSVIDEO.DLL 包含一套特殊的DrawDib函數,用來處理屏幕上的視頻操作 </p>
<p> MCIAVI.DRV 包括對VFW的MCI命令解釋器的驅動程序 </p>
<p> AVIFILE.DLL 包含由標準多媒體I/O(mmio)函數提供的更高的命令,用來訪問.AVI文件 </p>
<p> ICM 壓縮管理器,用于管理的視頻壓縮/解壓縮的編譯碼器(Codec) </p>
<p> ACM 音頻壓縮管理器,提供與ICM相似的服務,適用于波形音頻 </p>
<p>對于視頻的傳輸,我們使用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</p>
<h2> </h2>
<h2>二、視頻聊天室的開發步驟<br>
</h2>
<h3> 2.1 創建捕捉窗口,采集視頻</h3>
<p> 在進行視頻捕捉之前必需要先創建一個捕捉窗口,并應以此為基礎進行所有的捕捉及設置操作。捕捉窗口可用AVICap窗口類的“CapCreateCaptureWindow”函數來創建,其窗口風格可設置為WSCHILD和WS_VISIBLE參數。</p>
<p>有了捕捉窗口,我們就可以將視頻流和音頻流捕捉到一個AVI文件中;動態地同視頻和音頻輸入器件連接或斷開;用Overlay或Preview模式對輸入的視頻流進行實時顯示,設置捕捉速率,顯示控制視頻源、視頻格式及視頻壓縮的對話框,創建、保存或載入調色板,將圖像和相關的調色板拷貝到剪貼板,將捕捉的單幀圖像保存到BMP格式文件中。</p>
<h3> </h3>
<h3> 2.2 捕捉窗口和驅動程序的關聯</h3>
<p> 僅僅一個捕捉窗口是不能工作起來的,它必須要與一個設備相關聯才能取得視頻信號。用函數CapDriverConnect可使捕捉窗與其設備驅動程序相關聯。</p>
<h3> </h3>
<h3> 2.3設置視頻設備的屬性</h3>
<p> 通過設置TcaptureParms結構變量的各個成員變量,可以控制設備的采樣頻率、中斷采樣按鍵、狀態行為。設置好TcaptureParms結構變量后,可以用函CapCaptureSetSetup使設置生效。之后還可以用CapPreviewScale、CapPreviewRate設置預覽的比例與速度,也可以直接使用設備的默認值。</p>
<h3> </h3>
<h3> </h3>
<h3> 2.4打開預覽</h3>
<p> 利用函數CapOverlay可選擇是否采用疊加模式預覽,以使系統資源占用小,視頻顯示速度加快。然后用CapPreview啟動預覽功能,這時就可以在屏幕上看到來自攝像頭的圖像了。</p>
<h3> </h3>
<h3> </h3>
<h3> 2.5使用捕捉窗回調函數</h3>
<p> 前的四個步驟就可以建立一個基本的視頻捕捉程序了,如果想自己處理從設備捕捉到的視頻數據,則要使用捕捉窗回調函數來處理,比如一幀一幀地獲得視頻數據,也可以以流的方式獲得視頻數據等等。</p>
<h3> </h3>
<h3> </h3>
<h3> 2.6傳輸視頻流</h3>
<p> 使用回調函數可以取得第一幀的數據,我們使用網絡技術將數據發給其它機器,其它機品將接收的數據顯示出來。</p>
<h3> </h3>
<h3> 2.7接收視頻</h3>
<p> 接收UDP數據,同時將接收到的數據回顯出來,這樣就可以看到遠處傳來的視頻了。</p>
<h2>三、用Delphi編寫程序代碼</h2>
  微軟的VFW SDK只有VC和VB版,并沒有Delphi版,不過在網上可以找到VFW.PAS文件,FW.PAS文件聲明了調用DLL中的各個函數和變量。(注:源代碼中提供了VFW.PAS文件)</p>
<p> 下面就以Delphi7開發一個網絡視頻聊天室,聊天室分兩個程序,一個是視頻采集程序并進行UDP廣播的視頻聊天室服務器,另一個是接收UDP廣播程序顯示傳來的視頻數據的視頻聊天室客戶端。</p>
<h3> </h3>
<h3> 3.1建立視頻聊天室服務器</h3>
<p> 3.1.1新建一個工程,命名為Project1.dpr,并把VFW.PAS加到USE中<br>
<img src="picture/image002.jpg" width="357" height="285"></p>
<p> 3.1.2在Form1上放置一個Tpanel控件,該控件用于顯示視頻。之后再放置兩個Tbutton控件,一個caption為“開始”,另一個Name為“停止”,放置一個UDP組件,這里用indy的IdUDPClient用來傳輸視頻,如圖示:<br>
<img src="picture/image004.jpg" width="283" height="301"></p>
<p>3.1.3定義全局變量</p>
<table width="100%"  border="1" cellspacing="0" cellpadding="1">
  <tr>
    <td bgcolor="#FFFF99"><p> </p>
      <p>CapWnd:THandle; //定義捕捉窗句柄</p>
      <p> CapParms:TcaptureParms; //用于設置設備屬性的結構變量</p>
    <p> BMPINFO:TBitmapInfo; //BMP圖像信息</p></td>
  </tr>
</table>
<p><br> 
</p>
<p>3.1.4編碼事件代碼</p>
<p>開始按鈕代碼:</p>
<table width="100%"  border="1" cellspacing="0" cellpadding="1">
  <tr>
    <td bgcolor="#FFFF99"><p>&nbsp;</p>
      <p> CapWnd := capCreateCaptureWindow('我的窗口',</p>
      <p> WS_VISIBLE or WS_CHILD,//窗口樣式</p>
      <p> 0, //X坐標</p>
      <p> 0, //Y坐標</p>
      <p> panel1.Width, //窗口寬</p>
      <p> panel1.Height, //窗口高</p>
      <p> panel1.handle, //窗口句柄</p>
      <p> 0); //通常為0</p>
      <p> if CapWnd = 0 then exit;</p>
      <p> //定義幀捕捉回調函數</p>
      <p> CapSetCallbackOnFrame(CapWnd,FrameCallBack);</p>
      <p> CapParms.dwRequestMicroSecPerFrame:=1;</p>
      <p> CapParms.fLimitEnabled:=FALSE;</p>
      <p> CapParms.fCaptureAudio:=FALSE;</p>
      <p> CapParms.fMCIControl:=FALSE;</p>
      <p> CapParms.fYield:=TRUE;</p>
      <p> CapParms.vKeyAbort:=VK_ESCAPE;</p>
      <p> CapParms.fAbortLeftMouse:=False;</p>
      <p> CapParms.fAbortRightMouse:=FALSE;</p>
      <p> //讓設置生效</p>
      <p> CapCaptureSetSetup(capWnd,@CapParms,sizeof(TCAPTUREPARMS));</p>
      <p> CapPreviewRate(capWnd,33); //設置預覽視頻的頻率</p>
      <p> CapCaptureSequenceNoFile(capWnd); //如果要捕捉視頻流,則要使用函數來指定不生成文件,不然會自動生成AVI文件</p>
      <p> CapDriverConnect(CapWnd,0); //連接攝像頭設備,第二個參數是個序號,當系統中裝有多個顯示驅動程序時,其值分別依次為0到總個數如果有多個攝像頭,那么就是0-&gt;1-&gt;2</p>
      <p> capGetVideoFormat(capWnd, @BMPINFO,sizeof(TBitmapInfo)); //取得視頻圖像數據頭</p>
      <p> CapPreviewScale(capWnd,TRUE); //是否縮放</p>
      <p> CapOverlay(capWnd,true); //指定是否使用疊加模式,true為使用,否則為false</p>
    <p>CapPreview(capWnd,true);</p></td>
  </tr>
</table>
<p><br>回調函數代碼:</p>
<p>&nbsp;</p>
<table width="100%"  border="1" cellspacing="0" cellpadding="1">
  <tr>
    <td bgcolor="#FFFF99"><p> </p>
        <p>var hd:Thandle;</p>
        <p> jpg:TJpegImage;</p>
        <p> memStream :TMemoryStream;</p>
        <p> Bitmap:TBitmap;</p>
        <p>begin</p>
        <p> //將數據顯在Image,</p>
        <p> Bitmap:=TBitmap.Create;</p>
        <p> Bitmap.Width :=BMPINFO.bmiHeader.biWidth; // New size of Bitmap</p>
        <p> Bitmap.Height:=BMPINFO.bmiHeader.biHeight;</p>
        <p> hd:= DrawDibOpen;</p>
        <p> DrawDibDraw(hd,Bitmap.canvas.handle,0,0,BMPINFO.BmiHeader.biwidth,</p>
        <p>BMPINFO.bmiheader.biheight,@BMPINFO.bmiHeader,</p>
        <p>lpVHdr^.lpData,0,0,BMPINFO.bmiHeader.biWidth,BMPINFO.bmiHeader.biheight,0);</p>
        <p> DrawDibClose(hd);</p>
        <p> //發送數據</p>
        <p> memStream := TMemoryStream.Create;</p>
        <p> jpg := TJpegImage.Create;</p>
        <p> jpg.Assign(Bitmap);</p>
        <p> jpg.CompressionQuality := 10; //jpg壓縮質量</p>
        <p> jpg.JPEGNeeded;</p>
        <p> jpg.Compress;</p>
        <p> jpg.SaveToStream(memStream);</p>
        <p> jpg.Free;</p>
        <p> //因為UDP數據包有大小限制,這里如果超出部分,就沒有傳輸,完全可以發幾次發出去</p>
        <p> Form1.IdUDPClient1.BroadcastEnabled:=true;//用廣播功能</p>
        <p> if memStream.Size&gt;Form1.IdUDPClient1.BufferSize then</p>
        <p> //向192.168.0.X網段廣播,端口 9001</p>
        <p> Form1.IdUDPClient1.SendBuffer('192.168.0.255',9001,memStream.Memory^,</p>
        <p>Form1.IdUDPClient1.BufferSize)</p>
        <p> else</p>
        <p> Form1.IdUDPClient1.SendBuffer('192.168.0.255',9001,memStream.Memory^,memStream.Size);</p>
        <p> memStream.Free;</p>
        <p> Bitmap.Free;</p>
        <p>End;</p></td>
  </tr>
</table>
<p> </p>
<p>停止代碼:</p>
<table width="100%"  border="1" cellspacing="0" cellpadding="1">
  <tr>
    <td bgcolor="#FFFF99"><p> </p>
        <p>capCaptureAbort(CapWnd); //停止捕捉</p>
        <p> capDriverDisconnect(CapWnd); //將捕捉窗同驅動器斷開</p></td>
  </tr>
</table>
<p><br> 
</p>
<p>完整的視頻聊天室服務器代碼:</p>
<table width="100%"  border="1" cellspacing="0" cellpadding="1">
  <tr>
    <td bgcolor="#FFFF99"><p> </p>
        <p>unit Unit1;</p>
        <p> </p>
        <p>interface</p>
        <p> </p>
        <p>uses</p>
        <p> Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</p>
        <p> Dialogs, StdCtrls, ExtCtrls,VFW, IdBaseComponent, IdComponent, IdUDPBase,</p>
        <p> IdUDPClient,jpeg;</p>
        <p> </p>
        <p>type</p>
        <p> TForm1 = class(TForm)</p>
        <p> Panel1: TPanel;</p>
        <p> Button1: TButton;</p>
        <p> Button2: TButton;</p>
        <p> IdUDPClient1: TIdUDPClient;</p>
        <p> procedure Button1Click(Sender: TObject);</p>
        <p> procedure Button2Click(Sender: TObject);</p>
        <p> private</p>
        <p> { Private declarations }</p>
        <p> public</p>
        <p> { Public declarations }</p>
        <p> end;</p>
        <p> </p>
        <p>var</p>
        <p> Form1: TForm1;</p>
        <p> CapWnd:THandle; //定義捕捉窗句柄</p>
        <p> CapParms:TcaptureParms; //用于設置設備屬性的結構變量</p>
        <p> BMPINFO:TBitmapInfo; //BMP圖像信息</p>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
无码av中文一区二区三区桃花岛| 色中色一区二区| 日韩欧美精品在线视频| 看片网站欧美日韩| 久久日韩精品一区二区五区| 精品亚洲免费视频| 久久免费午夜影院| 91性感美女视频| 亚洲自拍与偷拍| 日韩一区二区精品| 国产不卡免费视频| 亚洲丝袜自拍清纯另类| 欧美日韩成人高清| 国产一区二区视频在线播放| 亚洲欧洲国产专区| 91麻豆精品国产91久久久使用方法| 黄色小说综合网站| 亚洲色图.com| 日韩一区二区在线观看| 成人污视频在线观看| 亚洲综合成人网| 亚洲综合免费观看高清完整版 | 亚洲v中文字幕| 欧美α欧美αv大片| 99久久免费精品高清特色大片| 国内精品免费**视频| 亚洲一级二级三级在线免费观看| 777午夜精品免费视频| 国产成人av资源| 亚洲一区影音先锋| 久久精品免视看| 在线精品视频一区二区| 国产精品一区二区x88av| 亚洲精品亚洲人成人网| 欧美大片在线观看一区| 91碰在线视频| 狠狠色丁香久久婷婷综合_中| 亚洲美女一区二区三区| 久久午夜电影网| 欧美高清视频在线高清观看mv色露露十八 | 成人性生交大片| 日韩1区2区日韩1区2区| 国产精品成人午夜| 日韩欧美精品三级| 欧美日韩一区三区| 97久久精品人人澡人人爽| 精品在线亚洲视频| 视频在线观看一区二区三区| 亚洲欧美日韩中文字幕一区二区三区| 精品久久久久一区| 666欧美在线视频| 日本韩国一区二区| www.久久精品| 成人性生交大合| 国产精品正在播放| 蜜桃一区二区三区四区| 视频在线观看一区二区三区| 亚洲亚洲精品在线观看| 1000精品久久久久久久久| 国产午夜精品理论片a级大结局| 日韩女同互慰一区二区| 69p69国产精品| 欧美日韩大陆在线| 欧美日韩一级大片网址| 色哟哟一区二区三区| 成人精品在线视频观看| 国产精品亚洲视频| 国产成人在线视频网站| 国产一区在线看| 国产九色sp调教91| 国产精品69毛片高清亚洲| 久久电影国产免费久久电影 | 美洲天堂一区二卡三卡四卡视频| 亚洲精品老司机| 99热精品一区二区| 成人涩涩免费视频| 福利视频网站一区二区三区| 国产黄色精品网站| 国产69精品一区二区亚洲孕妇| 国产一区二区0| 粉嫩久久99精品久久久久久夜| 国产精品一二三四区| 国内精品在线播放| 国产九九视频一区二区三区| 福利视频网站一区二区三区| 成人精品鲁一区一区二区| 日韩一区二区在线播放| 粉嫩av亚洲一区二区图片| 成人午夜大片免费观看| 国产91精品一区二区| 成人av电影在线播放| 91影视在线播放| 欧美人与性动xxxx| 日韩一级黄色片| 久久精品网站免费观看| 亚洲日本欧美天堂| 亚洲综合一二三区| 久久国产人妖系列| 成人动漫视频在线| 欧美日韩一区不卡| 精品国产乱码久久久久久蜜臀| 欧美经典一区二区| 一区二区三区中文在线| 青青草成人在线观看| 国产91精品一区二区麻豆网站 | 欧美大片顶级少妇| 国产人伦精品一区二区| 亚洲黄网站在线观看| 免费不卡在线观看| 99视频精品全部免费在线| 欧美老肥妇做.爰bbww视频| 精品理论电影在线| 一色桃子久久精品亚洲| 手机精品视频在线观看| 国产91色综合久久免费分享| 欧美日韩一级片在线观看| 久久精品夜色噜噜亚洲a∨| 亚洲日本免费电影| 韩国v欧美v亚洲v日本v| 在线一区二区三区四区五区| 26uuu色噜噜精品一区二区| 亚洲男人都懂的| 国产一区不卡在线| 欧美日韩aaaaaa| 国产精品久久久久久户外露出 | 制服丝袜在线91| 中文字幕第一区二区| 日韩制服丝袜av| 91亚洲永久精品| 国产欧美一二三区| 日韩制服丝袜先锋影音| 91在线视频播放地址| 欧美成人精品福利| 亚洲高清免费观看 | 欧美群妇大交群的观看方式| 国产精品美女久久久久久| 日本不卡的三区四区五区| 免费av成人在线| 精品一区二区免费看| 色婷婷av一区二区三区之一色屋| 2024国产精品| 日本欧美一区二区在线观看| 一本色道久久综合狠狠躁的推荐 | av一二三不卡影片| 久久综合色综合88| 久久激情五月激情| 亚洲欧洲无码一区二区三区| 亚洲一二三区在线观看| av在线一区二区| 国产精品午夜在线观看| 国产一区二区三区在线观看免费 | 91免费看`日韩一区二区| 久久综合网色—综合色88| 免费一级欧美片在线观看| 欧美精品第1页| 亚洲成av人片在www色猫咪| 99久久99久久精品免费观看| 欧美国产精品专区| 成人午夜视频福利| 中文在线一区二区| 粉嫩一区二区三区性色av| 国产婷婷色一区二区三区| 国产精品一区2区| 亚洲国产精品t66y| 成人精品免费视频| 国产精品免费av| 99久久综合精品| 综合分类小说区另类春色亚洲小说欧美 | 国产suv精品一区二区6| 国产日本一区二区| 成人ar影院免费观看视频| 一区在线观看免费| 色婷婷激情综合| 亚洲第一在线综合网站| 91麻豆精品国产91久久久| 美女网站一区二区| 精品福利一区二区三区免费视频| 久久91精品国产91久久小草 | 91影院在线观看| 一区二区三区产品免费精品久久75| 在线观看三级视频欧美| 一二三四社区欧美黄| 欧美日韩综合不卡| 麻豆专区一区二区三区四区五区| 精品免费国产二区三区 | 91丨国产丨九色丨pron| 中文字幕综合网| 欧美男女性生活在线直播观看| 日av在线不卡| 国产精品三级av在线播放| 在线精品亚洲一区二区不卡| 免费观看日韩电影| 中文文精品字幕一区二区| 色天使色偷偷av一区二区| 日本伊人色综合网| 久久精品夜色噜噜亚洲aⅴ| 色综合天天综合| 日韩不卡一区二区| 中文字幕国产一区二区| 欧美在线影院一区二区|