1. 程式人生 > >即時通訊 音視訊聊天室開發建議

即時通訊 音視訊聊天室開發建議

目前網上視訊聊天室、視訊會議軟體、可視IP電話軟體隨處可見,你是否想自己做一個玩玩?其實這類軟體無非是視訊加上網路而建成的。如果熟悉視訊捕 捉和網路傳輸技術,根本就難不倒你。本文詳細介紹瞭如何利用別人提供的sdk來開發視訊聊天室 首先介紹一下視訊聊天技術發展歷程   1、 C/S結構的視訊聊天軟體或外掛。這是最早的視訊聊天開發技術,已經被淘汰。   2、 P2P模式的視訊聊天軟體或外掛。這是前幾年以及目前很多大型視訊聊天專案的主要使用技術。也是很多小型視訊聊天室使用的技術。   3、基於P2P模式+C/S模式混合。這是目前來說,效能最高的技術架構模式。比如QQ等聊天工具的視訊聊天功能。在P2P雙方網路連線速度快的情況下使用P2P,速度慢的情況下使用C/S模式。   4、純WEB的,基於視訊伺服器搭建的B/S結構視訊聊天網站。這是前1-2年視訊技術的主要研究方向。這種模式準確的說是在網站上可以使用的C/S結構。和第一階段C/S結構效能差別不大,但擁有強大的跨平臺優勢。由於其效能上無法和第2、第3階段的效能相比,而導致研究的多,但實用少,產品少。 5、 純WEB的基於視訊伺服器的B/S結構+加上FLASH P2P結構。此階段是目前視訊技術的主要研究方向。但是目前的FLASH P2P無法實現資料分發、轉發等功能,採用1個人和多個人同時建立P2P連線傳輸資料的模式,所以,當人數比較多的時候,此模式會很大的佔用客戶端的頻寬。所以,此模式需要和B/S模式進行搭配。當人數多的時候,使用視訊伺服器,當人數少的時候,使用P2P。 接下來就是開發所會用到的工具以及用什麼語言來開發的介紹 為了讓大家更好的開發自己所需要的與音視訊即時通訊相關的系統。我向大家介紹介紹如何利用這個SDK來去開發,大家可以理解成為開發指南吧 首先下載這個SDK,已經上傳到了51cto的網站上面去,大家放心使用。() 支援Windows平臺音訊即時通訊應用開發 支援C++、C#、Java、Delphi、VB.Net、Qt等開發語言 整合H.264、AAC、AMR等編解碼技術 封裝音視訊的採集、編解碼、傳輸、顯示和播放等模組 提供客戶端SDK和伺服器SDK API介面 下面是使用指南:(以c++為例子) 一、初始化 該部分是首先要完成的,用於設定SDK的一些行為,包括設定對應的回撥函式、設定SDK元件路徑、設定是否產生日誌檔案等,通常初始化AnyChat SDK的程式碼如下(C++):   // 開啟(關閉)SDK的日誌記錄功能
BRAC_ActiveCallLog(TRUE);
    
// 設定SDK核心元件所在目錄
CHAR szCoreSDKPath[MAX_PATH] = {0};
GetModuleFileName(NULL,szCoreSDKPath,sizeof(szCoreSDKPath));
(strrchr(szCoreSDKPath,'\\'))[1] = 0; 
BRAC_SetSDKOption(BRAC_SO_CORESDK_PATH,szCoreSDKPath,strlen(szCoreSDKPath));
    
// 根據BRAC_InitSDK的第二個引數:dwFuncMode,來告訴SDK該如何處理相關的任務(詳情請參考開發文件)
DWORD dwFuncMode = BRAC_FUNC_VIDEO_CBDATA | BRAC_FUNC_AUDIO_AUTOPLAY | BRAC_FUNC_CHKDEPENDMODULE | BRAC_FUNC_AUDIO_VOLUMECALC | BRAC_FUNC_NET_SUPPORTUPNP | BRAC_FUNC_FIREWALL_OPEN |
BRAC_FUNC_AUDIO_AUTOVOLUME | BRAC_FUNC_CONFIG_LOCALINI;
BRAC_InitSDK(this->GetSafeHwnd()/*NULL*/,dwFuncMode);
    
// 設定錄影臨時檔案儲存路徑
CHAR szRecordDirectory[MAX_PATH] = {0};
::GetModuleFileName(NULL,szRecordDirectory,MAX_PATH);
(strrchr(szRecordDirectory,'\\'))[1] = 0; 
strcat(szRecordDirectory,"Record");
BRAC_SetSDKOption(BRAC_SO_RECORD_TMPDIR,szRecordDirectory,strlen(szRecordDirectory));

// 設定錄影檔案質量引數
DWORD dwVideoBitrate = 200 * 1000;    // 200kbps
BRAC_SetSDKOption(BRAC_SO_RECORD_VIDEOBR,(PCHAR)&dwVideoBitrate,sizeof(DWORD));
DWORD dwAudioBitrate = 96 * 1000;    // 96kbps
BRAC_SetSDKOption(BRAC_SO_RECORD_AUDIOBR,(PCHAR)&dwAudioBitrate,sizeof(DWORD));
    
// 設定快照臨時檔案儲存路徑
CHAR szSnapShotDirectory[MAX_PATH] = {0};
::GetModuleFileName(NULL,szSnapShotDirectory,MAX_PATH);
(strrchr(szSnapShotDirectory,'\\'))[1] = 0; 
strcat(szSnapShotDirectory,"SnapShot");
BRAC_SetSDKOption(BRAC_SO_SNAPSHOT_TMPDIR,szSnapShotDirectory,strlen(szSnapShotDirectory));
    
// 設定SDK臨時檔案路徑
CHAR szTempPath[MAX_PATH] = {0};
::GetModuleFileName(NULL,szTempPath,MAX_PATH);
(strrchr(szTempPath,'\\'))[1] = 0; 
strcat(szTempPath,"Temp");
BRAC_SetSDKOption(BRAC_SO_CORESDK_TMPDIR,szTempPath,strlen(szTempPath));

// 啟用音訊自動引數功能(預設關閉)
DWORD bAudioAutoParam = TRUE;
BRAC_SetSDKOption(BRAC_SO_AUDIO_AUTOPARAM,(PCHAR)&bAudioAutoParam,sizeof(DWORD)); 二、登入系統 當第一步初始化完成之後,便可以連線伺服器、驗證使用者身份。通常呼叫程式碼如下(C++): 1.3.// 登入系統  4.2.BRAC_EnterRoom(1,"",0);  房間由伺服器動態管理,由32位的房間ID號來唯一標示,當客戶端指定的房間ID號不存在時,伺服器將會自動建立。進入房間也是一個非同步的過程,是否成功將會觸發非同步訊息,進入房間成功後,伺服器會把當前房間的線上使用者列表傳給客戶端,傳輸完成後,將會觸發非同步訊息(該訊息只觸發一次),只有收到伺服器的線上使用者列表後,才能對房間內的使用者進行音視訊的相關操作。 當自己進入房間成功,且收到伺服器的線上使用者訊息後,有新的使用者進入房間,或是老使用者離開房間,將會觸發非同步訊息,這樣自己便知道誰進入,或是離開了房間。 1、開啟自己的音視訊 進入房間成功之後,便可以開啟自己的音視訊裝置,通常呼叫程式碼如下(C++): 1.3.// 開啟自己的音訊裝置  4.2.BRAC_UserCameraControl(dwUserId,TRUE);  3.1.// 傳送文字訊息  2.1.// 離開房間  2.4.BRAC_Logout();  5.<span times="" new="" roman';="" "="" style="padding: 0px; margin: 0px; font-size: 7pt; line-height: normal;">    5.// 釋放資源  6.<span times="" new="" roman';="" "="" style="padding: 0px; margin: 0px; font-size: 7pt; line-height: normal;">    6.BRAC_Release();  離開房間後,可以進入新的房間,系統登出之後,可以再次呼叫連線伺服器的API介面,但是釋放資源後,SDK將不再工作。