Linux平台设备上的音视频即时通讯应用开发
2013-04-12 17:42
375 查看
由于使用习惯,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可参考 Linux平台设备上的音频即时通讯应用开发开发包。开发包已经上传到csdn,大家可以放心下载
开发包的特点介绍
支持Linux平台设备上的音频即时通讯应用开发
提供C++语言API接口,开放示例源代码
集成H.264、AAC、AMR等编解码技术
封装音视频的采集、编解码、传输、显示和播放等模块
支持Android、Web、PC、iOS等设备和Linux之间的互联互通
下面是客户端部分代码:
#include"anychat.h"
#include<stdlib.h>
#include<stdio.h>
CAnyChat::CAnyChat()
{
m_dwRemoteUserId = -1;
}
CAnyChat::~CAnyChat()
{
}
//
voidCAnyChat::OpenRemoteUserStream(void)
{
if(m_dwRemoteUserId !=(DWORD)-1) // already opned remoteuser 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;
}
}
// 连接服务器消息
voidCAnyChat::OnAnyChatConnectMessage(BOOL bSuccess)
{
fprintf(stdout,"OnConnect:bSuccess(%d)\r\n",(int)bSuccess);
}
// 用户登陆消息
voidCAnyChat::OnAnyChatLoginMessage(DWORD dwUserId, DWORD dwErrorCode)
{
fprintf(stdout,"On Login:dwUserId(%d),ErrorCode:%d\r\n",(int)dwUserId,dwErrorCode);
}
// 用户进入房间消息
voidCAnyChat::OnAnyChatEnterRoomMessage(DWORD dwRoomId, DWORDdwErrorCode)
{
fprintf(stdout,"OnEnterRoom(dwRoomId=%d,dwErrorCode=%d)\r\n",dwRoomId,dwErrorCode);
if(dwErrorCode == 0)
{
BRAC_UserCameraControl(-1,TRUE);
BRAC_UserSpeakControl(-1,TRUE);
}
}
// 房间在线用户消息
voidCAnyChat::OnAnyChatOnlineUserMessage(DWORD dwUserNum, DWORD dwRoomId)
{
fprintf(stdout,"Onlineuser(dwUserNum=%d,dwRoomId=%d)\r\n",dwUserNum,dwRoomId);
OpenRemoteUserStream();
}
// 用户打开/关闭音频设备设备消息
voidCAnyChat::OnAnyChatMicStateChgMessage(DWORD dwUserId, BOOL bOpenMic)
{
}
// 用户进入/退出房间消息
voidCAnyChat::OnAnyChatUserAtRoomMessage(DWORD dwUserId, BOOL bEnter)
{
fprintf(stdout,"OnUserAtRoom(dwUserId=%d,bEnter=%d)\r\n",(int)dwUserId,(int)bEnter);
if(dwUserId == m_dwRemoteUserId&&!bEnter)
m_dwRemoteUserId = -1;
OpenRemoteUserStream();
}
//网络断开消息
voidCAnyChat::OnAnyChatLinkCloseMessage(DWORD dwErrorCode)
{
fprintf(stdout,"OnLinkClose(reason=%d)\r\n",dwErrorCode);
m_dwRemoteUserId = -1;
}
// 用户摄像头状态改变消息
voidCAnyChat::OnAnyChatCameraStateChgMessage(DWORD dwUserId, DWORDdwState)
{
}
// 用户聊天模式改变消息
voidCAnyChat::OnAnyChatChatModeChgMessage(DWORD dwUserId, BOOLbPublicChat)
{
}
// 用户活动状态发生变化消息
voidCAnyChat::OnAnyChatActiveStateChgMessage(DWORD dwUserId, DWORDdwState)
{
}
// P2P连接状态变化消息
voidCAnyChat::OnAnyChatP2PConnectStateMessage(DWORD dwUserId, DWORDdwState)
{
fprintf(stdout,"On P2PConnect StateChange(dwUserId=%d, dwState=%d)\r\n",(int)dwUserId,dwState);
}
// 用户私聊请求消息
voidCAnyChat::OnAnyChatPrivateRequestMessage(DWORD dwUserId, DWORDdwRequestId)
{
}
// 用户私聊请求回复消息
voidCAnyChat::OnAnyChatPrivateEchoMessage(DWORD dwUserId, DWORDdwErrorCode)
{
}
// 用户退出私聊消息
voidCAnyChat::OnAnyChatPrivateExitMessage(DWORD dwUserId, DWORDdwErrorCode)
{
}
// SDK警告消息
voidCAnyChat::OnAnyChatSDKWarningMessage(DWORD dwErrorCode, DWORDdwReserved)
{
}
// 视频数据回调
voidCAnyChat::OnAnyChatVideoDataCallBack(DWORD dwUserid, LPVOID lpBuf,DWORD dwLen,LPBITMAPINFOHEADER lpbmiHeader)
{
}
// 音频数据回调
voidCAnyChat::OnAnyChatAudioDataCallBack(DWORD dwUserid, LPVOID lpBuf,DWORD dwLen,LPWAVEFORMATEX lpWaveFormatEx)
{
}
// 发送文字的回调函数
voidCAnyChat::OnAnyChatTextMsgCallBack(DWORD dwFromUserid, DWORDdwToUserid, BOOLbSecret, LPCTSTR lpMsgBuf, DWORD dwLen)
{
}
// 透明通道回调函数
voidCAnyChat::OnAnyChatTransBufferCallBack(DWORD dwUserid, LPBYTE lpBuf,DWORDdwLen)
{
}
// 透明通道数据扩展回调函数
voidCAnyChat::OnAnyChatTransBufferExCallBack(DWORD dwUserid, LPBYTElpBuf, DWORDdwLen, DWORD wParam, DWORD lParam, DWORD dwTaskId)
{
}
// 文件传输回调函数
voidCAnyChat::OnAnyChatTransFileCallBack(DWORD dwUserid, LPCTSTRlpFileName, LPCTSTRlpTempFilePath, DWORD dwFileLength, DWORD wParam, DWORDlParam, DWORD dwTaskId)
{
}
// 音量变化回调函数
voidCAnyChat::OnAnyChatVolumeChangeCallBack(BRAC_AudioDevice device,DWORDdwCurrentVolume)
{
}
// SDK Filter 通信数据回调函数
voidCAnyChat::OnAnyChatSDKFilterDataCallBack(LPBYTE lpBuf, DWORD dwLen)
{
}
// 录像、快照任务完成回调函数
voidCAnyChat::OnAnyChatRecordSnapShotCallBack(DWORD dwUserid, LPCTSTRlpFileName,DWORD dwParam, BOOL bRecordType)
{
}
// 异步消息通知回调函数
void CAnyChat::OnAnyChatNotifyMessageCallBack(DWORDdwNotifyMsg, DWORDwParam, DWORD lParam)
{
}
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可参考 Linux平台设备上的音频即时通讯应用开发开发包。开发包已经上传到csdn,大家可以放心下载
开发包的特点介绍
支持Linux平台设备上的音频即时通讯应用开发
提供C++语言API接口,开放示例源代码
集成H.264、AAC、AMR等编解码技术
封装音视频的采集、编解码、传输、显示和播放等模块
支持Android、Web、PC、iOS等设备和Linux之间的互联互通
下面是客户端部分代码:
#include"anychat.h"
#include<stdlib.h>
#include<stdio.h>
CAnyChat::CAnyChat()
{
m_dwRemoteUserId = -1;
}
CAnyChat::~CAnyChat()
{
}
//
voidCAnyChat::OpenRemoteUserStream(void)
{
if(m_dwRemoteUserId !=(DWORD)-1) // already opned remoteuser 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;
}
}
// 连接服务器消息
voidCAnyChat::OnAnyChatConnectMessage(BOOL bSuccess)
{
fprintf(stdout,"OnConnect:bSuccess(%d)\r\n",(int)bSuccess);
}
// 用户登陆消息
voidCAnyChat::OnAnyChatLoginMessage(DWORD dwUserId, DWORD dwErrorCode)
{
fprintf(stdout,"On Login:dwUserId(%d),ErrorCode:%d\r\n",(int)dwUserId,dwErrorCode);
}
// 用户进入房间消息
voidCAnyChat::OnAnyChatEnterRoomMessage(DWORD dwRoomId, DWORDdwErrorCode)
{
fprintf(stdout,"OnEnterRoom(dwRoomId=%d,dwErrorCode=%d)\r\n",dwRoomId,dwErrorCode);
if(dwErrorCode == 0)
{
BRAC_UserCameraControl(-1,TRUE);
BRAC_UserSpeakControl(-1,TRUE);
}
}
// 房间在线用户消息
voidCAnyChat::OnAnyChatOnlineUserMessage(DWORD dwUserNum, DWORD dwRoomId)
{
fprintf(stdout,"Onlineuser(dwUserNum=%d,dwRoomId=%d)\r\n",dwUserNum,dwRoomId);
OpenRemoteUserStream();
}
// 用户打开/关闭音频设备设备消息
voidCAnyChat::OnAnyChatMicStateChgMessage(DWORD dwUserId, BOOL bOpenMic)
{
}
// 用户进入/退出房间消息
voidCAnyChat::OnAnyChatUserAtRoomMessage(DWORD dwUserId, BOOL bEnter)
{
fprintf(stdout,"OnUserAtRoom(dwUserId=%d,bEnter=%d)\r\n",(int)dwUserId,(int)bEnter);
if(dwUserId == m_dwRemoteUserId&&!bEnter)
m_dwRemoteUserId = -1;
OpenRemoteUserStream();
}
//网络断开消息
voidCAnyChat::OnAnyChatLinkCloseMessage(DWORD dwErrorCode)
{
fprintf(stdout,"OnLinkClose(reason=%d)\r\n",dwErrorCode);
m_dwRemoteUserId = -1;
}
// 用户摄像头状态改变消息
voidCAnyChat::OnAnyChatCameraStateChgMessage(DWORD dwUserId, DWORDdwState)
{
}
// 用户聊天模式改变消息
voidCAnyChat::OnAnyChatChatModeChgMessage(DWORD dwUserId, BOOLbPublicChat)
{
}
// 用户活动状态发生变化消息
voidCAnyChat::OnAnyChatActiveStateChgMessage(DWORD dwUserId, DWORDdwState)
{
}
// P2P连接状态变化消息
voidCAnyChat::OnAnyChatP2PConnectStateMessage(DWORD dwUserId, DWORDdwState)
{
fprintf(stdout,"On P2PConnect StateChange(dwUserId=%d, dwState=%d)\r\n",(int)dwUserId,dwState);
}
// 用户私聊请求消息
voidCAnyChat::OnAnyChatPrivateRequestMessage(DWORD dwUserId, DWORDdwRequestId)
{
}
// 用户私聊请求回复消息
voidCAnyChat::OnAnyChatPrivateEchoMessage(DWORD dwUserId, DWORDdwErrorCode)
{
}
// 用户退出私聊消息
voidCAnyChat::OnAnyChatPrivateExitMessage(DWORD dwUserId, DWORDdwErrorCode)
{
}
// SDK警告消息
voidCAnyChat::OnAnyChatSDKWarningMessage(DWORD dwErrorCode, DWORDdwReserved)
{
}
// 视频数据回调
voidCAnyChat::OnAnyChatVideoDataCallBack(DWORD dwUserid, LPVOID lpBuf,DWORD dwLen,LPBITMAPINFOHEADER lpbmiHeader)
{
}
// 音频数据回调
voidCAnyChat::OnAnyChatAudioDataCallBack(DWORD dwUserid, LPVOID lpBuf,DWORD dwLen,LPWAVEFORMATEX lpWaveFormatEx)
{
}
// 发送文字的回调函数
voidCAnyChat::OnAnyChatTextMsgCallBack(DWORD dwFromUserid, DWORDdwToUserid, BOOLbSecret, LPCTSTR lpMsgBuf, DWORD dwLen)
{
}
// 透明通道回调函数
voidCAnyChat::OnAnyChatTransBufferCallBack(DWORD dwUserid, LPBYTE lpBuf,DWORDdwLen)
{
}
// 透明通道数据扩展回调函数
voidCAnyChat::OnAnyChatTransBufferExCallBack(DWORD dwUserid, LPBYTElpBuf, DWORDdwLen, DWORD wParam, DWORD lParam, DWORD dwTaskId)
{
}
// 文件传输回调函数
voidCAnyChat::OnAnyChatTransFileCallBack(DWORD dwUserid, LPCTSTRlpFileName, LPCTSTRlpTempFilePath, DWORD dwFileLength, DWORD wParam, DWORDlParam, DWORD dwTaskId)
{
}
// 音量变化回调函数
voidCAnyChat::OnAnyChatVolumeChangeCallBack(BRAC_AudioDevice device,DWORDdwCurrentVolume)
{
}
// SDK Filter 通信数据回调函数
voidCAnyChat::OnAnyChatSDKFilterDataCallBack(LPBYTE lpBuf, DWORD dwLen)
{
}
// 录像、快照任务完成回调函数
voidCAnyChat::OnAnyChatRecordSnapShotCallBack(DWORD dwUserid, LPCTSTRlpFileName,DWORD dwParam, BOOL bRecordType)
{
}
// 异步消息通知回调函数
void CAnyChat::OnAnyChatNotifyMessageCallBack(DWORDdwNotifyMsg, DWORDwParam, DWORD lParam)
{
}
相关文章推荐
- Linux平台上的音视频即时通讯开发平台
- 安卓平台下的音视频即时通讯应用的开发
- Linux平台上的音视频即时通讯开发平台
- 苹果系统下的音视频即时通讯应用开发建议
- IOS平台下的音视频即时通讯开发之调用API
- 即时通讯开发平台音视频SDK
- 即时通讯开发平台的透明通道,让你快速把音视频聊天集成到系统中去
- 浏览器上的音视频即时通讯应用开发
- Linux 设备驱动开发 — platform设备驱动应用实例解析
- 研究大华3G设备接入自主视频开发平台
- 【视频】 Linux高级程序设计01.2开发平台及Linux环境限制
- 【工业串口和网络软件通讯平台(SuperIO)教程】四.开发设备驱动
- Linux平台下I2C设备驱动开发和实现
- 【5集iCore3_ADP演示视频】5-5 iCore3应用开发平台示波器和信号源校准
- linux驱动开发-字符设备初级应用(管道)
- USB驱动开发之远程访问USB设备扩展(linux平台USB设备数据采集端)
- 即时通讯开发平台 (部分C#源码)
- AgileEAS.NET平台视频会议培训第二辑-简单插件开发应用演练(速度下载)
- 音视频通讯开发平台
- Android平台即时通讯软件开发小经验