由于使用習慣,Linux在中國受歡迎程度遠不如windows,相應的軟體也比較少,尤其是音視訊類的軟體,但是,這并不代表就完全沒有。下面介紹一款強大的音視訊即時通訊平台給大家,它就是——Anychat for Linux SDK。
AnyChat是一套跨平台的音、視訊即時通訊解決方案,基于先進的H.264視訊編碼标準、AAC音頻編碼标準與P2P技術,支援Windows、Linux、web、Android、iOS、等作業系統平台,提供用戶端SDK、伺服器端SDK,可與第三方平台緊密內建。
SDK基于LinuxKernel 2.6.x研發,提供标準C、C++語言開發接口。
SDK可與其它平台如windows、Android、iOS、web等互聯互通,連接配接同一個伺服器程式,有關伺服器的SDK可參考官網的SDK包
- #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)
- {
- }