对AnyChat录屏解决方案的调研报告

音视频录制是音视频解决方案中最重要的功能特性之一,特别是一些行业应用中音视频录制是最基本的功能需求,AnyChat作为业界一流的跨平台音视频解决方案,在音视频录制方面也提供了非常完善的整体解决方案。

1. AnyChat音视频录制整体解决方案

特点:

  1. 可针对单个用户的音频、视频进行录制;
  2. 可针对通话双方的音频、视频合成录制,支持画中画、并列模式等多种合成方式;
  3. 可以自定义录制参数,包括录制码率、视频分辩率等;
  4. 录制的视频格式可自定义,支持MP4(默认)、WMV、FLV、MP3等;
  5. 可以在客户端录制,也可以在中心服务器录制;
  6. 可以在客户端进行音视频合成,中心服务器对合成音视频流录制,录像服务器支持高并发;
  7. 客户端录制支持的平台包括:Windows、Web、Android、iOS、Linux;
  8. 服务器录制支持的平台包括:Windows、Linux(x86、x64);
  9. 提供客户端录制API、服务器录制API接口,与上层业务无缝集成;

1.1 API接口定义

AnyChat在客户端提供的录制API接口与回调事件为:

// 用户音、视频录制(扩展)
BRAC_API DWORD BRAC_StreamRecordCtrlEx(DWORD dwUserId, BOOL bStartRecord, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr);
// 录像、快照任务完成扩展回调函数定义
typedef void (CALLBACK * BRAC_RecordSnapShotEx_CallBack)(DWORD dwUserId, LPCTSTR lpFileName, DWORD dwElapse, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr, LPVOID lpUserValue);

AnyChat在服务器端提供的录制API接口与回调事件为:

// 中心端录像控制(扩展)
BRAS_API DWORD BRAS_StreamRecordCtrlEx(DWORD dwUserId, BOOL bStartRecord, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr=NULL, DWORD dwRecordServerId=-1); 
// 服务器录像回调函数定义(扩展)
typedef void (CALLBACK * BRAS_OnServerRecordEx_CallBack)(DWORD dwUserId, LPCTSTR lpFileName, DWORD dwElapse, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr, DWORD dwRecordServerId, LPVOID lpUserValue);

1.2 录制API调用

API第一个参数表示录制对象,指录制某一个用户的音视频,对于合成录制,只需要通过第三个参数(dwFlags)加入特定的标志即可实现。

开始录制以及停止录制均调用同一个API接口(如客户端为:BRAC_StreamRecordCtrlEx),通过第二个参数(bStartRecord)来控制,当bStartRecord=TRUE(1)时,表示开始录制,当bStartRecord=FALSE(0)时,表示停止录制。

当调用API开始录制时,相当于下达了一个录制任务,AnyChat内核将开始录制,可以在客户端调用API(BRAC_QueryUserState)来查询录制状态;通过第三个参数(dwFlags)可控制录制行为:是在客户端录制,还是在服务器录制;是录制音频,还是音视频一同录制;是录制单个用户,还是通话双方合成录制等,具体应用可参考后续的“录制功能示例”部分。

当调用API停止录制时,AnyChat内核会结束录制任务,同时触发上层应用的回调事件(如客户端为:BRAC_RecordSnapShotEx_CallBack),在回调事件中,将录制文件名(含路径)、录制时长、用户自定义参数等信息返回给上层应用。

AnyChat内核提供了两个自定义参数,一个是整形(dwParam),一个是字符串类型(lpUserStr),在开始录制(或结束录制)时通过API接口传入,如果开始录制、结束录制均为传入,则以结束录制时的值为准,在录制完成回调事件中返回给上层应用,如可以通过字符串类型自定义参数来传输一个上层应用的业务流水号,则可以实现在回调事件中将录制的文件名与业务流水号进行关联,保存在数据库中等功能。

1.3 录制功能示例

下面以JavaScript脚本为例,针对常用的录制功能给出示例代码:

1.客户端对单个用户的音频、视频进行录制,录制为MP4格式:

BRAC_SetSDKOption(BRAC_SO_RECORD_FILETYPE, 0);// 录制为MP4格式
var dwFlags = ANYCHAT_RECORD_FLAGS_VIDEO + ANYCHAT_RECORD_FLAGS_AUDIO;
BRAC_StreamRecordCtrlEx(userid, 1,  dwFlags, 0, "Hello, world!");

2.客户端对单个用户的音频进行录制,录制为MP3格式:

BRAC_SetSDKOption(BRAC_SO_RECORD_FILETYPE, 3);// 录制为MP3格式
var dwFlags = ANYCHAT_RECORD_FLAGS_AUDIO;
BRAC_StreamRecordCtrlEx(userid, 1,  dwFlags, 0, "Hello, world!");

3.客户端对通话双方的音频、视频进行录制,录制为MP4格式,画中画模式:

BRAC_SetSDKOption(BRAC_SO_RECORD_FILETYPE, 0);// 录制为MP4格式
var dwFlags = ANYCHAT_RECORD_FLAGS_VIDEO + ANYCHAT_RECORD_FLAGS_AUDIO + ANYCHAT_RECORD_FLAGS_MIXVIDEO + ANYCHAT_RECORD_FLAGS_MIXAUDIO;
BRAC_StreamRecordCtrlEx(userid, 1,  dwFlags, 0, "Hello, world!");

1.4 其它说明

  1. 客户端可以通过API:BRAC_SetSDKOption(BRAC_SO_RECORD_TMPDIR, path)来设置录像文件保存路径;
  2. 客户端可以通过API:BRAC_SetSDKOption(BRAC_SO_RECORD_VIDEOBR, bitrate)来设置录制视频的质量,调节录制视频的清晰度;
  3. 有关录像文件改名:录制完成之后,AnyChat将触发上层应用的录制完成回调事件,在回调事件中返回录制文件名(含路径),上层应用可以在回调事件中调用操作系统提供的文件改名函数(如Windows平台为:MoveFile函数)对文件进行改名操作,AnyChat内核本身没有提供对录制文件名进行修改的接口;
  4. 有关录制完成回调事件中“lpUserStr”的值,如果结束录制时,调用API:BRAC_StreamRecordCtrlEx有传入lpUserStr的值,则回调以结束录制时传入值为准,否则以开始录制时传入值为准。

| 参考:AnyChat音视频录制整体解决方案

2. AnyChat独立部署Windows中心录像服务器

AnyChat for Windows SDK自V4.8版本开始支持中心服务器录像(打开下载页面,位于SDK包bin\recordserver目录下,AnyChat for Android SDK所需要的与这个一样),之前的版本只能在客户端录像,新版本支持在服务器端录像,集中保存,录像任务可由客户端发起,也可由业务服务器发起,录像完成之后,将录像文件名反馈给业务服务器,业务服务器可保存到数据库中便于集中维护。录像保存路径可设置。

下面一步一步介绍如何部署中心录像服务器,以及让中心录像服务器正常工作的注意事项:

一、下载AnyChat for Windows SDK包(要求V4.8及以上版本),解压缩,部署核心服务器和业务服务器(参考:AnyChat使用攻略之独立部署Windows视频服务器),让客户端能与核心服务器,以及核心服务器与业务服务器之间能正常的工作。

启动核心服务器之后,查看核心服务器的日志文件(AnyChatCoreServer.log),显示内容如下:

[2013-07-03 18:28:28(479)]        ---------------------Init Service--------------------------
[2013-07-03 18:28:28(488)]        Current File Version[4, 8, 0, 0],Build time:2013-07-03 13:52:21
[2013-07-03 18:28:28(586)]        Start TCP Server Successed(port=8906)!
[2013-07-03 18:28:28(604)]        Start UDP Server Successed(port=8907)!
[2013-07-03 18:28:28(742)]        Authorized certification success!

二、进入SDK包的bin\recordserver目录,里面包含如下图所示的文件:

对AnyChat录屏解决方案的调研报告_第1张图片

其中“AnyChatRecordServer.exe”是主程序,注意,该主程序不能直接运行,可以通过如下两种方式来运行:

  1. 运行run.bat来启动中心录像服务器;
  2. 运行install.bat来安装为Windows服务,在“服务”中启动;

三、中心录像服务器参数配置。打开AnyChatRecordServer.ini配置文件,内容如下:

[Base Settings]
DebugMode=1
ServerIpAddr=127.0.0.1
ServerUdpPort=8907
RecordRootDir=record
RecordRootURL=http://www.anychat.cn/record/
ServerCallBackPathType=1
ClientCallBackPathType=2

配置项详细说明如下:

  • 【DebugMode】 配置为0时,不在日志中输出相关的调试信息;为1时,可输出更多的调试信息,如录像开始,录像结束,录像文件名等,便于分析故障原因;
  • 【ServerIpAddr】配置核心服务器的IP地址,录像服务器与核心服务在同一台计算机时,默认为127.0.0.1
  • 【ServerUdpPort】 配置核心服务器的UDP通信端口,默认为8907
  • 【RecordRootDir】表示录像文件保存的本地根目录,可以为相对地址,如:RecordRootDir=record,表示当前录像服务器目录下的record子目录,也可以为绝对路径,如:RecordRootDir=d:\record(注意:不要配置为:RecordRootDir=d:\record\,即路径后面不要加上“\”);
  • 【RecordRootURL】表示录像文件保存本地根目录的互联网访问地址,是一个URL地址,通过该URL地址,可以访问到中心录像服务器目录下的指定文件,通常需要在Web服务器(如Apache)中设置一个虚拟路径指向【RecordRootDir】,而【RecordRootURL】就是该虚拟路径;
  • 【ServerCallBackPathType】表示中心录像服务器完成录像之后,触发业务服务器回调事件中的路径类型:0 相对路径、1 绝对路径、2 URL路径;
  • 【ClientCallBackPathType】表示中心录像服务器完成录像之后,触发客户端回调事件中的路径类型:0 相对路径、1 绝对路径、2 URL路径;

四、启动中心录像服务器。运行run.bat,出现如下图所示的界面:

对AnyChat录屏解决方案的调研报告_第2张图片

同时在Windows右下角的任务栏区域显示程序图标(点击该图标将弹出菜单,可选择退出程序):

对AnyChat录屏解决方案的调研报告_第3张图片

在中心录像服务器程序目录下将生成日志文件:AnyChatRecordServer.log,内容如下所示:

[2013-07-03 19:58:49(865)]        AnyChat Record Server Init,V1.0, Build Time:Jun  9 2013 17:23:55
[2013-07-03 19:58:49(872)]        Record Root Directory: D:\anychat\AnyChatRecordServer\Record\
[2013-07-03 19:58:49(877)]        Ready to connect to the server  127.0.0.1(8907)....
[2013-07-03 19:58:49(910)]        Successfully connect to the anychatcoreserver!

若在日志中显示“Successfully connect to the anychatcoreserver!”则表示中心录像服务器与核心服务器连接成功,工作正常;否则请检查相关参数配置是否匹配,如AnyChatRecordServer.ini中的UDP端口和AnyChatCoreServer.ini中的UDP端口是否一致,另请检查程序的版本是否符合要求。

五、启动中心录像。客户端调用API:BRAC_StreamRecordCtrl(…),或是业务服务器调用API:BRAS_StreamRecordCtrl(…)可启动或停止对目标用户的录像任务,停止录像之后,若录像成功,则会在业务服务器上触发相应的回调函数调用。

六、注意事项:

  1. 由于早期的授权证书不支持中心录像服务器,若希望使用该功能(为可选模块),请与我们的商务人员联系升级授权证书;
  2. 在中心服务器录像过程中,客户端网络异常掉线将会中断录像,并触发业务服务器的录像回调函数;
  3. 停止录像、用户注销等操作与业务服务器触发录像回调函数的时机是异步的过程,在业务服务器编程时需要考虑这种时间差的因素,可能存在先触发用户注销的回调,然后再触发录像完成的回调;

关于回调事件路径类型:

  • 相对路径,形如:2014-08-31/12-08-31-074_AnyChat4_53.mp4
  • 绝对路径,形如:d:\record\2014-08-31\12-08-31-074_AnyChat4_53.mp4
  • URL路径,形如:http://www.anychat.cn/record/201 … 074_AnyChat4_53.mp4

默认配置中:

  • 【ServerCallBackPathType=1】表示业务服务器回调事件中返回绝对路径
  • 【ClientCallBackPathType=2】表示客户端回调事件中返回URL地址,便于客户端可以直接通过该URL地址访问中心录像服务器上面的文件;

| 参考:AnyChat使用攻略之独立部署Windows中心录像服务器

3. 有关中心录像服务器配置项【RecordRootURL】的说明

AnyChat支持中心服务器录像,参考:AnyChat音视频录制整体解决方案,若是录制完成之后,在客户端需要访问中心录像服务器上面的录像文件,则需要配置中心服务器的URL地址(即:RecordRootURL),使得录像完成之后在客户端收到的录像完成回调所包含的录像文件路径参数为URL地址,客户端可以直接通过该URL地址来访问录像服务器上的录像文件。

有关中心录像服务器的部署请参考:Windows平台中心录像服务器部署、Linux平台中心录像服务器部署,中心录像服务器配置文件(AnyChatRecordServer.ini)可以控制录像完成后录像路径参数是绝对路径,或是相对路径,或是URL路径,下面主要说明配置项RecordRootURL的作用:

假如您的录像保存路径为:RecordRootDir=d:\record(注意:不要配置为d:\record\,即后面不要加上“\”

而您的服务器上面安装了Apache,可以通过URL地址(如:http://192.168.1.25/,或是http://www.anychat.cn/)访问到这台服务器

那么您可以在Apache上创建一个虚拟目录(如:record)来指向路径:d:\record,则您就可以通过URL地址http://192.168.1.25/record/,或是http://www.anychat.cn/record/来访问录像文件。

若是RecordRootURL=http://www.anychat.cn/record,则实际返回的录像文件路径类似于:http://www.anychat.cn/record/2015-08-06/14-09-10_name_34.mp4,您在客户端就可以直接通过该完整的URL地址来访问录像文件。

4. 如何快速安装部署AnyChat服务器

4.1 部署核心服务器流程

核心服务器位于AnyChat for Windows SDK 包\bin\server目录下

  1. 安装服务:执行服务器程序目录下的批处理程序:install.bat(参考:147. Windows服务安装与卸载)
  2. 修改配置文件(AnyChatCoreServer.ini):如有授权证书,请将DemoMode改为0,让服务器运行于授权模式下,默认DemoMode=1,表示工作于演示模式;如有SDKFilterPlus插件,请配置好SDKFilterPlus配置项;
  3. 将对应的证书:AnyChat.cer拷贝到服务器程序所在目录;
  4. 在“服务”中启动“AnyChat Platform Service”服务;
  5. 启动服务后,可通过日志文件(AnyChatCoreServer.log)判断服务器是否启动成功,如果启动失败,则会提示相关的出错信息。

注:如果采用UKey授权,则需要先插入UKey,再启动服务,认证成功之后,UKey指示灯会开始闪烁,服务器退出,或是停止服务后,UKey指示灯会关闭;UKey授权方式需要4.1.0.1以上版本服务器程序才能支持

如需要使用双机热备模式,参考:258. AnyChat服务器双机热备解决方案

关于服务器授权方式,参考:257. AnyChat服务器授权绑定方式

4.2 部署业务服务器流程

业务服务器是指采用AnyChat Server SDK开发的服务器,专门用于处理业务流程

  1. 修改配置文件(AnyChatCoreServer.ini):

    • [Function Settings]
    • CloseFrontLink=1
    • SDKFilterPlus=IPCFilterPlus.dll
    • AutoAddRoom=1
  2. 从SDK包的bin\ServerSDK目录下拷贝“IPCFilterPlus.dll”库文件到核心服务器目录下

  3. 重启核心服务器
  4. 启动业务服务器(AnyChatServerSDK.dll必须和业务服务器在同一个目录下),业务服务器便会收到与核心服务器连接成功的消息。

| 参考:快速部署AnyChat服务器

5. AnyChat使用攻略之独立部署Windows视频服务器

1、首先下载AnyChat for Windows SDK(点击打开下载页面);

2、解压缩下载的SDK包,如下图所示:

对AnyChat录屏解决方案的调研报告_第4张图片

3、进入【bin\server】目录,用记事本打开配置文件:AnyChatCoreServer.ini

对AnyChat录屏解决方案的调研报告_第5张图片

4、修改参数配置:

a)若有授权证书,请将[Base Settings]下面的“DemoMode=1”修改为“DemoMode=0”,如下图所示:

对AnyChat录屏解决方案的调研报告_第6张图片

可直接将授权证书拷贝到核心服务器(AnyChatCoreServer.exe)所在目录下即可,若没有授权证书,则不需要修改该项配置,服务器将工作在评估模式下。

b)启用AnyChat Server SDK通信接口,将[Function Settings]下面的“SDKFilterPlus=”修改为“SDKFilterPlus=IPCFilterPlus.dll”,如下图所示:

对AnyChat录屏解决方案的调研报告_第7张图片

将修改后的配置文件保存并关闭,有关“AnyChat Server SDK”通信接口可参考FAQ:AnyChat Server SDK与SDK Filter Plus有何差异?

5、启动核心服务器。双击“run.bat”批处理文件:

对AnyChat录屏解决方案的调研报告_第8张图片

将会出现DOS窗口,如下图所示,该窗口可被关闭,不影响服务器程序在后台的运行。

同时在计算机桌面的右下角托盘区域将出现核心服务器运行图标:

对AnyChat录屏解决方案的调研报告_第9张图片

核心服务器启动之后,将会在当前目录下产生日志文件:AnyChatCoreServer.log,可用记事本打开:

对AnyChat录屏解决方案的调研报告_第10张图片

通过日志文件可判断核心服务器启动是否正常。

6、启动业务服务器;进入【bin\serversdk】目录

对AnyChat录屏解决方案的调研报告_第11张图片

运行业务服务器“AnyChatBussinessServer(C++).exe”

对AnyChat录屏解决方案的调研报告_第12张图片

业务服务器启动之后,将会显示提示信息:“与AnyChat服务器连接成功!”

7、用客户端连接服务器;运行【bin\demo】目录下的“BRAnyChatMeeting.exe”程序,在【登录】界面中点“设置”按钮,在“服务器”输入栏中输入正确的服务器IP地址,如下图所示:

对AnyChat录屏解决方案的调研报告_第13张图片

按下登陆按钮,将连接到前面部署的核心服务器,同时在业务器界面上将会显示相关的业务流程提示信息,如下图所示:

对AnyChat录屏解决方案的调研报告_第14张图片

如果按上面的流程部署,客户端通过IP地址无法连接到服务器,则可能存在的因素包括:

1、IP地址是否正确?客户端连接的IP地址是否为服务器的IP地址,如果服务器有多个IP地址(内网、外网)则可换一个IP地址再尝试;

2、服务器上是否有防火墙或是第三方的网络监控软件?可尝试关防火墙,或是第三方的网络监控软件关闭再尝试,如果确认是防火墙的因素导致的,可将核心服务器进程(AnyChatCoreServer.exe)或是端口号(注意有TCP、UDP两个端口)加入防火墙的允许名单中;

3、客户端计算机所在的网络被限制,可尝试更换一台客户端计算机再尝试;

参考:AnyChat使用攻略之独立部署Windows视频服务器

你可能感兴趣的:(音视频,AnyChat,音视频,录屏)