linux平台上的即时通讯应用开发
2013-04-15 16:15
120 查看
[align=left]由于使用习惯,Linux在中国受欢迎程度远不如windows,相应的软件也比较少,尤其是音视频类的软件,但是,这并不代表就完全没有。下面介绍一款强大的音视频即时通讯平台给大家,它就是——Anychat for Linux SDK。[/align][align=left]AnyChat是一套跨平台的音、视频即时通讯解决方案,基于先进的H.264视频编码标准、AAC音频编码标准与P2P技术,支持Windows、Linux、Mobile、Android、iOS、Mac等操作系统平台,提供客户端SDK、服务器端SDK,可与第三方平台紧密集成。[/align][align=left]AnyChat for Linux基于LinuxKernel 2.6.x研发,提供标准C、C++语言开发接口。[/align][align=left]AnyChat for Linux可与其它平台的AnyChat互联互通,连接同一个服务器程序,有关服务器的SDK可参考 Linux平台设备上的音频即时通讯应用开发开发包。开发包已经上传到51CTO,大家可以放心下载[/align][align=left]开发包的特点介绍[/align][align=left]支持Linux平台设备上的音频即时通讯应用开发[/align][align=left]提供C++语言API接口,开放示例源代码[/align][align=left]集成H.264、AAC、AMR等编解码技术[/align][align=left]封装音视频的采集、编解码、传输、显示和播放等模块[/align][align=left]支持Android、Web、PC、iOS等设备和Linux之间的互联互通[/align][align=left]
[/align][align=left]下面是客户端部分代码:[/align][align=left]#include"anychat.h"[/align][align=left]#include<stdlib.h>[/align][align=left]#include<stdio.h>[/align][align=left] [/align][align=left]CAnyChat::CAnyChat()[/align][align=left]{[/align][align=left] m_dwRemoteUserId = -1;[/align][align=left]}[/align][align=left] [/align][align=left]CAnyChat::~CAnyChat()[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left] [/align][align=left]//[/align][align=left]voidCAnyChat::OpenRemoteUserStream(void)[/align][align=left]{[/align][align=left] if(m_dwRemoteUserId !=(DWORD)-1) // already opned remoteuser stream[/align][align=left] return;[/align][align=left] DWORD dwUserNum = 0;[/align][align=left] BRAC_GetOnlineUser(NULL,dwUserNum);[/align][align=left] if(dwUserNum == 0)[/align][align=left] return;[/align][align=left] LPDWORD lpUserList =(LPDWORD)malloc(sizeof(DWORD)* dwUserNum);[/align][align=left] if(!lpUserList)[/align][align=left] return;[/align][align=left] BRAC_GetOnlineUser(lpUserList,dwUserNum);[/align][align=left] for(int i=0;i<(int)dwUserNum; i++)[/align][align=left] {[/align][align=left] m_dwRemoteUserId =lpUserList[i];[/align][align=left] BRAC_UserCameraControl(m_dwRemoteUserId,TRUE);[/align][align=left] BRAC_UserSpeakControl(m_dwRemoteUserId,TRUE);[/align][align=left] break;[/align][align=left] }[/align][align=left]}[/align][align=left] [/align][align=left]// 连接服务器消息[/align][align=left]voidCAnyChat::OnAnyChatConnectMessage(BOOL bSuccess)[/align][align=left]{[/align][align=left] fprintf(stdout,"OnConnect:bSuccess(%d)\r\n",(int)bSuccess);[/align][align=left]}[/align][align=left]// 用户登陆消息[/align][align=left]voidCAnyChat::OnAnyChatLoginMessage(DWORD dwUserId, DWORD dwErrorCode)[/align][align=left]{[/align][align=left] fprintf(stdout,"On Login:dwUserId(%d),ErrorCode:%d\r\n",(int)dwUserId,dwErrorCode);[/align][align=left]}[/align][align=left]// 用户进入房间消息[/align][align=left]voidCAnyChat::OnAnyChatEnterRoomMessage(DWORD dwRoomId, DWORDdwErrorCode)[/align][align=left]{[/align][align=left] fprintf(stdout,"OnEnterRoom(dwRoomId=%d,dwErrorCode=%d)\r\n",dwRoomId,dwErrorCode);[/align][align=left] if(dwErrorCode == 0)[/align][align=left] {[/align][align=left] BRAC_UserCameraControl(-1,TRUE);[/align][align=left] BRAC_UserSpeakControl(-1,TRUE);[/align][align=left] }[/align][align=left]}[/align][align=left]// 房间在线用户消息[/align][align=left]voidCAnyChat::OnAnyChatOnlineUserMessage(DWORD dwUserNum, DWORD dwRoomId)[/align][align=left]{[/align][align=left] fprintf(stdout,"Onlineuser(dwUserNum=%d,dwRoomId=%d)\r\n",dwUserNum,dwRoomId);[/align][align=left] OpenRemoteUserStream();[/align][align=left]}[/align][align=left]// 用户打开/关闭音频设备设备消息[/align][align=left]voidCAnyChat::OnAnyChatMicStateChgMessage(DWORD dwUserId, BOOL bOpenMic)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 用户进入/退出房间消息[/align][align=left]voidCAnyChat::OnAnyChatUserAtRoomMessage(DWORD dwUserId, BOOL bEnter)[/align][align=left]{[/align][align=left] fprintf(stdout,"OnUserAtRoom(dwUserId=%d,bEnter=%d)\r\n",(int)dwUserId,(int)bEnter);[/align][align=left] [/align][align=left] if(dwUserId == m_dwRemoteUserId&&!bEnter)[/align][align=left] m_dwRemoteUserId = -1;[/align][align=left] OpenRemoteUserStream();[/align][align=left]}[/align][align=left]//网络断开消息[/align][align=left]voidCAnyChat::OnAnyChatLinkCloseMessage(DWORD dwErrorCode)[/align][align=left]{[/align][align=left] fprintf(stdout,"OnLinkClose(reason=%d)\r\n",dwErrorCode);[/align][align=left] m_dwRemoteUserId = -1;[/align][align=left]}[/align][align=left] [/align][align=left]// 用户摄像头状态改变消息[/align][align=left]voidCAnyChat::OnAnyChatCameraStateChgMessage(DWORD dwUserId, DWORDdwState)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 用户聊天模式改变消息[/align][align=left]voidCAnyChat::OnAnyChatChatModeChgMessage(DWORD dwUserId, BOOLbPublicChat)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 用户活动状态发生变化消息[/align][align=left]voidCAnyChat::OnAnyChatActiveStateChgMessage(DWORD dwUserId, DWORDdwState)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// P2P连接状态变化消息[/align][align=left]voidCAnyChat::OnAnyChatP2PConnectStateMessage(DWORD dwUserId, DWORDdwState)[/align][align=left]{[/align][align=left] fprintf(stdout,"On P2PConnect StateChange(dwUserId=%d, dwState=%d)\r\n",(int)dwUserId,dwState);[/align][align=left]}[/align][align=left] [/align][align=left]// 用户私聊请求消息[/align][align=left]voidCAnyChat::OnAnyChatPrivateRequestMessage(DWORD dwUserId, DWORDdwRequestId)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 用户私聊请求回复消息[/align][align=left]voidCAnyChat::OnAnyChatPrivateEchoMessage(DWORD dwUserId, DWORDdwErrorCode)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 用户退出私聊消息[/align][align=left]voidCAnyChat::OnAnyChatPrivateExitMessage(DWORD dwUserId, DWORDdwErrorCode)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left] [/align][align=left]// SDK警告消息[/align][align=left]voidCAnyChat::OnAnyChatSDKWarningMessage(DWORD dwErrorCode, DWORDdwReserved)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left] [/align][align=left]// 视频数据回调[/align][align=left]voidCAnyChat::OnAnyChatVideoDataCallBack(DWORD dwUserid, LPVOID lpBuf,DWORD dwLen,LPBITMAPINFOHEADER lpbmiHeader)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 音频数据回调[/align][align=left]voidCAnyChat::OnAnyChatAudioDataCallBack(DWORD dwUserid, LPVOID lpBuf,DWORD dwLen,LPWAVEFORMATEX lpWaveFormatEx)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 发送文字的回调函数[/align][align=left]voidCAnyChat::OnAnyChatTextMsgCallBack(DWORD dwFromUserid, DWORDdwToUserid, BOOLbSecret, LPCTSTR lpMsgBuf, DWORD dwLen)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 透明通道回调函数[/align][align=left]voidCAnyChat::OnAnyChatTransBufferCallBack(DWORD dwUserid, LPBYTE lpBuf,DWORDdwLen)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 透明通道数据扩展回调函数[/align][align=left]voidCAnyChat::OnAnyChatTransBufferExCallBack(DWORD dwUserid, LPBYTElpBuf, DWORDdwLen, DWORD wParam, DWORD lParam, DWORD dwTaskId)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 文件传输回调函数[/align][align=left]voidCAnyChat::OnAnyChatTransFileCallBack(DWORD dwUserid, LPCTSTRlpFileName, LPCTSTRlpTempFilePath, DWORD dwFileLength, DWORD wParam, DWORDlParam, DWORD dwTaskId)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 音量变化回调函数[/align][align=left]voidCAnyChat::OnAnyChatVolumeChangeCallBack(BRAC_AudioDevice device,DWORDdwCurrentVolume)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// SDK Filter 通信数据回调函数[/align][align=left]voidCAnyChat::OnAnyChatSDKFilterDataCallBack(LPBYTE lpBuf, DWORD dwLen)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 录像、快照任务完成回调函数[/align][align=left]voidCAnyChat::OnAnyChatRecordSnapShotCallBack(DWORD dwUserid, LPCTSTRlpFileName,DWORD dwParam, BOOL bRecordType)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 异步消息通知回调函数[/align][align=left]void CAnyChat::OnAnyChatNotifyMessageCallBack(DWORDdwNotifyMsg, DWORDwParam, DWORD lParam)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align]
[/align][align=left]下面是客户端部分代码:[/align][align=left]#include"anychat.h"[/align][align=left]#include<stdlib.h>[/align][align=left]#include<stdio.h>[/align][align=left] [/align][align=left]CAnyChat::CAnyChat()[/align][align=left]{[/align][align=left] m_dwRemoteUserId = -1;[/align][align=left]}[/align][align=left] [/align][align=left]CAnyChat::~CAnyChat()[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left] [/align][align=left]//[/align][align=left]voidCAnyChat::OpenRemoteUserStream(void)[/align][align=left]{[/align][align=left] if(m_dwRemoteUserId !=(DWORD)-1) // already opned remoteuser stream[/align][align=left] return;[/align][align=left] DWORD dwUserNum = 0;[/align][align=left] BRAC_GetOnlineUser(NULL,dwUserNum);[/align][align=left] if(dwUserNum == 0)[/align][align=left] return;[/align][align=left] LPDWORD lpUserList =(LPDWORD)malloc(sizeof(DWORD)* dwUserNum);[/align][align=left] if(!lpUserList)[/align][align=left] return;[/align][align=left] BRAC_GetOnlineUser(lpUserList,dwUserNum);[/align][align=left] for(int i=0;i<(int)dwUserNum; i++)[/align][align=left] {[/align][align=left] m_dwRemoteUserId =lpUserList[i];[/align][align=left] BRAC_UserCameraControl(m_dwRemoteUserId,TRUE);[/align][align=left] BRAC_UserSpeakControl(m_dwRemoteUserId,TRUE);[/align][align=left] break;[/align][align=left] }[/align][align=left]}[/align][align=left] [/align][align=left]// 连接服务器消息[/align][align=left]voidCAnyChat::OnAnyChatConnectMessage(BOOL bSuccess)[/align][align=left]{[/align][align=left] fprintf(stdout,"OnConnect:bSuccess(%d)\r\n",(int)bSuccess);[/align][align=left]}[/align][align=left]// 用户登陆消息[/align][align=left]voidCAnyChat::OnAnyChatLoginMessage(DWORD dwUserId, DWORD dwErrorCode)[/align][align=left]{[/align][align=left] fprintf(stdout,"On Login:dwUserId(%d),ErrorCode:%d\r\n",(int)dwUserId,dwErrorCode);[/align][align=left]}[/align][align=left]// 用户进入房间消息[/align][align=left]voidCAnyChat::OnAnyChatEnterRoomMessage(DWORD dwRoomId, DWORDdwErrorCode)[/align][align=left]{[/align][align=left] fprintf(stdout,"OnEnterRoom(dwRoomId=%d,dwErrorCode=%d)\r\n",dwRoomId,dwErrorCode);[/align][align=left] if(dwErrorCode == 0)[/align][align=left] {[/align][align=left] BRAC_UserCameraControl(-1,TRUE);[/align][align=left] BRAC_UserSpeakControl(-1,TRUE);[/align][align=left] }[/align][align=left]}[/align][align=left]// 房间在线用户消息[/align][align=left]voidCAnyChat::OnAnyChatOnlineUserMessage(DWORD dwUserNum, DWORD dwRoomId)[/align][align=left]{[/align][align=left] fprintf(stdout,"Onlineuser(dwUserNum=%d,dwRoomId=%d)\r\n",dwUserNum,dwRoomId);[/align][align=left] OpenRemoteUserStream();[/align][align=left]}[/align][align=left]// 用户打开/关闭音频设备设备消息[/align][align=left]voidCAnyChat::OnAnyChatMicStateChgMessage(DWORD dwUserId, BOOL bOpenMic)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 用户进入/退出房间消息[/align][align=left]voidCAnyChat::OnAnyChatUserAtRoomMessage(DWORD dwUserId, BOOL bEnter)[/align][align=left]{[/align][align=left] fprintf(stdout,"OnUserAtRoom(dwUserId=%d,bEnter=%d)\r\n",(int)dwUserId,(int)bEnter);[/align][align=left] [/align][align=left] if(dwUserId == m_dwRemoteUserId&&!bEnter)[/align][align=left] m_dwRemoteUserId = -1;[/align][align=left] OpenRemoteUserStream();[/align][align=left]}[/align][align=left]//网络断开消息[/align][align=left]voidCAnyChat::OnAnyChatLinkCloseMessage(DWORD dwErrorCode)[/align][align=left]{[/align][align=left] fprintf(stdout,"OnLinkClose(reason=%d)\r\n",dwErrorCode);[/align][align=left] m_dwRemoteUserId = -1;[/align][align=left]}[/align][align=left] [/align][align=left]// 用户摄像头状态改变消息[/align][align=left]voidCAnyChat::OnAnyChatCameraStateChgMessage(DWORD dwUserId, DWORDdwState)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 用户聊天模式改变消息[/align][align=left]voidCAnyChat::OnAnyChatChatModeChgMessage(DWORD dwUserId, BOOLbPublicChat)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 用户活动状态发生变化消息[/align][align=left]voidCAnyChat::OnAnyChatActiveStateChgMessage(DWORD dwUserId, DWORDdwState)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// P2P连接状态变化消息[/align][align=left]voidCAnyChat::OnAnyChatP2PConnectStateMessage(DWORD dwUserId, DWORDdwState)[/align][align=left]{[/align][align=left] fprintf(stdout,"On P2PConnect StateChange(dwUserId=%d, dwState=%d)\r\n",(int)dwUserId,dwState);[/align][align=left]}[/align][align=left] [/align][align=left]// 用户私聊请求消息[/align][align=left]voidCAnyChat::OnAnyChatPrivateRequestMessage(DWORD dwUserId, DWORDdwRequestId)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 用户私聊请求回复消息[/align][align=left]voidCAnyChat::OnAnyChatPrivateEchoMessage(DWORD dwUserId, DWORDdwErrorCode)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 用户退出私聊消息[/align][align=left]voidCAnyChat::OnAnyChatPrivateExitMessage(DWORD dwUserId, DWORDdwErrorCode)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left] [/align][align=left]// SDK警告消息[/align][align=left]voidCAnyChat::OnAnyChatSDKWarningMessage(DWORD dwErrorCode, DWORDdwReserved)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left] [/align][align=left]// 视频数据回调[/align][align=left]voidCAnyChat::OnAnyChatVideoDataCallBack(DWORD dwUserid, LPVOID lpBuf,DWORD dwLen,LPBITMAPINFOHEADER lpbmiHeader)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 音频数据回调[/align][align=left]voidCAnyChat::OnAnyChatAudioDataCallBack(DWORD dwUserid, LPVOID lpBuf,DWORD dwLen,LPWAVEFORMATEX lpWaveFormatEx)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 发送文字的回调函数[/align][align=left]voidCAnyChat::OnAnyChatTextMsgCallBack(DWORD dwFromUserid, DWORDdwToUserid, BOOLbSecret, LPCTSTR lpMsgBuf, DWORD dwLen)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 透明通道回调函数[/align][align=left]voidCAnyChat::OnAnyChatTransBufferCallBack(DWORD dwUserid, LPBYTE lpBuf,DWORDdwLen)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 透明通道数据扩展回调函数[/align][align=left]voidCAnyChat::OnAnyChatTransBufferExCallBack(DWORD dwUserid, LPBYTElpBuf, DWORDdwLen, DWORD wParam, DWORD lParam, DWORD dwTaskId)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 文件传输回调函数[/align][align=left]voidCAnyChat::OnAnyChatTransFileCallBack(DWORD dwUserid, LPCTSTRlpFileName, LPCTSTRlpTempFilePath, DWORD dwFileLength, DWORD wParam, DWORDlParam, DWORD dwTaskId)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 音量变化回调函数[/align][align=left]voidCAnyChat::OnAnyChatVolumeChangeCallBack(BRAC_AudioDevice device,DWORDdwCurrentVolume)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// SDK Filter 通信数据回调函数[/align][align=left]voidCAnyChat::OnAnyChatSDKFilterDataCallBack(LPBYTE lpBuf, DWORD dwLen)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 录像、快照任务完成回调函数[/align][align=left]voidCAnyChat::OnAnyChatRecordSnapShotCallBack(DWORD dwUserid, LPCTSTRlpFileName,DWORD dwParam, BOOL bRecordType)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align][align=left]// 异步消息通知回调函数[/align][align=left]void CAnyChat::OnAnyChatNotifyMessageCallBack(DWORDdwNotifyMsg, DWORDwParam, DWORD lParam)[/align][align=left]{[/align][align=left] [/align][align=left]}[/align]
相关文章推荐
- iOS平台设备上的音频即时通讯应用开发
- 志同道合 法中结成联盟开发Linux应用平台
- Linux平台设备上的音视频即时通讯应用开发
- 即时通讯开发之调用API接口快速在IOS平台的即时通讯应用开发
- Maemo Linux手机平台系列分析:(15) Maemo应用开发
- 新一代Linux应用开发的革命性开发平台
- 支持iOS平台设备上的音频即时通讯应用开发
- Vs2012在Linux开发中的应用(3):添加新平台hi3516
- Maemo Linux手机平台系列分析:(17) Maemo应用开发: GNU make 与makefile
- 即时通讯开发之调用API接口快速在IOS平台的即时通讯应用开发
- 中法合作开发 Linux 应用平台
- Linux 平台上的usb驱动开发,主要有内核驱动的开发和基于libusb的无驱设计。
- Linux开发平台的搭建之SecureCRT
- 《Windows Mobile 平台应用与开发》C#【人出版】例子下载!
- 企业应用开发平台-GAP平台
- 在Android平台上开发网络应用
- 新浪微博开发平台接入流程(1)---注册应用
- 【iCore3应用开发平台】发布 iCore3 应用开发平台出厂代码rev0.0.5
- 不会编程也能做应用:移动应用开发工具和平台精选
- Unix/Linux C++应用开发-简单的C++程序