天天看點

WPF+WCF一步一步打造音頻聊天室(四):視訊會話

  前面三篇文章中,我實作了音頻聊天室的部分功能,包括:文字聊天,共享白闆,語音聊天。這篇文章我将叙述一下視訊會話實作的技術要點。

     在Silerlight4中已經內建了攝像和采集聲音的功能,但是在WPF4中卻沒有直接可以用的的控件,由此也可以看出,由桌面程式走向web程式的大趨勢。如果你想用Silverlight實作類似的音頻聊天室,下面我列出一些資料供你參考。

    上面是Silverlight實作的方案和資料。這篇文章是用WPF+WCF去實作的。列出Silerlight是友善大家有個對照。

實作

    添加一個窗體,在這個窗體上使用這個控件,布局如下。

<a href="http://images.cnblogs.com/cnblogs_com/zhuqil/WindowsLiveWriter/WPFWCF_C4C5/wpf8_2.png" target="_blank"></a>

    注意:左邊是本機的視訊,右邊是對方的視訊。修改窗體的構造函數;

   與語音聊天一樣,資料傳遞我使用了UdpClient,我感覺UdpClient簡單好用。_serverEndPoint是WCF服務的位址,_socket用于視訊資料傳遞。在用戶端我使用了兩個System.Windows.Threading.DispatcherTimer,本來打算直接使用兩個線程,發現一些莫名奇妙的線程問題。兩個DispatcherTimer,一個用來啟動接受來自WCF服務的視訊資料,一個用來将自己的視訊資料發送到WCF服務。代碼如下:

    上面的captureVideo方法将視訊資料先轉發到WCF服務,在由WCF服務轉發給對方,在WCF服務中有一個UdpClient接受資料,方法是listen(),它的代碼如下:

    WCF服務中的listen()方法将接收到的資料發送給對方的用戶端,在用戶端有playVideo方法來接收和并播放來自WCF的視訊資料,代碼如下:

    從WCF服務收到到的資料是byte[] 格式,我們需要将其轉換成ImageSource,代碼如下:

2、小花接受到請求:

<a href="http://images.cnblogs.com/cnblogs_com/zhuqil/WindowsLiveWriter/WPFWCF_C4C5/wf42_2.png" target="_blank"></a>

3、視訊中:

<a href="http://images.cnblogs.com/cnblogs_com/zhuqil/WindowsLiveWriter/WPFWCF_C4C5/wf6_2.png" target="_blank"></a>

   上圖是我在一台電腦上示範的,是以隻有一邊顯示資料。但是,我用兩台筆記本測試過,效果也還不錯。

總結:

    由于部落格的空間不夠用,過段時間整理好,會将代碼上傳到Codeplex上。

本文轉自麒麟部落格園部落格,原文連結:http://www.cnblogs.com/zhuqil/archive/2010/06/13/ZqlChart-4.html,如需轉載請自行聯系原作者