由于使用習慣,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)
{
}