音视频录制是音视频解决方案中最重要的功能特性之一,特别是一些行业应用中音视频录制是最基本的功能需求,AnyChat作为业界一流的跨平台音视频解决方案,在音视频录制方面也提供了非常完善的整体解决方案。
特点:
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);
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接口传入,如果开始录制、结束录制均为传入,则以结束录制时的值为准,在录制完成回调事件中返回给上层应用,如可以通过字符串类型自定义参数来传输一个上层应用的业务流水号,则可以实现在回调事件中将录制的文件名与业务流水号进行关联,保存在数据库中等功能。
下面以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!");
| 参考:AnyChat音视频录制整体解决方案
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目录,里面包含如下图所示的文件:
其中“AnyChatRecordServer.exe”是主程序,注意,该主程序不能直接运行,可以通过如下两种方式来运行:
三、中心录像服务器参数配置。打开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
配置项详细说明如下:
四、启动中心录像服务器。运行run.bat,出现如下图所示的界面:
同时在Windows右下角的任务栏区域显示程序图标(点击该图标将弹出菜单,可选择退出程序):
在中心录像服务器程序目录下将生成日志文件: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(…)可启动或停止对目标用户的录像任务,停止录像之后,若录像成功,则会在业务服务器上触发相应的回调函数调用。
六、注意事项:
关于回调事件路径类型:
默认配置中:
| 参考:AnyChat使用攻略之独立部署Windows中心录像服务器
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地址来访问录像文件。
核心服务器位于AnyChat for Windows SDK 包\bin\server目录下
注:如果采用UKey授权,则需要先插入UKey,再启动服务,认证成功之后,UKey指示灯会开始闪烁,服务器退出,或是停止服务后,UKey指示灯会关闭;UKey授权方式需要4.1.0.1以上版本服务器程序才能支持
如需要使用双机热备模式,参考:258. AnyChat服务器双机热备解决方案
关于服务器授权方式,参考:257. AnyChat服务器授权绑定方式
业务服务器是指采用AnyChat Server SDK开发的服务器,专门用于处理业务流程
修改配置文件(AnyChatCoreServer.ini):
从SDK包的bin\ServerSDK目录下拷贝“IPCFilterPlus.dll”库文件到核心服务器目录下
| 参考:快速部署AnyChat服务器
1、首先下载AnyChat for Windows SDK(点击打开下载页面);
2、解压缩下载的SDK包,如下图所示:
3、进入【bin\server】目录,用记事本打开配置文件:AnyChatCoreServer.ini
4、修改参数配置:
a)若有授权证书,请将[Base Settings]下面的“DemoMode=1”修改为“DemoMode=0”,如下图所示:
可直接将授权证书拷贝到核心服务器(AnyChatCoreServer.exe)所在目录下即可,若没有授权证书,则不需要修改该项配置,服务器将工作在评估模式下。
b)启用AnyChat Server SDK通信接口,将[Function Settings]下面的“SDKFilterPlus=”修改为“SDKFilterPlus=IPCFilterPlus.dll”,如下图所示:
将修改后的配置文件保存并关闭,有关“AnyChat Server SDK”通信接口可参考FAQ:AnyChat Server SDK与SDK Filter Plus有何差异?
5、启动核心服务器。双击“run.bat”批处理文件:
将会出现DOS窗口,如下图所示,该窗口可被关闭,不影响服务器程序在后台的运行。
同时在计算机桌面的右下角托盘区域将出现核心服务器运行图标:
核心服务器启动之后,将会在当前目录下产生日志文件:AnyChatCoreServer.log,可用记事本打开:
通过日志文件可判断核心服务器启动是否正常。
6、启动业务服务器;进入【bin\serversdk】目录
运行业务服务器“AnyChatBussinessServer(C++).exe”
业务服务器启动之后,将会显示提示信息:“与AnyChat服务器连接成功!”
7、用客户端连接服务器;运行【bin\demo】目录下的“BRAnyChatMeeting.exe”程序,在【登录】界面中点“设置”按钮,在“服务器”输入栏中输入正确的服务器IP地址,如下图所示:
按下登陆按钮,将连接到前面部署的核心服务器,同时在业务器界面上将会显示相关的业务流程提示信息,如下图所示:
如果按上面的流程部署,客户端通过IP地址无法连接到服务器,则可能存在的因素包括:
1、IP地址是否正确?客户端连接的IP地址是否为服务器的IP地址,如果服务器有多个IP地址(内网、外网)则可换一个IP地址再尝试;
2、服务器上是否有防火墙或是第三方的网络监控软件?可尝试关防火墙,或是第三方的网络监控软件关闭再尝试,如果确认是防火墙的因素导致的,可将核心服务器进程(AnyChatCoreServer.exe)或是端口号(注意有TCP、UDP两个端口)加入防火墙的允许名单中;
3、客户端计算机所在的网络被限制,可尝试更换一台客户端计算机再尝试;
参考:AnyChat使用攻略之独立部署Windows视频服务器