天天看點

linux+即時通訊伺服器,linux平台上的即時通訊應用開發

由于使用習慣,Linux在中國受歡迎程度遠不如windows,相應的軟體也比較少,尤其是音視訊類的軟體,但是,這并不代表就完全沒有。下面介紹一款強大的音視訊即時通訊平台給大家,它就是——Anychat for Linux SDK。

AnyChat是一套跨平台的音、視訊即時通訊解決方案,基于先進的H.264視訊編碼标準、AAC音頻編碼标準與P2P技術,支援Windows、Linux、Mobile、Android、iOS、Mac等作業系統平台,提供用戶端SDK、伺服器端SDK,可與第三方平台緊密內建。

AnyChat for Linux基于LinuxKernel 2.6.x研發,提供标準C、C++語言開發接口。

AnyChat for Linux可與其它平台的AnyChat互聯互通,連接配接同一個伺服器程式,有關伺服器的SDK可參考Linux平台裝置上的音頻即時通訊應用開發開發包。開發包已經上傳到51CTO,大家可以放心下載下傳

開發包的特點介紹

支援Linux平台裝置上的音頻即時通訊應用開發

提供C++語言API接口,開放示例源代碼

內建H.264、AAC、AMR等編解碼技術

封裝音視訊的采集、編解碼、傳輸、顯示和播放等子產品

支援Android、Web、PC、iOS等裝置和Linux之間的互聯互通

下面是用戶端部分代碼:

#include"anychat.h"

#include

#include

CAnyChat::CAnyChat()

{

m_dwRemoteUserId = -1;

}

CAnyChat::~CAnyChat()

{

}

//

voidCAnyChat::OpenRemoteUserStream(void)

{

if(m_dwRemoteUserId !=(DWORD)-1)      // already opned remoteuser stream

return;

DWORD dwUserNum = 0;

BRAC_GetOnlineUser(NULL,dwUserNum);

if(dwUserNum == 0)

return;

LPDWORD lpUserList =(LPDWORD)malloc(sizeof(DWORD)* dwUserNum);

if(!lpUserList)

return;

BRAC_GetOnlineUser(lpUserList,dwUserNum);

for(int i=0;i

{

m_dwRemoteUserId =lpUserList[i];

BRAC_UserCameraControl(m_dwRemoteUserId,TRUE);

BRAC_UserSpeakControl(m_dwRemoteUserId,TRUE);

break;

}

}

// 連接配接伺服器消息

voidCAnyChat::OnAnyChatConnectMessage(BOOL bSuccess)

{

fprintf(stdout,"OnConnect:bSuccess(%d)\r\n",(int)bSuccess);

}

// 使用者登陸消息

voidCAnyChat::OnAnyChatLoginMessage(DWORD dwUserId, DWORD dwErrorCode)

{

fprintf(stdout,"On Login:dwUserId(%d),ErrorCode:%d\r\n",(int)dwUserId,dwErrorCode);

}

// 使用者進入房間消息

voidCAnyChat::OnAnyChatEnterRoomMessage(DWORD dwRoomId, DWORDdwErrorCode)

{

fprintf(stdout,"OnEnterRoom(dwRoomId=%d,dwErrorCode=%d)\r\n",dwRoomId,dwErrorCode);

if(dwErrorCode == 0)

{

BRAC_UserCameraControl(-1,TRUE);

BRAC_UserSpeakControl(-1,TRUE);

}

}

// 房間線上使用者消息

voidCAnyChat::OnAnyChatOnlineUserMessage(DWORD dwUserNum, DWORD dwRoomId)

{

fprintf(stdout,"Onlineuser(dwUserNum=%d,dwRoomId=%d)\r\n",dwUserNum,dwRoomId);

OpenRemoteUserStream();

}

// 使用者打開/關閉音頻裝置裝置消息

voidCAnyChat::OnAnyChatMicStateChgMessage(DWORD dwUserId, BOOL bOpenMic)

{

}

// 使用者進入/退出房間消息

voidCAnyChat::OnAnyChatUserAtRoomMessage(DWORD dwUserId, BOOL bEnter)

{

fprintf(stdout,"OnUserAtRoom(dwUserId=%d,bEnter=%d)\r\n",(int)dwUserId,(int)bEnter);

if(dwUserId == m_dwRemoteUserId&&!bEnter)

m_dwRemoteUserId = -1;

OpenRemoteUserStream();

}

//網絡斷開消息

voidCAnyChat::OnAnyChatLinkCloseMessage(DWORD dwErrorCode)

{

fprintf(stdout,"OnLinkClose(reason=%d)\r\n",dwErrorCode);

m_dwRemoteUserId = -1;

}

// 使用者攝像頭狀态改變消息

voidCAnyChat::OnAnyChatCameraStateChgMessage(DWORD dwUserId, DWORDdwState)

{

}

// 使用者聊天模式改變消息

voidCAnyChat::OnAnyChatChatModeChgMessage(DWORD dwUserId, BOOLbPublicChat)

{

}

// 使用者活動狀态發生變化消息

voidCAnyChat::OnAnyChatActiveStateChgMessage(DWORD dwUserId, DWORDdwState)

{

}

// P2P連接配接狀态變化消息

voidCAnyChat::OnAnyChatP2PConnectStateMessage(DWORD dwUserId, DWORDdwState)

{

fprintf(stdout,"On P2PConnect StateChange(dwUserId=%d, dwState=%d)\r\n",(int)dwUserId,dwState);

}

// 使用者私聊請求消息

voidCAnyChat::OnAnyChatPrivateRequestMessage(DWORD dwUserId, DWORDdwRequestId)

{

}

// 使用者私聊請求回複消息

voidCAnyChat::OnAnyChatPrivateEchoMessage(DWORD dwUserId, DWORDdwErrorCode)

{

}

// 使用者退出私聊消息

voidCAnyChat::OnAnyChatPrivateExitMessage(DWORD dwUserId, DWORDdwErrorCode)

{

}

// SDK警告消息

voidCAnyChat::OnAnyChatSDKWarningMessage(DWORD dwErrorCode, DWORDdwReserved)

{

}

// 視訊資料回調

voidCAnyChat::OnAnyChatVideoDataCallBack(DWORD dwUserid, LPVOID lpBuf,DWORD dwLen,LPBITMAPINFOHEADER lpbmiHeader)

{

}

// 音頻資料回調

voidCAnyChat::OnAnyChatAudioDataCallBack(DWORD dwUserid, LPVOID lpBuf,DWORD dwLen,LPWAVEFORMATEX lpWaveFormatEx)

{

}

// 發送文字的回調函數

voidCAnyChat::OnAnyChatTextMsgCallBack(DWORD dwFromUserid, DWORDdwToUserid, BOOLbSecret, LPCTSTR lpMsgBuf, DWORD dwLen)

{

}

// 透明通道回調函數

voidCAnyChat::OnAnyChatTransBufferCallBack(DWORD dwUserid, LPBYTE lpBuf,DWORDdwLen)

{

}

// 透明通道資料擴充回調函數

voidCAnyChat::OnAnyChatTransBufferExCallBack(DWORD dwUserid, LPBYTElpBuf, DWORDdwLen, DWORD wParam, DWORD lParam, DWORD dwTaskId)

{

}

// 檔案傳輸回調函數

voidCAnyChat::OnAnyChatTransFileCallBack(DWORD dwUserid, LPCTSTRlpFileName, LPCTSTRlpTempFilePath, DWORD dwFileLength, DWORD wParam, DWORDlParam, DWORD dwTaskId)

{

}

// 音量變化回調函數

voidCAnyChat::OnAnyChatVolumeChangeCallBack(BRAC_AudioDevice device,DWORDdwCurrentVolume)

{

}

// SDK Filter 通信資料回調函數

voidCAnyChat::OnAnyChatSDKFilterDataCallBack(LPBYTE lpBuf, DWORD dwLen)

{

}

// 錄像、快照任務完成回調函數

voidCAnyChat::OnAnyChatRecordSnapShotCallBack(DWORD dwUserid, LPCTSTRlpFileName,DWORD dwParam, BOOL bRecordType)

{

}

// 異步消息通知回調函數

void CAnyChat::OnAnyChatNotifyMessageCallBack(DWORDdwNotifyMsg, DWORDwParam, DWORD lParam)

{

}