基于AnyChat的视频会议程序

  AnyChat是一款跨平台的音视频解决方案。

  可以进行双人或多人的语音实时通话,支持Windows、Web、Android、iOS、Mac、Linux等跨平台通信。

  所提供的SDK支持C++、Delphi、Java、C#、VB、object-c等多种语音开发。

  AnyChat包括音频视频录制,拍照,服务器录像,文字聊天,文件发送等多种功能。

  界面如下

  

  调用流程:

  1.在所要监听的类中调用重载WndProc方法,实现windows消息的监听。

/// <summary>
/// 重载
/// </summary>
/// <param name="m"></param>
protected override void WndProc(ref Message m)
{
    if (m.Msg == AnyChatCoreSDK.WM_GV_CONNECT)
    {
        //客户端连接服务器,表示是否连接成功
        int succed = m.WParam.ToInt32();
        //连接服务器成功
        if (succed == 1)
        {
            //登录服务器(在WndProc中的获取方法回调结果。参数:AnyChatCoreSDK.WM_GV_LOGINSYSTEM)
            int ret = AnyChatCoreSDK.Login(PublicMembers.g_Name, "", 0);
        }
        else
        {
            PublicMembers.ShowRightTip("登录失败。错误代码:" + succed, "");
        }
    }
    else if (m.Msg == AnyChatCoreSDK.WM_GV_LOGINSYSTEM)
    {
        //客户端登录系统,wParam(INT)表示自己的用户ID号
        int userid = m.WParam.ToInt32();
        if (m.LParam.ToInt32() == 0)
        {
            m_myUserID = userid;
            //进入房间(在WndProc中的获取方法回调结果。参数:AnyChatCoreSDK.WM_GV_ENTERROOM)
            int ret = AnyChatCoreSDK.EnterRoom(m_RoomID, "", 0);
        }
        else
        {
            MessageBox.Show("登录服务器失败,代码出错为:" + m.LParam.ToInt32(), "警告");
        }
    }
    else if (m.Msg == AnyChatCoreSDK.WM_GV_ENTERROOM)
    {
        //客户端进入房间
        if (m.LParam.ToInt32() == 0)
        {
            //绑定本机视频窗口 -1代表自己
            int ret = AnyChatCoreSDK.SetVideoPos(-1, picLocalVideo.Handle, 0, 0, picLocalVideo.Width, picLocalVideo.Height);
            //开启本地视频 -1代表自己
            ret = AnyChatCoreSDK.UserCameraControl(-1, true);
            //开启本地声音 -1代表自己
            ret = AnyChatCoreSDK.UserSpeakControl(-1, true);
        }
        else
        {
            MessageBox.Show("申请进入房间失败,出错代码为:" + m.LParam.ToInt32(), "警告");
        }
    }
    else if (m.Msg == AnyChatCoreSDK.WM_GV_ONLINEUSER)
    {
        //收到当前房间的在线用户信息,进入房间后触发一次
        int usrcnt = m.WParam.ToInt32();
        int cnt = 0;//在线用户数量
        AnyChatCoreSDK.GetOnlineUser(null, ref cnt);//获取在线用户数量
        int[] userArr = new int[cnt];//在线用户ID
        AnyChatCoreSDK.GetOnlineUser(userArr, ref cnt);//获取在线用户ID数组
    }
    else if (m.Msg == AnyChatCoreSDK.WM_GV_LINKCLOSE)
    {
        //客户端掉线处理
    }
    else if (m.Msg == AnyChatCoreSDK.WM_GV_USERATROOM)
    {
        //用户进入(离开)房间,wParam(INT)表示用户ID号、
        //用户ID
        int userID = m.WParam.ToInt32();
        //发生状态
        int boEntered = m.LParam.ToInt32();
        if (boEntered == 1)
        {
            //进入房间
            m_others.Add(userID);
            StartVideo(userID);
        }
        else
        {
            //退出房间
            m_others.Remove(userID);
            EndVideo(userID);
        }
    }
    base.WndProc(ref m);
}

  2.初始化AnyChat的SDK

//设置回调函数
SystemSetting.Text_OnReceive = new TextReceivedHandler(Received_CallBack);//文本回调涵数
SystemSetting.TransBuffer_OnReceive = new TransBufferReceivedHandler(Received_TransBuffer);//透明通道传输回调
SystemSetting.TransFile_OnReceive = new TransFileReceivedHandler(Received_TransFile);//文件传输回调
SystemSetting.TransRecord_OnReceive = new TransRecordHandler(File_CallBack);//拍照录像回调函数
//初始化
SystemSetting.Init(this.Handle);
//设置内核参数  设置保存路径
int ret = 0;
ret = AnyChatCoreSDK.SetSDKOption(AnyChatCoreSDK.BRAC_SO_RECORD_TMPDIR, Application.StartupPath, Application.StartupPath.Length);
ret = AnyChatCoreSDK.SetSDKOption(AnyChatCoreSDK.BRAC_SO_SNAPSHOT_TMPDIR, Application.StartupPath, Application.StartupPath.Length);

  3.连接AnyChat服务器。使用AnyChat功能必须先连接并登录AnyChat服务器。执行连接操作后会触发windows消息回调 AnyChatCoreSDK.WM_GV_CONNECT

//登录AnyChat (IP从配置文件中获取)
string IP = XmlHelper.GetXmlAttribute(PublicMembers.Config, "//Configuration//IP", "value").Value;
//连接服务器(在WndProc中的获取方法回调结果。参数:AnyChatCoreSDK.WM_GV_CONNECT)
ret = AnyChatCoreSDK.Connect(IP, 8906);

  4.登录AnyChat服务器。执行连接操作后会触发windows消息回调 AnyChatCoreSDK.WM_GV_LOGINSYSTEM

//登录服务器(在WndProc中的获取方法回调结果。参数:AnyChatCoreSDK.WM_GV_LOGINSYSTEM)
int ret = AnyChatCoreSDK.Login(PublicMembers.g_Name, "", 0);

  5.服务器登录成功后进入指定房间,只有在同一个房间内的用户才可以进行视频音频交互。

//进入房间(在WndProc中的获取方法回调结果。参数:AnyChatCoreSDK.WM_GV_ENTERROOM)
            int ret = AnyChatCoreSDK.EnterRoom(m_RoomID, "", 0);

  6.打开,关闭音频视频

//绑定本机视频窗口 -1代表自己,通过指定userId来绑定视频窗口
int ret = AnyChatCoreSDK.SetVideoPos(-1, picLocalVideo.Handle, 0, 0, picLocalVideo.Width, picLocalVideo.Height);
//开启本地视频 -1代表自己
ret = AnyChatCoreSDK.UserCameraControl(-1, true);
//开启本地声音 -1代表自己
ret = AnyChatCoreSDK.UserSpeakControl(-1, true);

  7.发送文件,文字,录制等操作

//发送文字
int ret = AnyChatCoreSDK.SendTextMessage(-1, true, text, length);
//发送文件  filepath:文件路径
int taskId = 0;
int flag = AnyChatCoreSDK.TransFile(userId, filepath, 1, 0, 0, ref taskId);
//开启声音
int ret = AnyChatCoreSDK.UserSpeakControl(userId, true);
//关闭声音
int ret = AnyChatCoreSDK.UserSpeakControl(userId, false);
//开启视频
int ret = AnyChatCoreSDK.UserCameraControl(userId, true);
//关闭视频
int ret = AnyChatCoreSDK.UserCameraControl(userId, false);
//开始录像
ulong flag = 0;//0为录制视频 1为录制音频
int ret = AnyChatCoreSDK.StreamRecordCtrl(userId, true, flag, 0);
//停止录像
ulong flag = 0;//0为录制视频 1为录制音频
int ret = AnyChatCoreSDK.StreamRecordCtrl(userId, false, flag, 0);
//拍照
AnyChatCoreSDK.SnapShot(userId, 1, 1);

  最后源码奉上:http://pan.baidu.com/s/1qXxB1AO

  

  详细代码可以上AnyChat官网获取,包含SDK,开发文档,源码程序等

  官网地址:http://www.anychat.cn/

时间: 2024-10-16 03:39:05

基于AnyChat的视频会议程序的相关文章

基于DevExpress的Winform程序安装包的制作

在我们做系统开发的时候,都会面临一个安装包制作的问题,如何把我们做好的系统,通过安装包工具整合成一个安装包给客户进行安装.安装包的优势就是一步步安装就可以了,不用复制一大堆文件给客户,还怕缺少那个文件导致系统运行出错.本文主要介绍基于DevExpress的Winform程序安装包的制作内容,包括VS2010和VS2013/V2105的不同处理方式. 我们知道,VS2010是最后一个可以使用微软安装包制作工具的VS版本了,所以后面VS2012/2013/2015版本都需要使用第三方安装包制作工具,

ok6410[002] ubuntu1604系统下搭配ckermit和dnw基于RAM的裸机程序调试环境

ubuntu1604系统下搭配ckermit和dnw基于RAM的裸机程序调试环境 系统:  ubuntu16.04 裸板: 飞凌公司OK6410开发板 目标:搭建基于ubuntu1604系统和基于RAM的裸机程序开发环境 1.安装配置ckermit 在ubuntu1604下一般做裸板开发时都是使用ckermit作为远程通讯终端,下面我们就开始讲解下其安装与配置. 1.1.安装ckermit 在ubuntu系统下安装ckermit,使用 sudo  apt-get  install  ckermi

Win10 IoT C#开发 2 - 创建基于XAML的UI程序 及 应用的三种部署方法

原文:Win10 IoT C#开发 2 - 创建基于XAML的UI程序 及 应用的三种部署方法 Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. 上一章我们讲了Raspberry安装Win10 IoT系统及搭建Visual Studio 2015开发环境的方法(http://www.cnblogs.com/cloudtech/p/5562120.html)

最简单的基于FFMPEG的Helloworld程序

===================================================== 最简单的基于FFmpeg的视频播放器系列文章列表: 100行代码实现最简单的基于FFMPEG+SDL的视频播放器(SDL1.x) 最简单的基于FFMPEG+SDL的视频播放器 ver2 (採用SDL2.0) 最简单的基于FFmpeg的解码器-纯净版(不包括libavformat) 最简单的基于FFMPEG+SDL的视频播放器:拆分-解码器和播放器 最简单的基于FFMPEG的Hellowor

学习基于OpenGL的CAD程序的开发计划(一)

本人目前从事的工作面对的客户中很多来自高端制造业,他们对CAD/CAE/CAM软件的应用比较多.公司现有的软件产品主要是用于渲染展示及交互,但面对诸如CAD方面的应用(比如基于约束的装配.制造工艺的流程演示等),功能比较薄弱.本人计划在工作之余开始研究一下基于OpenGL的CAD程序开发的基础功能实现.由于目前工作直接使用的商业游戏引擎进行开发,对底层的OpenGL还不是特别熟悉,从产品发展的长远来看,结合CAD的功能应该是大势所趋,而目前利用一些三维CAD二次开发来实现虽然可以临时解决一些功能

设计一个基于GUI的扑克程序

在本课程教材扑克牌代码的基础上,设计一个基于GUI的扑克程序 a) 可以显示 52 张扑克牌,包括洗牌,发牌在内(2) b) 可以点击显示任何一张牌(1) c) 扑克翻面且突出显示(1) d) 扑克分组,例如 4 组,2 组.可以给每个组一定数量的牌(1) e) 按照一定的排序规则对分组牌进行排序(1) f) 发牌过程用动画显示(选做)(2)

【翻译】首个基于NHibernate的应用程序

首个基于NHibernate的应用程序  Your first NHibernate based application 原文地址:http://www.nhforge.org/wikis/howtonh/your-first-nhibernate-based-application.aspx 本文涉及到的DEMO下载   定义领域模型 让我们开始通过定义一个非常简单的领域模型.目前它是由一个称为产品的实体.该产品具有 3 个属性:名称. 类别和中止. 添加一个文件夹 Domain 到您的解决方

Robocopy是微软Windows Server 2003资源工具包中众多多用途的实用程序之一(它是基于强大的拷贝程序

Robocopy是微软Windows Server 2003资源工具包中众多多用途的实用程序之一(它是基于强大的拷贝程序).没错,Robocopy的功能是拷贝文件,你也许会觉得无聊并且要翻阅下一篇文章了,且慢,让我们给这个有趣的小程序一个机会吧.Robocopy能够处理包括巨大的数据字节块在内的复制操作,并且它可以让你确定拥有像Copy和Xcopy等其它拷贝程序那样的技术规范.解释一下,例如你可以用Robocopy去拷贝某一个完整的目录树,而不仅仅是树下的三层.并且,你还可以指定Robocopy

如何在VS2010的VC++ 基于对话框的MFC程序中添加菜单

方法1:亲测 成功  转载自https://social.msdn.microsoft.com/Forums/vstudio/zh-CN/48338f6b-e5d9-4c0c-8b17-05ca3ef1f761/vs2010dialog 你可以创建菜单作为一种资源,然后将它附加到对话框.打开dialog“属性”对话框,你可以看到一个Menu属性,最终我们将在这里指定一个我们自己创建的菜单ID. 具体步骤如下: •在资源视图中右键单击工程名,插入一个新的菜单.这个菜单会有一个ID(例如:IDR_M