在linux系统下实现音视频即时通讯的部分代码

 由于使用习惯,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可参考官网的SDK包

 

  
  
  
  
  1. #include "anychat.h" 
  2. #include <stdlib.h> 
  3. #include <stdio.h> 
  4.   
  5. CAnyChat::CAnyChat() 
  6.     m_dwRemoteUserId = -1; 
  7.   
  8. CAnyChat::~CAnyChat() 
  9.   
  10.   
  11. // 
  12. void CAnyChat::OpenRemoteUserStream(void) 
  13.     if(m_dwRemoteUserId !=(DWORD)-1)      // already opned remoteuser stream 
  14.         return; 
  15.     DWORD dwUserNum = 0
  16.     BRAC_GetOnlineUser(NULL,dwUserNum); 
  17.     if(dwUserNum == 0) 
  18.         return; 
  19.     LPDWORD lpUserList = (LPDWORD)malloc(sizeof(DWORD)* dwUserNum); 
  20.     if(!lpUserList) 
  21.         return; 
  22.     BRAC_GetOnlineUser(lpUserList,dwUserNum); 
  23.     for(int i=0;i<(int)dwUserNum; i++) 
  24.     { 
  25.         m_dwRemoteUserId =lpUserList[i]; 
  26.        BRAC_UserCameraControl(m_dwRemoteUserId, TRUE); 
  27.        BRAC_UserSpeakControl(m_dwRemoteUserId, TRUE); 
  28.         break; 
  29.     } 
  30.   
  31. // 连接服务器消息 
  32. void CAnyChat::OnAnyChatConnectMessage(BOOL bSuccess) 
  33.     fprintf(stdout,"On Connect:bSuccess(%d)\r\n",(int)bSuccess); 
  34. // 用户登陆消息 
  35. void CAnyChat::OnAnyChatLoginMessage(DWORD dwUserId, DWORD dwErrorCode) 
  36.     fprintf(stdout,"On Login:dwUserId(%d), ErrorCode:%d\r\n",(int)dwUserId,dwErrorCode); 
  37. // 用户进入房间消息 
  38. void CAnyChat::OnAnyChatEnterRoomMessage(DWORD dwRoomId, DWORDdwErrorCode) 
  39.     fprintf(stdout,"On EnterRoom(dwRoomId=%d,dwErrorCode=%d)\r\n",dwRoomId,dwErrorCode); 
  40.     if(dwErrorCode == 0) 
  41.     { 
  42.        BRAC_UserCameraControl(-1,TRUE); 
  43.         BRAC_UserSpeakControl(-1,TRUE); 
  44.     } 
  45. // 房间在线用户消息 
  46. void CAnyChat::OnAnyChatOnlineUserMessage(DWORD dwUserNum, DWORD dwRoomId) 
  47.    fprintf(stdout,"Onlineuser(dwUserNum=%d,dwRoomId=%d)\r\n",dwUserNum,dwRoomId); 
  48.     OpenRemoteUserStream(); 
  49. // 用户打开/关闭音频设备设备消息 
  50. void CAnyChat::OnAnyChatMicStateChgMessage(DWORD dwUserId, BOOL bOpenMic) 
  51.   
  52. // 用户进入/退出房间消息 
  53. void CAnyChat::OnAnyChatUserAtRoomMessage(DWORD dwUserId, BOOL bEnter) 
  54.     fprintf(stdout,"OnUserAtRoom(dwUserId=%d, bEnter=%d)\r\n",(int)dwUserId,(int)bEnter); 
  55.   
  56.     if(dwUserId == m_dwRemoteUserId&& !bEnter) 
  57.         m_dwRemoteUserId = -1; 
  58.     OpenRemoteUserStream(); 
  59. //网络断开消息 
  60. void CAnyChat::OnAnyChatLinkCloseMessage(DWORD dwErrorCode) 
  61.     fprintf(stdout,"On LinkClose(reason=%d)\r\n",dwErrorCode); 
  62.     m_dwRemoteUserId = -1; 
  63.   
  64. // 用户摄像头状态改变消息 
  65. void CAnyChat::OnAnyChatCameraStateChgMessage(DWORD dwUserId, DWORDdwState) 
  66.   
  67. // 用户聊天模式改变消息 
  68. void CAnyChat::OnAnyChatChatModeChgMessage(DWORD dwUserId, BOOLbPublicChat) 
  69.   
  70. // 用户活动状态发生变化消息 
  71. void CAnyChat::OnAnyChatActiveStateChgMessage(DWORD dwUserId, DWORDdwState) 
  72.   
  73. // P2P连接状态变化消息 
  74. void CAnyChat::OnAnyChatP2PConnectStateMessage(DWORD dwUserId, DWORDdwState) 
  75.     fprintf(stdout,"On P2PConnect State Change(dwUserId=%d, dwState=%d)\r\n",(int)dwUserId,dwState); 
  76.   
  77. // 用户私聊请求消息 
  78. void CAnyChat::OnAnyChatPrivateRequestMessage(DWORD dwUserId, DWORDdwRequestId) 
  79.   
  80. // 用户私聊请求回复消息 
  81. void CAnyChat::OnAnyChatPrivateEchoMessage(DWORD dwUserId, DWORDdwErrorCode) 
  82.   
  83. // 用户退出私聊消息 
  84. void CAnyChat::OnAnyChatPrivateExitMessage(DWORD dwUserId, DWORDdwErrorCode) 
  85.   
  86.   
  87. // SDK警告消息 
  88. void CAnyChat::OnAnyChatSDKWarningMessage(DWORD dwErrorCode, DWORDdwReserved) 
  89.   
  90.   
  91. // 视频数据回调 
  92. void CAnyChat::OnAnyChatVideoDataCallBack(DWORD dwUserid, LPVOID lpBuf,DWORD dwLen, LPBITMAPINFOHEADER lpbmiHeader) 
  93.   
  94. // 音频数据回调 
  95. void CAnyChat::OnAnyChatAudioDataCallBack(DWORD dwUserid, LPVOID lpBuf,DWORD dwLen, LPWAVEFORMATEX lpWaveFormatEx) 
  96.   
  97. // 发送文字的回调函数 
  98. void CAnyChat::OnAnyChatTextMsgCallBack(DWORD dwFromUserid, DWORDdwToUserid, BOOL bSecret, LPCTSTR lpMsgBuf, DWORD dwLen) 
  99.   
  100. // 透明通道回调函数 
  101. void CAnyChat::OnAnyChatTransBufferCallBack(DWORD dwUserid, LPBYTE lpBuf,DWORD dwLen) 
  102.   
  103. // 透明通道数据扩展回调函数 
  104. void CAnyChat::OnAnyChatTransBufferExCallBack(DWORD dwUserid, LPBYTElpBuf, DWORD dwLen, DWORD wParam, DWORD lParam, DWORD dwTaskId) 
  105.   
  106. // 文件传输回调函数 
  107. void CAnyChat::OnAnyChatTransFileCallBack(DWORD dwUserid, LPCTSTRlpFileName, LPCTSTR lpTempFilePath, DWORD dwFileLength, DWORD wParam, DWORDlParam, DWORD dwTaskId) 
  108.   
  109. // 音量变化回调函数 
  110. void CAnyChat::OnAnyChatVolumeChangeCallBack(BRAC_AudioDevice device,DWORD dwCurrentVolume) 
  111.   
  112. // SDK Filter 通信数据回调函数 
  113. void CAnyChat::OnAnyChatSDKFilterDataCallBack(LPBYTE lpBuf, DWORD dwLen) 
  114.   
  115. // 录像、快照任务完成回调函数 
  116. void CAnyChat::OnAnyChatRecordSnapShotCallBack(DWORD dwUserid, LPCTSTRlpFileName, DWORD dwParam, BOOL bRecordType) 
  117.   
  118. // 异步消息通知回调函数 
  119. void CAnyChat::OnAnyChatNotifyMessageCallBack(DWORD dwNotifyMsg, DWORDwParam, DWORD lParam) 
  120.   

 

你可能感兴趣的:(linux,即时通讯,音视频,linux系统)