国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php框架 > 框架设计 > 即时通讯 音视频录制技术

即时通讯 音视频录制技术

来源:程序员人生   发布时间:2015-01-12 08:59:05 阅读次数:3341次

音视频录制是音视频解决方案中最重要的功能特性之1,特别是1些行业利用中音视频录制是最基本的功能需求,AnyChat作为业界1流的跨平台音视频解决方案,在音视频录制方面也提供了非常完善的整体解决方案,概括起来有以下特点:

1.   可针对单个用户的音频、视频进行录制;

2.   可针对通话双方的音频、视频合成录制,支持画中画、并列模式等多种合成方式

3.   可以自定义录制参数,包括录制码率、视频辩白率等;

4.   录制的视频格式可自定义,支持MP4(默许)、WMVFLVMP3等;

5.   可以在客户端录制,也能够在中心服务器录制

6.   可以在客户端进行音视频合成,中心服务器对合成音视频流录制,录相服务器支持高并发;

7.   客户端录制支持的平台包括:WindowsWebAndroidiOSLinux

8.   服务器录制支持的平台包括:WindowsLinuxx86x64);

9.   提供客户端录制API服务器录制API接口,与上层业务无缝集成;


1、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=⑴);

3.   

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

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

复制代码

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


   开始录制和停止录制均调用同1个API接口(如客户端为:BRAC_StreamRecordCtrlEx),通过第2个参数(bStartRecord)来控制,当bStartRecord=TRUE1)时,表示开始录制,当bStartRecord=FALSE0)时,表示停止录制。


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


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


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


3、录制功能示例
下面以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!");

复制代码

4、其它
1、客户端可以通过APIBRAC_SetSDKOption(BRAC_SO_RECORD_TMPDIR, path)来设置录相文件保存路径;

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

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生