音视频录制是音视频解决方案中最重要的功能特性之一,特别是一些行业应用中音视频录制是最基本的功能需求,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)(DWORDdwUserId, 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, DWORDdwRecordServerId=-1);

// 服务器录像回调函数定义(扩展)

typedef void (CALLBACK *BRAS_OnServerRecordEx_CallBack)(DWORD dwUserId, LPCTSTR lpFileName, DWORDdwElapse, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr, DWORDdwRecordServerId, 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内核会结束录制任务,同时触发上层应用的回调事件(如客户端为:BRACRecordSnapShotExCallBack),在回调事件中,将录制文件名(含路径)、录制时长、用户自定义参数等信息返回给上层应用。

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:BRACSetSDKOption(BRACSORECORDTMPDIR, path)来设置录像文件保存路径;

2.     客户端可以通过API:BRACSetSDKOption(BRACSORECORDVIDEOBR, 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 forWindows SDK包(要求V4.8及以上版本),解压缩,部署核心服务器和业务服务器(参考:AnyChat独立部署Windows视频服务器),让客户端能与核心服务器,以及核心服务器与业务服务器之间能正常的工作。

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

[2013-07-03 18:28:28(479)]        ---------------------InitService--------------------------

[2013-07-03 18:28:28(488)]        Current File Version[4, 8, 0, 0],Buildtime: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”是主程序,注意,该主程序不能直接运行,可以通过如下两种方式来运行:

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,出现如下图所示的界面:

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

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

[2013-07-03 19:58:49(865)]        AnyChat Record Server Init,V1.0, BuildTime: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 theanychatcoreserver!

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

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

六、注意事项:

1.     由于早期的授权证书不支持中心录像服务器,若希望使用该功能(为可选模块),请与我们的商务人员联系升级授权证书;

2.     在中心服务器录像过程中,客户端网络异常掉线将会中断录像,并触发业务服务器的录像回调函数;

3.     停止录像、用户注销等操作与业务服务器触发录像回调函数的时机是异步的过程,在业务服务器编程时需要考虑这种时间差的因素,可能存在先触发用户注销的回调,然后再触发录像完成的回调;

关于回调事件路径类型:

Ÿ  相对路径,形如:2014-08-31/12-08-31-074AnyChat453.mp4

Ÿ  绝对路径,形如:d:\record\2014-08-31\12-08-31-074AnyChat453.mp4

Ÿ  URL路径,形如:http://www.anychat.cn/record/201... 074AnyChat453.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-10name34.mp4,您在客户端就可以直接通过该完整的URL地址来访问录像文件。

| 参考:有关中心录像服务器配置项【RecordRootURL】的说明

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.     在“服务”中启动“AnyChatPlatform 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包,如下图所示:

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视频服务器

PS:补充 → 关于AnyChat录像解决方案的几张原理图

对AnyChat录屏解决方案的调研报告相关推荐

  1. 债务回收解决方案行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)

    债务回收解决方案市场的企业竞争态势 该报告涉及的主要国际市场参与者有SPN.Adtec Software.JST.Indigo Cloud.Pamar Systems.CollectMORE.Kuhl ...

  2. 云端点保护解决方案行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)

    云端点保护解决方案市场的企业竞争态势 该报告涉及的主要国际市场参与者有Symantec.Cisco Systems.Panda Security.Sophos.Trend Micro.ESET.Kas ...

  3. 网页录屏(帧记录)调研总结

    帧记录关键点 首先,每一次会话都有一个唯一的session ID,这是串联起所有行为的纽带. 其次,用户行为又分成两个部分,其一是用户的操作,比如鼠标滑动,点击,页面滚动等,其二是页面的变化.这两者我 ...

  4. 安卓APP限制截屏录屏解决方案

    经过两天的研究, 思路:投屏到电脑,然后windows窗体截图. 具体思路是:可以使用投屏软件,把安卓屏幕投到电脑上,然后根据句柄,截取windows窗口截图 于是,我根据思路,,研究出来了使用pyt ...

  5. 最新调研-电子邮件归档解决方案行业研究分析报告

    辰宇信息咨询市场调研公司最近发布-<2022-2028全球与中国电子邮件归档解决方案市场调研报告> 内容摘要 本文同时着重分析电子邮件归档解决方案行业竞争格局,包括全球市场主要企业中国本土 ...

  6. 视频加密中令人头疼的录屏行为怎么防范?

    在视频加密行业中,视频录制是比较令人头疼的,对于视频所有者来说如何做到防止用户录屏而传播视频课程文件?所谓知己知彼方能百战百胜,要想做到防录屏,首先我们来了解下常见的录屏操作方法有哪些. 一.常见的录 ...

  7. iOS中录屏库ReplayKit的详尽使用总结

    一.ReplayKit库的介绍: 1.1简介 在使用应用或者游戏的过程中录制回放,一直是iOS开发者绞尽脑汁想要实现的功能.但由于移动设备性能的限制,这一功能往往较难实现或者效果难以满足用户的需要.终 ...

  8. python录屏工具下载_Python移动端录屏库

    Python移动端录屏库 背景 日常移动端专项测试和自动化测试通常有一些场景如:Ui自动化的操作捕获.App启动耗时.视频启播耗时等,通常都有需要边操作边录屏,而对于启动耗时测试通常还需要质量较高且帧 ...

  9. 报告视频录制:腾讯会议录屏+人像画中画特效

    想录制PPT报告.软件操作,有什么免费的软件吗?腾讯会议即可,不仅完全免费,无时间限制,甚至支持人像实时扣图悬浮于桌面上(人像画中画). 视频1. 录制全过程操作 https://v.qq.com/x ...

最新文章

  1. python 列表赋值操作可能存在的潜在问题
  2. 您拒绝了位置共享服务器,共享服务器拒绝访问
  3. MySQL分组函数的使用特点
  4. linux进程配置异常中断自动重启_Linux系统配置及服务管理 (四)进程管理
  5. ML.NET 1.4 发布,跨平台机器学习框架
  6. 河南科技大学计算机专业专升本,河南科技大学成人高考计算机应用技术专业的课程有哪些...
  7. 射极跟随器负载加重解析
  8. html点击按钮展开文字,JS 展开/收起按钮显示隐藏文字示例
  9. 前端页面截图,指定区域截图
  10. Markdown文件中图片自动转云图片和自动生成标题序号
  11. 9、(九)外汇交易技术术语表
  12. 高通625系列-MSM8953 (Cortex-A53架构)
  13. [Vue]缓存路由组件 activated()与deactivated()
  14. 数字化转型道阻且长?免费低代码平台也能“神助攻”
  15. 开关电源MOS管如何选择,参数是核心
  16. 关于汇编语言中的转移指令原理——offset
  17. 在eclipse中使用subclipse
  18. 蓝鲸智云-腾讯给广大运维工作者的福利
  19. 硬件设计——外围电路(复位电路)
  20. Fama-Macbeth回归图形化:EAP.fama_macbeth.Fama_macbeth_regress.plot()

热门文章

  1. 20大5G技术【5G通信技术,转载自微信公众号网优雇佣军】
  2. 微信小程序通过低功耗蓝牙设备进行定位及测距(二)
  3. 数据库优化的四大方法
  4. 精品国创《少年歌行》数字藏品开售,邀你共铸少年武侠江湖梦
  5. 国内外智慧公路建设统观
  6. 【图解】联想IdeaPad V450拆机教程,光驱位安装固态硬盘图解
  7. 刘智聪-将Web3进行到底
  8. 胡晓明:阿里云助力企业应对互联网挑战
  9. MyBatis Plus实现动态字段排序
  10. 代理IP,可以帮助企业开展哪些业务?