Linux系統的優勢不少,其中主要的有如下幾個方面:
1. 幾乎沒有病毒
2. 低成本
3. 低軟件成本: 因爲Linux 是開放源代碼的操做系統,除了Kernel免費之外,它的許多系統程序以及應用程序也是自由軟件,能夠從網上免費得到。因此它的軟件成本很是低廉。
eTrade公司的首席技術官John Levin說:「採用Linux操做系統環境比運行與維護UNIX操做系統成本下降幾乎30倍」。
可是,因爲使用習慣,Linux在中國受歡迎程度遠不如windows,相應的軟件也比較少,尤爲是音視頻類的軟件,可是,這並不表明就徹底沒有。下面介紹一款強大的音視頻即時通信平臺給你們,它就是——Anychat for Linux SDK。
AnyChat是一套跨平臺的音、視頻即時通信解決方案,基於先進的H.264視頻編碼標準、AAC音頻編碼標準與P2P技術,支持Windows、Linux、Mobile、Android、iOS、Mac等操做系統平臺,提供客戶端SDK、服務器端SDK,可與第三方平臺緊密集成。
AnyChat for Linux基於Linux Kernel 2.6.x研發,提供標準C、C++語言開發接口。
AnyChat for Linux可與其它平臺的AnyChat互聯互通,鏈接同一個服務器程序,有關服務器的SDK可參考AnyChat Platform Core 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 remote user 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, DWORD dwErrorCode)
{
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,"On UserAtRoom(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 Link Close(reason=%d)\r\n",dwErrorCode);
m_dwRemoteUserId = -1;
}
// 用戶攝像頭狀態改變消息
void CAnyChat::OnAnyChatCameraStateChgMessage(DWORD dwUserId, DWORD dwState)
{
}
// 用戶聊天模式改變消息
void CAnyChat::OnAnyChatChatModeChgMessage(DWORD dwUserId, BOOL bPublicChat)
{
}
// 用戶活動狀態發生變化消息
void CAnyChat::OnAnyChatActiveStateChgMessage(DWORD dwUserId, DWORD dwState)
{
}
// P2P鏈接狀態變化消息
void CAnyChat::OnAnyChatP2PConnectStateMessage(DWORD dwUserId, DWORD dwState)
{
fprintf(stdout,"On P2P Connect State Change(dwUserId=%d, dwState=%d)\r\n",(int)dwUserId,dwState);
}
// 用戶私聊請求消息
void CAnyChat::OnAnyChatPrivateRequestMessage(DWORD dwUserId, DWORD dwRequestId)
{
}
// 用戶私聊請求回覆消息
void CAnyChat::OnAnyChatPrivateEchoMessage(DWORD dwUserId, DWORD dwErrorCode)
{
}
// 用戶退出私聊消息
void CAnyChat::OnAnyChatPrivateExitMessage(DWORD dwUserId, DWORD dwErrorCode)
{
}
// SDK警告消息
void CAnyChat::OnAnyChatSDKWarningMessage(DWORD dwErrorCode, DWORD dwReserved)
{
}
// 視頻數據回調
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, DWORD dwToUserid, BOOL bSecret, LPCTSTR lpMsgBuf, DWORD dwLen)
{
}
// 透明通道回調函數
void CAnyChat::OnAnyChatTransBufferCallBack(DWORD dwUserid, LPBYTE lpBuf, DWORD dwLen)
{
}
// 透明通道數據擴展回調函數
void CAnyChat::OnAnyChatTransBufferExCallBack(DWORD dwUserid, LPBYTE lpBuf, DWORD dwLen, DWORD wParam, DWORD lParam, DWORD dwTaskId)
{
}
// 文件傳輸回調函數
void CAnyChat::OnAnyChatTransFileCallBack(DWORD dwUserid, LPCTSTR lpFileName, LPCTSTR lpTempFilePath, DWORD dwFileLength, DWORD wParam, DWORD lParam, DWORD dwTaskId)
{
}
// 音量變化回調函數
void CAnyChat::OnAnyChatVolumeChangeCallBack(BRAC_AudioDevice device, DWORD dwCurrentVolume)
{
}
// SDK Filter 通訊數據回調函數
void CAnyChat::OnAnyChatSDKFilterDataCallBack(LPBYTE lpBuf, DWORD dwLen)
{
}
// 錄像、快照任務完成回調函數
void CAnyChat::OnAnyChatRecordSnapShotCallBack(DWORD dwUserid, LPCTSTR lpFileName, DWORD dwParam, BOOL bRecordType)
{
}
// 異步消息通知回調函數
void CAnyChat::OnAnyChatNotifyMessageCallBack(DWORD dwNotifyMsg, DWORD wParam, DWORD lParam)
{
} windows