由於使用習慣,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可參考開發包。已經上傳到51CTO,大家可以放心下載Linux平臺上的音視頻即時通訊開發平臺
下面是客戶端部分代碼:
#include "anychat.h" #include <stdlib.h> #include <stdio.h> CAnyChat::CAnyChat() { m_dwRemoteUserId = -1; } CAnyChat::~CAnyChat() { } // void CAnyChat::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<(int)dwUserNum; i++) { m_dwRemoteUserId =lpUserList[i]; BRAC_UserCameraControl(m_dwRemoteUserId, TRUE); BRAC_UserSpeakControl(m_dwRemoteUserId, TRUE); break; } } // 連接服務器消息 void CAnyChat::OnAnyChatConnectMessage(BOOL bSuccess) { fprintf(stdout,"On Connect:bSuccess(%d)\r\n",(int)bSuccess); } // 用戶登陸消息 void CAnyChat::OnAnyChatLoginMessage(DWORD dwUserId, DWORD dwErrorCode) { fprintf(stdout,"On Login:dwUserId(%d), ErrorCode:%d\r\n",(int)dwUserId,dwErrorCode); } // 用戶進入房間消息 void CAnyChat::OnAnyChatEnterRoomMessage(DWORD dwRoomId, DWORDdwErrorCode) { fprintf(stdout,"On EnterRoom(dwRoomId=%d,dwErrorCode=%d)\r\n",dwRoomId,dwErrorCode); if(dwErrorCode == 0) { BRAC_UserCameraControl(-1,TRUE); BRAC_UserSpeakControl(-1,TRUE); } } // 房間在線用戶消息 void CAnyChat::OnAnyChatOnlineUserMessage(DWORD dwUserNum, DWORD dwRoomId) { fprintf(stdout,"Onlineuser(dwUserNum=%d,dwRoomId=%d)\r\n",dwUserNum,dwRoomId); OpenRemoteUserStream(); } // 用戶打開/關閉音頻設備設備消息 void CAnyChat::OnAnyChatMicStateChgMessage(DWORD dwUserId, BOOL bOpenMic) { } // 用戶進入/退出房間消息 void CAnyChat::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(); } //網絡斷開消息 void CAnyChat::OnAnyChatLinkCloseMessage(DWORD dwErrorCode) { fprintf(stdout,"On LinkClose(reason=%d)\r\n",dwErrorCode); m_dwRemoteUserId = -1; } // 用戶攝像頭狀態改變消息 void CAnyChat::OnAnyChatCameraStateChgMessage(DWORD dwUserId, DWORDdwState) { } // 用戶聊天模式改變消息 void CAnyChat::OnAnyChatChatModeChgMessage(DWORD dwUserId, BOOLbPublicChat) { } // 用戶活動狀態發生變化消息 void CAnyChat::OnAnyChatActiveStateChgMessage(DWORD dwUserId, DWORDdwState) { } // P2P連接狀態變化消息 void CAnyChat::OnAnyChatP2PConnectStateMessage(DWORD dwUserId, DWORDdwState) { fprintf(stdout,"On P2PConnect State Change(dwUserId=%d, dwState=%d)\r\n",(int)dwUserId,dwState); } // 用戶私聊請求消息 void CAnyChat::OnAnyChatPrivateRequestMessage(DWORD dwUserId, DWORDdwRequestId) { } // 用戶私聊請求回覆消息 void CAnyChat::OnAnyChatPrivateEchoMessage(DWORD dwUserId, DWORDdwErrorCode) { } // 用戶退出私聊消息 void CAnyChat::OnAnyChatPrivateExitMessage(DWORD dwUserId, DWORDdwErrorCode) { } // SDK警告消息 void CAnyChat::OnAnyChatSDKWarningMessage(DWORD dwErrorCode, DWORDdwReserved) { } // 視頻數據回調 void CAnyChat::OnAnyChatVideoDataCallBack(DWORD dwUserid, LPVOID lpBuf,DWORD dwLen, LPBITMAPINFOHEADER lpbmiHeader) { } // 音頻數據回調 void CAnyChat::OnAnyChatAudioDataCallBack(DWORD dwUserid, LPVOID lpBuf,DWORD dwLen, LPWAVEFORMATEX lpWaveFormatEx) { } // 發送文字的回調函數 void CAnyChat::OnAnyChatTextMsgCallBack(DWORD dwFromUserid, DWORDdwToUserid, BOOL bSecret, LPCTSTR lpMsgBuf, DWORD dwLen) { } // 透明通道回調函數 void CAnyChat::OnAnyChatTransBufferCallBack(DWORD dwUserid, LPBYTE lpBuf,DWORD dwLen) { } // 透明通道數據擴展回調函數 void CAnyChat::OnAnyChatTransBufferExCallBack(DWORD dwUserid, LPBYTElpBuf, DWORD dwLen, DWORD wParam, DWORD lParam, DWORD dwTaskId) { } // 文件傳輸回調函數 void CAnyChat::OnAnyChatTransFileCallBack(DWORD dwUserid, LPCTSTRlpFileName, LPCTSTR lpTempFilePath, DWORD dwFileLength, DWORD wParam, DWORDlParam, DWORD dwTaskId) { } // 音量變化回調函數 void CAnyChat::OnAnyChatVolumeChangeCallBack(BRAC_AudioDevice device,DWORD dwCurrentVolume) { } // SDK Filter 通信數據回調函數 void CAnyChat::OnAnyChatSDKFilterDataCallBack(LPBYTE lpBuf, DWORD dwLen) { } // 錄像、快照任務完成回調函數 void CAnyChat::OnAnyChatRecordSnapShotCallBack(DWORD dwUserid, LPCTSTRlpFileName, DWORD dwParam, BOOL bRecordType) { } // 異步消息通知回調函數 void CAnyChat::OnAnyChatNotifyMessageCallBack(DWORD dwNotifyMsg, DWORDwParam, DWORD lParam) { }