天天看點

音視訊 即時通訊Linux源碼

由于使用習慣,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包

  1. #include "anychat.h" 
  2. #include <stdlib.h> 
  3. #include <stdio.h> 
  4. CAnyChat::CAnyChat() 
  5.     m_dwRemoteUserId = -1; 
  6. CAnyChat::~CAnyChat() 
  7. // 
  8. void CAnyChat::OpenRemoteUserStream(void) 
  9.     if(m_dwRemoteUserId !=(DWORD)-1)      // already opned remoteuser stream 
  10.         return; 
  11.     DWORD dwUserNum = 0; 
  12.     BRAC_GetOnlineUser(NULL,dwUserNum); 
  13.     if(dwUserNum == 0) 
  14.         return; 
  15.     LPDWORD lpUserList = (LPDWORD)malloc(sizeof(DWORD)* dwUserNum); 
  16.     if(!lpUserList) 
  17.         return; 
  18.     BRAC_GetOnlineUser(lpUserList,dwUserNum); 
  19.     for(int i=0;i<(int)dwUserNum; i++) 
  20.     { 
  21.         m_dwRemoteUserId =lpUserList[i]; 
  22.        BRAC_UserCameraControl(m_dwRemoteUserId, TRUE); 
  23.        BRAC_UserSpeakControl(m_dwRemoteUserId, TRUE); 
  24.         break; 
  25.     } 
  26. // 連接配接伺服器消息 
  27. void CAnyChat::OnAnyChatConnectMessage(BOOL bSuccess) 
  28.     fprintf(stdout,"On Connect:bSuccess(%d)\r\n",(int)bSuccess); 
  29. // 使用者登陸消息 
  30. void CAnyChat::OnAnyChatLoginMessage(DWORD dwUserId, DWORD dwErrorCode) 
  31.     fprintf(stdout,"On Login:dwUserId(%d), ErrorCode:%d\r\n",(int)dwUserId,dwErrorCode); 
  32. // 使用者進入房間消息 
  33. void CAnyChat::OnAnyChatEnterRoomMessage(DWORD dwRoomId, DWORDdwErrorCode) 
  34.     fprintf(stdout,"On EnterRoom(dwRoomId=%d,dwErrorCode=%d)\r\n",dwRoomId,dwErrorCode); 
  35.     if(dwErrorCode == 0) 
  36.     { 
  37.        BRAC_UserCameraControl(-1,TRUE); 
  38.         BRAC_UserSpeakControl(-1,TRUE); 
  39.     } 
  40. // 房間線上使用者消息 
  41. void CAnyChat::OnAnyChatOnlineUserMessage(DWORD dwUserNum, DWORD dwRoomId) 
  42.    fprintf(stdout,"Onlineuser(dwUserNum=%d,dwRoomId=%d)\r\n",dwUserNum,dwRoomId); 
  43.     OpenRemoteUserStream(); 
  44. // 使用者打開/關閉音頻裝置裝置消息 
  45. void CAnyChat::OnAnyChatMicStateChgMessage(DWORD dwUserId, BOOL bOpenMic) 
  46. // 使用者進入/退出房間消息 
  47. void CAnyChat::OnAnyChatUserAtRoomMessage(DWORD dwUserId, BOOL bEnter) 
  48.     fprintf(stdout,"OnUserAtRoom(dwUserId=%d, bEnter=%d)\r\n",(int)dwUserId,(int)bEnter); 
  49.     if(dwUserId == m_dwRemoteUserId&& !bEnter) 
  50.         m_dwRemoteUserId = -1; 
  51.     OpenRemoteUserStream(); 
  52. //網絡斷開消息 
  53. void CAnyChat::OnAnyChatLinkCloseMessage(DWORD dwErrorCode) 
  54.     fprintf(stdout,"On LinkClose(reason=%d)\r\n",dwErrorCode); 
  55.     m_dwRemoteUserId = -1; 
  56. // 使用者攝像頭狀态改變消息 
  57. void CAnyChat::OnAnyChatCameraStateChgMessage(DWORD dwUserId, DWORDdwState) 
  58. // 使用者聊天模式改變消息 
  59. void CAnyChat::OnAnyChatChatModeChgMessage(DWORD dwUserId, BOOLbPublicChat) 
  60. // 使用者活動狀态發生變化消息 
  61. void CAnyChat::OnAnyChatActiveStateChgMessage(DWORD dwUserId, DWORDdwState) 
  62. // P2P連接配接狀态變化消息 
  63. void CAnyChat::OnAnyChatP2PConnectStateMessage(DWORD dwUserId, DWORDdwState) 
  64.     fprintf(stdout,"On P2PConnect State Change(dwUserId=%d, dwState=%d)\r\n",(int)dwUserId,dwState); 
  65. // 使用者私聊請求消息 
  66. void CAnyChat::OnAnyChatPrivateRequestMessage(DWORD dwUserId, DWORDdwRequestId) 
  67. // 使用者私聊請求回複消息 
  68. void CAnyChat::OnAnyChatPrivateEchoMessage(DWORD dwUserId, DWORDdwErrorCode) 
  69. // 使用者退出私聊消息 
  70. void CAnyChat::OnAnyChatPrivateExitMessage(DWORD dwUserId, DWORDdwErrorCode) 
  71. // SDK警告消息 
  72. void CAnyChat::OnAnyChatSDKWarningMessage(DWORD dwErrorCode, DWORDdwReserved) 
  73. // 視訊資料回調 
  74. void CAnyChat::OnAnyChatVideoDataCallBack(DWORD dwUserid, LPVOID lpBuf,DWORD dwLen, LPBITMAPINFOHEADER lpbmiHeader) 
  75. // 音頻資料回調 
  76. void CAnyChat::OnAnyChatAudioDataCallBack(DWORD dwUserid, LPVOID lpBuf,DWORD dwLen, LPWAVEFORMATEX lpWaveFormatEx) 
  77. // 發送文字的回調函數 
  78. void CAnyChat::OnAnyChatTextMsgCallBack(DWORD dwFromUserid, DWORDdwToUserid, BOOL bSecret, LPCTSTR lpMsgBuf, DWORD dwLen) 
  79. // 透明通道回調函數 
  80. void CAnyChat::OnAnyChatTransBufferCallBack(DWORD dwUserid, LPBYTE lpBuf,DWORD dwLen) 
  81. // 透明通道資料擴充回調函數 
  82. void CAnyChat::OnAnyChatTransBufferExCallBack(DWORD dwUserid, LPBYTElpBuf, DWORD dwLen, DWORD wParam, DWORD lParam, DWORD dwTaskId) 
  83. // 檔案傳輸回調函數 
  84. void CAnyChat::OnAnyChatTransFileCallBack(DWORD dwUserid, LPCTSTRlpFileName, LPCTSTR lpTempFilePath, DWORD dwFileLength, DWORD wParam, DWORDlParam, DWORD dwTaskId) 
  85. // 音量變化回調函數 
  86. void CAnyChat::OnAnyChatVolumeChangeCallBack(BRAC_AudioDevice device,DWORD dwCurrentVolume) 
  87. // SDK Filter 通信資料回調函數 
  88. void CAnyChat::OnAnyChatSDKFilterDataCallBack(LPBYTE lpBuf, DWORD dwLen) 
  89. // 錄像、快照任務完成回調函數 
  90. void CAnyChat::OnAnyChatRecordSnapShotCallBack(DWORD dwUserid, LPCTSTRlpFileName, DWORD dwParam, BOOL bRecordType) 
  91. // 異步消息通知回調函數 
  92. void CAnyChat::OnAnyChatNotifyMessageCallBack(DWORD dwNotifyMsg, DWORDwParam, DWORD lParam) 

繼續閱讀