设为首页收藏本站

AnyChat技术支持论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 28452|回复: 3
打印 上一主题 下一主题

2014-11-30 AnyChat音视频录制整体解决方案

[复制链接]

249

主题

2967

帖子

9108

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9108
跳转到指定楼层
楼主
发表于 2014-11-30 22:27:45 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    音视频录制是音视频解决方案中最重要的功能特性之一,特别是一些行业应用中音视频录制是最基本的功能需求,AnyChat作为业界一流的跨平台音视频解决方案,在音视频录制方面也提供了非常完善的整体解决方案,概括起来有如下特点:

一、API接口定义
    AnyChat在客户端提供的录制API接口与回调事件为:
  1. // 用户音、视频录制(扩展)
  2. BRAC_API DWORD BRAC_StreamRecordCtrlEx(DWORD dwUserId, BOOL bStartRecord, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr);

  3. // 录像、快照任务完成扩展回调函数定义
  4. typedef void (CALLBACK * BRAC_RecordSnapShotEx_CallBack)(DWORD dwUserId, LPCTSTR lpFileName, DWORD dwElapse, 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, DWORD dwRecordServerId=-1);

  3. // 服务器录像回调函数定义(扩展)
  4. typedef void (CALLBACK * BRAS_OnServerRecordEx_CallBack)(DWORD dwUserId, LPCTSTR lpFileName, DWORD dwElapse, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr, DWORD dwRecordServerId, 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、客户端可以通过API:BRAC_SetSDKOption(BRAC_SO_RECORD_VIDEOBR, bitrate)来设置录制视频的质量,调节录制视频的清晰度;
3、有关录像文件改名,有两种方式来实现:
        方式一:录制完成之后,AnyChat将触发上层应用的录制完成回调事件,在回调事件中返回录制文件名(含路径),上层应用可以在回调事件中调用操作系统提供的文件改名函数(如Windows平台为:MoveFile函数)对文件进行改名操作;
        方式二:利用AnyChat自定义录像文件名的功能,在开始录制时,通过lpUserStr参数传入Json格式的录像文件名;
4、有关录制完成回调事件中“lpUserStr”的值,如果结束录制时,调用API:BRAC_StreamRecordCtrlEx有传入lpUserStr的值,则回调以结束录制时传入值为准,否则以开始录制时传入值为准。


参考:
1、有关中心录像服务器部署可参考:Windows平台中心录像服务器部署Linux平台中心录像服务器部署
2、有关中心录像服务器配置项【RecordRootURL】的说明
3、有关中心录像服务器配置项【RecordCacheDir】的说明







分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3
回复

使用道具 举报

249

主题

2967

帖子

9108

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9108
沙发
 楼主| 发表于 2014-12-4 15:10:33 | 只看该作者

AnyChat录像解决方案之客户端合成录像原理图

在客户端进行视频合成,录制文件保存在客户端本地
  1. var dwFlags = ANYCHAT_RECORD_FLAGS_VIDEO + ANYCHAT_RECORD_FLAGS_AUDIO + ANYCHAT_RECORD_FLAGS_MIXVIDEO + ANYCHAT_RECORD_FLAGS_MIXAUDIO;
复制代码

AnyChat录像解决方案之客户端合成录像原理图.jpg (212.75 KB, 下载次数: 5055)

AnyChat录像解决方案之客户端合成录像原理图.jpg
回复 支持 反对

使用道具 举报

249

主题

2967

帖子

9108

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9108
板凳
 楼主| 发表于 2014-12-4 15:31:41 | 只看该作者

AnyChat录像解决方案之服务器合成录像原理图

在录像服务器上进行视频合成(会占用服务器运算资源),录制文件保存在服务器
  1. var dwFlags = ANYCHAT_RECORD_FLAGS_VIDEO + ANYCHAT_RECORD_FLAGS_AUDIO + ANYCHAT_RECORD_FLAGS_MIXVIDEO + ANYCHAT_RECORD_FLAGS_MIXAUDIO + ANYCHAT_RECORD_FLAGS_SERVER;
复制代码

AnyChat录像解决方案之服务器合成录像原理图.jpg (238.17 KB, 下载次数: 4833)

AnyChat录像解决方案之服务器合成录像原理图.jpg
回复 支持 反对

使用道具 举报

249

主题

2967

帖子

9108

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9108
地板
 楼主| 发表于 2014-12-4 15:33:27 | 只看该作者
在客户端进行视频合成(不占用服务器运算资源),客户端上传合成后的音视频流,录像服务器对视频流进行录制,文件保存在服务器。
  1. var dwFlags = ANYCHAT_RECORD_FLAGS_VIDEO + ANYCHAT_RECORD_FLAGS_AUDIO + ANYCHAT_RECORD_FLAGS_MIXVIDEO + ANYCHAT_RECORD_FLAGS_MIXAUDIO + ANYCHAT_RECORD_FLAGS_SERVER + ANYCHAT_RECORD_FLAGS_STREAM;
复制代码

AnyChat录像解决方案之合成流录像原理图.jpg (263.93 KB, 下载次数: 4877)

AnyChat录像解决方案之合成流录像原理图.jpg
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|AnyChat ( 粤ICP备13022410号-1 )  

GMT+8, 2024-11-22 13:59 , Processed in 0.127018 second(s), 26 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表