录制
更新时间: 2024/08/23 10:24:52
本章节着重介绍实时音视频有关录制的内容。网易云信实时音视频提供服务端录制和客户端录制两种录制方式。
服务端录制需要您联系我们的商务经理,开通此功能,并且需要在管理中心中成功配置消息抄送服务,假设A和B进行点对点实时音视频通话,服务端录制下来的文件包括:A的音视频文件(.mp4)B的音视频文件(.mp4)。如果是纯音频通话,则没有相应的音视频文件,如果您开通了服务端混合录制,则还会生成一个A和B的混合音视频文件(.mp4)。假设A、B、C进行多人实时音视频通话,进入房间时,设置了服务器录制音频开关、录制视频开关、单人文件录制开关、服务端录制下来的文件包括:A的音视频文件(.mp4)、B的音视频文件(.mp4)、C的音视频文件(.mp4)、一个A、B和C的混合音视频文件(.mp4),如果是纯音频通话,则没有相应的音视频文件。这些录制文件的地址在音视频通话结束之后会通过抄送服务抄送到您的服务器。
客户端录制支持录制单个通话者的音视频文件和录制通话的混合录音。
服务端录制
服务端录制客户端配置
- 介绍
服务端录制支持点对点及多人音视频服务端录制,视频合图布局提供画廊布局、以及主讲人布局两种模式,默认提供画廊布局,主讲人布局目前为使用版本,在开启通话或加入房间时需要在扩展参数 AVChatParameters 中设置相关参数。
- 参数说明
键常量名 | 值类型 | 说明 |
---|---|---|
KEY_SERVER_AUDIO_RECORD | Boolean | 服务器录制音频开关 (该开关仅在服务器开启录制功能时才有效) |
KEY_SERVER_VIDEO_RECORD | Boolean | 服务器录制视频开关 (该开关仅在服务器开启录制功能时才有效) |
KEY_SERVER_RECORD_MODE | AVChatServerRecordMode | MIX_AND_SINGLE:参与混合录制也录制单人文件 MIX:参与混合录制 SINGLE:只录制单人文件 |
KEY_SERVER_RECORD_SPEAKER | Boolean | 进入房间时设置此字段,是否为录制主讲人 |
- 画廊模式布局
视频录制布局目前提供默认的画廊模式,即等分模式,客户开通了录制功能,默认提供画廊模式。 - 当音视频房间参与视频合图人数为1人时,默认整个画面 - 当音视频房间参与视频合图人数为2人时,采用二宫格模式 - 当音视频房间参与视频合图人数为3或者4人时,采用四宫格模式 - 当音视频房间参与视频合图人数大于4人且小于等于9人时,采用九宫格模式 - 当音视频房间参与视频合图人数大于9人时,默认取前9个人视频画面合图
- 主讲人模式布局
主讲人模式布局目前为使用版本,客户开通了录制功能,需要在开启通话或加入房间时,在AVChatParameters中设置KEY_SERVER_RECORD_SPEAKER,所谓主讲人模式即是视频合图画面中,一个成员视频画面作为背景突出显示。
- 示例
在线教育小班场景,客户希望录制整个课堂的混合文件,并且希望录制老师单人的文件。那么客户需要打开老师以及学生A、B的混合录制开关,以及打开老师单人录制开关,才可以生成一堂课混频文件、以及老师单人的视频文件
描述 | 多人录制(销售后台) | 音频录制(客户端) | 视频录制(客户端) | 录制模式 |
---|---|---|---|---|
开关设置 | 开 | 开 | 开 | 老师:混合+单人录制,学生:混合录制 |
生成文件 | / | 混音aac文件x1 | 混屏mp4文件x1 | 视频mp4x1 |
服务端录制客户端配置
- API介绍
服务端录制需要通过AVChatManager
的setParameters
或者setParameter
接口进行设置,参数名称在AVChatParameters中,KEY_SERVER_AUDIO_RECORD
设置服务器语音录制,KEY_SERVER_VIDEO_RECORD
设置服务器视频录制,KEY_SERVER_RECORD_MODE
设置服务器录制模式(混合与单人、混合、单人),KEY_SERVER_RECORD_SPEAKER
设置服务器录制是否为主讲人。
- API原型
java /**
* 服务器连接回调
*
* @param code 加入服务器结果 {@link AVChatResCode.JoinChannelCode}
* @param audioFile 如果存在服务器录制,指向语音文件.自v6.6.0开始已废弃。
* @param videoFile 如果存在服务器录制,指向视频文件.自v6.6.0开始已废弃。
* @param elapsed 从下面三个相关调用处开始计算,到成功加入房间的耗时,单位ms
* @see AVChatManager#call2(String, AVChatType, AVChatNotifyOption, AVChatCallback)
* @see AVChatManager#accept2(long, AVChatCallback)
* @see AVChatManager#joinRoom2(String, AVChatType, AVChatCallback)
*/
void onJoinedChannel(int code, String audioFile, String videoFile, int elapsed);
- 参数说明
参数 | 说明 |
---|---|
code | 返回加入频道是否成功。常见错误码参考 JoinChannelCode 。 |
audioFile | 在开启服务器录制的情况下返回语音录制文件的保存路径。自v6.6.0开始已废弃。 |
videoFile | 在开启服务器录制的情况下返回语音视频文件的保存路径。自v6.6.0开始已废弃。 |
elapsed | 从开始加入房间相关调用处开始计算,到成功加入房间的耗时,单位ms |
- 示例
java@Override
public void onJoinedChannel(int code, String audioFile, String videoFile, int elapsed) { }
客户端录制
音视频录制
通话进行中,可以录制用户的音频和视频数据, 文件将以MP4格式保存在客户端本地。程序卸载时录制的本地文件也会随程序一并删除。
开始录制
- API介绍
客户端本地开始音视频录制接口,通过返回值判断是否调用成功。录制account
的音频和视频文件,前后摄像头切换时录制文件可能存在多个。
- API原型
java /**
* 开始录制某个用户的语音和视频数据到文件,格式为mp4,该用户的语音和视频数据会被记录在MP4文件中,文件保存在客户端本地。
* 在视频模式时录制的是音视频数据,在语音模式时录制的是音频数据。
* 注意:录制双方数据可以采用服务器录制。
*
* @param account 用户账号
* @return {@code true} 方法调用成功,{@code false} 方法调用失败
*/
public abstract boolean startAVRecording(String account);
- 参数说明
参数 | 说明 |
---|---|
account | 用户账号。 |
- 示例
java// 开始录制用户的音视频数据
AVChatManager.getInstance().startAVRecording(account);
结束录制
- API介绍
客户端本地停止音视频录制接口, 停止录制后将会通过回调函数返回结果。
- API原型
java /**
* 停止录制某个用户的语音和视频数据到文件,格式为mp4,该用户的语音和视频数据会被记录在MP4文件中,文件保存在客户端本地。
* 在视频模式时录制的是音视频数据,在语音模式时录制的是音频数据。
* 注意:录制双方数据可以采用服务器录制。
*
* @param account 用户账号
* @return {@code true} 方法调用成功,{@code false} 方法调用失败
*/
public abstract boolean stopAVRecording(String account);
- 参数说明
参数 | 说明 |
---|---|
account | 用户账号。 |
- 示例
java// 停止录制用户的音视频数据
AVChatManager.getInstance().stopAVRecording(account);
录制相关回调
- API介绍
录制结束后会通过网络通话状态通知中的回调告知。
- API原型
java /**
* 用户音视频数据录制结束
*
* @param account 用户账号
* @param filePath 录制文件路径,当发生视频清晰度等情况时会存在多个MP4文件
*/
void onAVRecordingCompletion(String account, String filePath);
- 参数说明
参数 | 说明 |
---|---|
account | 用户账号。 |
filePath | 录制文件路径。 |
- 示例
java public void onAVRecordingCompletion(String account, String filePath) {
if (account != null && filePath != null && filePath.length() > 0) {
String msg = "音视频录制已结束, " + "账号:" + account + " 录制文件已保存至:" + filePath;
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "录制已结束.", Toast.LENGTH_SHORT).show();
}
}
- 特殊说明 存储空间不足时通过网络通话状态通知中的onLowStorageSpaceWarning警告,存储空间低于20M时开始出现警告,出现警告时请及时关闭所有的录制服务,当存储空间低于10M时会自动关闭所有的录制功能
通话录音
通话进行中,可以录制用户的音频数据, 录音文件格式为wav,文件保存在客户端本地。程序卸载时录制的本地文件也会随程序一并删除。
开始通话录音
- API介绍
客户端本地开始录音接口,包含所有用户的语音数据,录音文件格式为wav,文件保存在客户端本地。
- API原型
java /**
* 通话中开始录音,包含所有用户的语音数据,录音文件格式为wav,文件保存在客户端本地。
*
* @return {@code true} 方法调用成功,{@code false} 方法调用失败
*/
public abstract boolean startAudioRecording();
- 示例
java// 开始录音
AVChatManager.getInstance().startAudioRecording();
结束通话录音
- API介绍
客户端本地停止音视频录制接口, 停止录制后将会通过回调函数返回结果。
- API原型
java * 通话中停止录音,包含所有用户的语音数据,录音文件格式为wav,文件保存在客户端本地。
*
* @return {@code true} 方法调用成功,{@code false} 方法调用失败
*/
public abstract boolean stopAudioRecording();
- 示例
java//停止录音
AVChatManager.getInstance().stopAudioRecording();
录音相关回调
- API介绍
录音结束后会通过网络通话状态通知中的回调告知。
- API原型
java/**
* 语音录制结束
*
* @param filePath 录制语音文件路径
*/
void onAudioRecordingCompletion(String filePath);
- 参数说明
参数 | 说明 |
---|---|
filePath | 录制语音文件路径。 |
- 示例
java public void onAudioRecordingCompletion(String filePath) {
if (filePath != null && filePath.length() > 0) {
String msg = "音频录制已结束, 录制文件已保存至:" + filePath;
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "录制已结束.", Toast.LENGTH_SHORT).show();
}
}
- 特殊说明
存储空间不足时通过网络通话状态通知中的onLowStorageSpaceWarning警告,存储空间低于20M时开始出现警告,出现警告时请及时关闭所有的录制服务,当存储空间低于10M时会自动关闭所有的录制功能