即时通讯 音视频录制技术
来源:程序员人生 发布时间:2015-01-12 08:59:05 阅读次数:3460次
音视频录制是音视频解决方案中最重要的功能特性之1,特别是1些行业利用中音视频录制是最基本的功能需求,AnyChat作为业界1流的跨平台音视频解决方案,在音视频录制方面也提供了非常完善的整体解决方案,概括起来有以下特点:
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、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=TRUE(1)时,表示开始录制,当bStartRecord=FALSE(0)时,表示停止录制。
当调用API开始录制时,相当于下达了1个录制任务,AnyChat内核将开始录制,可以在客户端调用API(BRAC_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、客户端可以通过API:BRAC_SetSDKOption(BRAC_SO_RECORD_TMPDIR,
path)来设置录相文件保存路径;
2、有关录相文件改名:录制完成以后,AnyChat将触发上层利用的录制完成回调事件,在回调事件中返回录制文件名(含路径),上层利用可以在回调事件中调用操作系统提供的文件改名函数(如Windows平台为:MoveFile函数)对文件进行改名操作,AnyChat内核本身没有提供对录制文件名进行修改的接口;
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠