1. 程式人生 > >音視訊 即時通訊Linux原始碼

音視訊 即時通訊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)