音视频录制是音视频解决方案中最重要的功能特性之一,特别是一些行业应用中音视频录制是最基本的功能需求,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接口,与上层业务无缝集成;



一、API接口定义

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

1.  // 用户音、视频录制(扩展)

2.  BRAC_API DWORD BRAC_StreamRecordCtrlEx(DWORD dwUserId,BOOL bStartRecord, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr);

3.   

4.  // 录像、快照任务完成扩展回调函数定义

5.  typedef void (CALLBACK *BRAC_RecordSnapShotEx_CallBack)(DWORD dwUserId, LPCTSTR lpFileName, DWORDdwElapse, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr, LPVOID lpUserValue);

复制代码

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

1.  // 中心端录像控制(扩展)

2.  BRAS_API DWORD BRAS_StreamRecordCtrlEx(DWORD dwUserId,BOOL bStartRecord, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr=NULL, DWORDdwRecordServerId=-1);

3.   

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

5.  typedef void (CALLBACK *BRAS_OnServerRecordEx_CallBack)(DWORD dwUserId, LPCTSTR lpFileName, DWORDdwElapse, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr, DWORDdwRecordServerId, LPVOID lpUserValue);

复制代码



二、录制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接口传入,在录制完成回调事件中返回给上层应用,如可以通过字符串类型自定义参数来传输一个上层应用的业务流水号,则可以实现在回调事件中将录制的文件名与业务流水号进行关联,保存在数据库中等功能。



三、录制功能示例

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



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

1.  BRAC_SetSDKOption(BRAC_SO_RECORD_FILETYPE, 0);   // 录制为MP4格式

2.  var dwFlags = ANYCHAT_RECORD_FLAGS_VIDEO +ANYCHAT_RECORD_FLAGS_AUDIO;

3.  BRAC_StreamRecordCtrlEx(userid, 1,  dwFlags, 0,"Hello, world!");

复制代码

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

1.  BRAC_SetSDKOption(BRAC_SO_RECORD_FILETYPE, 3);   // 录制为MP3格式

2.  var dwFlags = ANYCHAT_RECORD_FLAGS_AUDIO;

3.  BRAC_StreamRecordCtrlEx(userid, 1,  dwFlags, 0,"Hello, world!");

复制代码

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

1.  BRAC_SetSDKOption(BRAC_SO_RECORD_FILETYPE, 0);   // 录制为MP4格式

2.  var dwFlags = ANYCHAT_RECORD_FLAGS_VIDEO +ANYCHAT_RECORD_FLAGS_AUDIO + ANYCHAT_RECORD_FLAGS_MIXVIDEO +ANYCHAT_RECORD_FLAGS_MIXAUDIO;

3.  BRAC_StreamRecordCtrlEx(userid, 1,  dwFlags, 0,"Hello, world!");

复制代码



四、其它

1、客户端可以通过API:BRAC_SetSDKOption(BRAC_SO_RECORD_TMPDIR, path)来设置录像文件保存路径;

2、有关录像文件改名:录制完成之后,AnyChat将触发上层应用的录制完成回调事件,在回调事件中返回录制文件名(含路径),上层应用可以在回调事件中调用操作系统提供的文件改名函数(如Windows平台为:MoveFile函数)对文件进行改名操作,AnyChat内核本身没有提供对录制文件名进行修改的接口;