AnyChat实例

前言:

鉴于证券行业实施双录,本人秉承“热爱学习”的态度,就对AnyChat展开了”研究“。对于AnyChat的研究只作学习之用。

                                 
首先说一下,当前双录系统涉及的模块
            AnyChat核心服务器----bin目录下server  
            AnyChat录像服务器----bin目录下recordserver
            AnyChat业务服务器----src/server/java目录下AnyChat4SpringMVC(当前项目只展示了如何将       AnyChat Server SDK部署到Java Web容器中,没有业务逻辑,可根据自己业务需求增加业务逻辑),
             当然,学习之初可以不自己开发AnyChat业务服务器,直接使用AnyChat里封装的业务服务器    (bin/serversdk目录下的AnyChatBussinessServer(C++).exe,直接打开)进行测试。
            AnyChat客户服务器----AnyChatCoreSDK_Web_V6.3 SDK包中src目录下AnyChatWebDemo
            
解压SDK包后,建议首先阅读包中所有readme.txt,可以宏观了解AnyChat的结构
           

1、下载AnyChat SDK并安装


打开AnyChat官网 http://sdk.anychat.cn/html/download.html 下载AnyChat for Windows SDK和AnyChat for Web SDK。

解压下载的SDK包




(1)、启动AnyChat核心服务器。进入【bin/server】目录,点击run.bat,关于AnyChatCoreServer.ini是核心服务器的配置文件,后期业务需要可对其进行修改。

(2)、启动业务服务器;进入【bin\serversdk】目录,运行业务服务器“AnyChatBussinessServer(C++).exe”

(3)、启动录像服务器;进入【bin/recordserver】目录,点击run.bat,关于anychatrecordserver.ini是录像服务器的配置文件。如有需要可修改。

(4)、打开AnyChat for Web SDK解压包中 src\AnyChatWebDemo目录,使用IE浏览器打开index.html,根据提示安装插件。


图中标记位置填写本机IP地址。启动核心服务器时未对配置文件做修改的情况下,默认运行在评估模式下,登录帐号可以任意填写。登录成功后的页面


此时使用两台有摄像头有麦克的电脑使用IE浏览器进入同一房间后就可进行视频通话了。只是官方Demo没有给出视频录制与抓拍视频的代码。稍后我会贴出相关代码。


到这一步能够实现双方进行视频通话就算可以了。

2、实现视频录制与抓拍

先上代码,然后细说当时遇到的坑。。

//开始录制视频按钮事件(坐席)
    $("#recordVideo").off().on('click', function () {
        var recordFileName = $("#orderRecordId").val() + "_" + $("#orderFlowId").val() + "_" + $("#clientIp").val();       //录像文件名称以 “订单ID_订单流水ID_客户端IP地址”格式命名,便于业务服务器对文件进行改名、移动目录处理操作
        var errorcode = BRAC_SetSDKOption(BRAC_SO_RECORD_TMPDIR, recordFileDirectory)
        AddLog("BRAC_SetSDKOption(" + BRAC_SO_RECORD_TMPDIR + "," + recordFileDirectory + ")=" + errorcode, LOG_TYPE_API);
        var dwDisableDateDir = 1;// 0-录制文件按日期分目录保存(默认) 1-录制文件不按日期分目录保存
        var errorcode = BRAC_SetSDKOption(BRAC_SO_RECORD_DISABLEDATEDIR, dwDisableDateDir)
        AddLog("BRAC_SetSDKOption(BRAC_SO_RECORD_DISABLEDATEDIR=" + BRAC_SO_RECORD_DISABLEDATEDIR + "," + dwDisableDateDir + ")=" + errorcode, LOG_TYPE_API);
        var lpUserStr = '{"filename":"' + recordFileName + '"}';
        //BRAC_RECORD_FLAGS_SERVER 触发业务服务器录像回调函数  OnAnyChatServerRecordExCallBack  BRAC_RECORD_FLAGS_LOCALCB-本地回调
        var dwFlags = ANYCHAT_RECORD_FLAGS_VIDEO + ANYCHAT_RECORD_FLAGS_AUDIO + ANYCHAT_RECORD_FLAGS_MIXAUDIO + ANYCHAT_RECORD_FLAGS_MIXVIDEO + ANYCHAT_RECORD_FLAGS_ABREAST + ANYCHAT_RECORD_FLAGS_USERFILENAME + BRAC_RECORD_FLAGS_SERVER + BRAC_RECORD_FLAGS_LOCALCB;
        var errorcode = BRAC_StreamRecordCtrlEx(mSelfUserId, 1, dwFlags, 0, lpUserStr);
        if (errorcode == 0) {
            countTimer()
        }
        AddLog("BRAC_StreamRecordCtrlEx(" + mSelfUserId + ",1," + dwFlags + ",0," + lpUserStr + ")=" + errorcode, LOG_TYPE_API);
    });

    //停止视频按钮事件
    $("#stopVideo").off().on('click', function () {
        if (confirm("确认是否停止录制,停止后无法重新开始!")) {
            var dwFlags = ANYCHAT_RECORD_FLAGS_VIDEO + ANYCHAT_RECORD_FLAGS_AUDIO + ANYCHAT_RECORD_FLAGS_MIXAUDIO + ANYCHAT_RECORD_FLAGS_MIXVIDEO + ANYCHAT_RECORD_FLAGS_ABREAST + ANYCHAT_RECORD_FLAGS_USERFILENAME + BRAC_RECORD_FLAGS_SERVER + BRAC_RECORD_FLAGS_LOCALCB;
            var errorcode = BRAC_StreamRecordCtrl(mSelfUserId, 0, dwFlags, 0);
            if (errorcode == 0) {
                resetCountTimer();
            }
            AddLog("BRAC_StreamRecordCtrl(" + mSelfUserId + ",0," + dwFlags + ",0," + ")=" + errorcode, LOG_TYPE_API);
        } else {

        }
    });

    //开始视频抓拍按钮事件(坐席)
    $("#videoSnapShot").off().on('click', function () {
        var recordFileName = $("#orderRecordId").val() + "_" + $("#orderFlowId").val() + "_" + $("#clientIp").val();       //录像文件名称以 “订单ID_订单流水ID_客户端IP地址”格式命名,便于业务服务器对文件进行改名、移动目录处理操作
        var errorcode = BRAC_SetSDKOption(BRAC_SO_SNAPSHOT_TMPDIR, imageFileDirectory);
        AddLog("BRAC_SetSDKOption(" + BRAC_SO_SNAPSHOT_TMPDIR + "," + imageFileDirectory + ")=" + errorcode, LOG_TYPE_API);
        var lpUserStr = '{"filename":"' + recordFileName + '"}';
        //var dwDisableDateDir = 1;// 0-录制文件按日期分目录保存(默认) 1-录制文件不按日期分目录保存    对抓拍不生效!!待解决
        //var errorcode = BRAC_SetSDKOption(BRAC_SO_RECORD_DISABLEDATEDIR,dwDisableDateDir)
        //AddLog("BRAC_SetSDKOption("+BRAC_SO_RECORD_DISABLEDATEDIR + "," + dwDisableDateDir + ")=" + errorcode, LOG_TYPE_API)
        var dwFlags = BRAC_RECORD_FLAGS_SNAPSHOT + ANYCHAT_RECORD_FLAGS_USERFILENAME + BRAC_RECORD_FLAGS_SERVER + BRAC_RECORD_FLAGS_LOCALCB;
        //var errorcode = BRAC_SnapShot(mSelfUserId,dwFlags,0);
        //AddLog("BRAC_SnapShot("+mSelfUserId+","+dwFlags+",0" + ")=" + errorcode, LOG_TYPE_API);
        var errorcode = BRAC_StreamRecordCtrlEx(mTargetUserId, 1, dwFlags, 0, lpUserStr);
        AddLog("BRAC_StreamRecordCtrlEx(" + mTargetUserId + ",1," + dwFlags + ",0" + lpUserStr + ")=" + errorcode, LOG_TYPE_API);
    });


3、常见问题

1、开始录制视频与结束录制视频的dwFlags要相同,不然无法正常执行结束视频录制。

ANYCHAT_RECORD_FLAGS_VIDEO:录制视频

ANYCHAT_RECORD_FLAGS_AUDIO:录制音频

ANYCHAT_RECORD_FLAGS_MIXAUDIO:录制音频时,将其它人的声音混音后录制

ANYCHAT_RECORD_FLAGS_MIXVIDEO:录制视频时,将其它人的视频迭加后录制

ANYCHAT_RECORD_FLAGS_ABREAST:录制视频时,将其它人的视频并列录制

ANYCHAT_RECORD_FLAGS_USERFILENAME:用户自定义文件名

BRAC_RECORD_FLAGS_SERVER:服务器端录制

BRAC_RECORD_FLAGS_LOCALCB:触发本地回调

当然,还有其他很多参数,anychatsdk.js中都有定义和注解

2、录像和图片默认保存位置为插件安装目录的record目录中。当时录制成功后,找不到相关视频,还以为没录制成功。0.0。

3、可以在录像服务器(recordserver)安装目录中的anychatrecordserver.ini配置文件中修改录像保存位置。recordrootdir = D:\record,我保存到了D:record文件夹中。

4、有些业务是需要修改录像文件名称的。这里提供两种思路

(1)、录制时,设置文件名称。如图

(2)、可以在业务服务器中修改录像名称,并使用moveFile修改文件路径。(录像成功后,会触发业务服务器中的相关方法。)




5、当前anychat版本虽然开发了anychat4html5相关js,但并不完善,两台电脑不能正常通信,只能看到自己的视频影像,而且暂时未封装录制抓拍方法,如果有开发htlm5版本的想法,请联系AnyChat官方。


6、评估版本下,每次视频最多维持通信15分钟,超过15分钟会被强制下线(结束视频录制,并退出房间),而且最多同时创建五个房间。建议商用的联系官方购买授权。支持正版,人人有责。

7、房间资源回收很给力啊,当所有用户退出房间,当前房间资源在几秒中就会被回收。手动赞。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值