Linux平台设备上的音视频即时通讯应用开发

来源:互联网 发布:网络钮祜禄是什么梗 编辑:程序博客网 时间:2024/05/22 15:08

由于使用习惯,Linux在中国受欢迎程度远不如windows,相应的软件也比较少,尤其是音视频类的软件,但是,这并不代表就完全没有。下面介绍一款强大的音视频即时通讯平台给大家,它就是——Anychat for Linux SDK

AnyChat是一套跨平台的音、视频即时通讯解决方案,基于先进的H.264视频编码标准、AAC音频编码标准与P2P技术,支持WindowsLinuxMobileAndroidiOSMac等操作系统平台,提供客户端SDK、服务器端SDK,可与第三方平台紧密集成。

AnyChat for Linux基于LinuxKernel 2.6.x研发,提供标准CC++语言开发接口。

AnyChat for Linux可与其它平台的AnyChat互联互通,连接同一个服务器程序,有关服务器的SDK可参考 Linux平台设备上的音频即时通讯应用开发开发包。开发包已经上传到csdn,大家可以放心下载

开发包的特点介绍

支持Linux平台设备上的音频即时通讯应用开发

提供C++语言API接口,开放示例源代码

集成H.264AACAMR等编解码技术

封装音视频的采集、编解码、传输、显示和播放等模块

支持AndroidWebPCiOS等设备和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)

{

 

}



原创粉丝点击