录制

本章节着重介绍实时音视频有关录制的内容。网易云实时音视频提供服务端录制客户端录制两种录制方式。

服务端录制需要您联系我们的商务经理,开通此功能,并且需要在管理中心中成功配置消息抄送服务,假设A和B进行点对点实时音视频通话,服务端录制下来的文件包括:A的音视频文件(.mp4)B的音视频文件(.mp4)。如果是纯音频通话,则没有相应的音视频文件,如果您开通了服务端混合录制,则还会生成一个A和B的混合音视频文件(.mp4)。假设A、B、C进行多人实时音视频通话,进入房间时,设置了服务器录制音频开关、录制视频开关、单人文件录制开关、服务端录制下来的文件包括:A的音视频文件(.mp4)B的音视频文件(.mp4)C的音视频文件(.mp4)、一个A、B和C的混合音视频文件(.mp4),如果是纯音频通话,则没有相应的音视频文件。这些录制文件的地址在音视频通话结束之后会通过抄送服务抄送到您的服务器。

客户端录制支持录制单个通话者的音视频文件和录制通话的混合录音。

服务端录制

服务端录制客户端配置

键常量名 键常量值 值类型 说明
kNIMVChatRecord record int 是否需要服务器录制音频数据 >0表示是,默认不填为0 (需要服务器配置支持,本地录制直接调用接口函数)
kNIMVChatVideoRecord video_record int 是否需要服务器录制视频数据 >0表示是 ,默认不填为0(需要服务器配置支持,本地录制直接调用接口函数)
kNIMVChatRecordType record_type int 服务器录制模式NIMVChatServRecordType,默认为0 (需要服务器配置支持,并且开kNIMVChatRecord,kNIMVChatVideoRecord其中一个)
kNIMVChatRHostSpeaker r_host_speaker int 服务器混录时指定本人主画面,默认为0, 非0表示打开(需要服务器配置支持,及录制模式打开混录,并且为多人中的第一个主画面配置)

视频合图布局

描述 多人录制(销售后台) 音频混合录制(客户端) 视频混合录制(客户端) 录制模式
开关设置 老师:混合+单人录制,学生:混合录制
生成文件 / / 混屏mp4文件x1 视频mp4x1

服务端录制客户端配置

服务端录制需要通过AVChatManagersetParameters或者setParameter接口进行设置,参数名称在AVChatParameters中,KEY_SERVER_AUDIO_RECORD设置服务器语音录制,KEY_SERVER_VIDEO_RECORD设置服务器视频录制,KEY_SERVER_RECORD_MODE 设置服务器录制模式(混合与单人、混合、单人),KEY_SERVER_RECORD_SPEAKER 设置服务器录制是否为主讲人, 开启服务器录制后在AVChatStateObserveronJoinedChannel中回调服务器录制的文件信息。

    /**
     * 服务器连接回调
     *
     * @param code      加入服务器结果 {@link AVChatResCode.JoinChannelCode}
     * @param audioFile 如果存在服务器录制,指向语音文件.
     * @param videoFile 如果存在服务器录制,指向视频文件.
     * @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 在开启服务器录制的情况下返回语音录制文件的保存路径。
videoFile 在开启服务器录制的情况下返回语音视频文件的保存路径。
elapsed 从开始加入房间相关调用处开始计算,到成功加入房间的耗时,单位ms
@Override
public void onJoinedChannel(int code, String audioFile, String videoFile, int elapsed) { }

客户端录制

音视频录制

通话进行中,可以录制用户的音频和视频数据, 文件将以MP4格式保存在客户端本地。程序卸载时录制的本地文件也会随程序一并删除。

开始录制

客户端本地开始音视频录制接口,通过返回值判断是否调用成功。录制account的音频和视频文件,前后摄像头切换时录制文件可能存在多个。

    /**
     * 开始录制某个用户的语音和视频数据到文件,格式为mp4,该用户的语音和视频数据会被记录在MP4文件中,文件保存在客户端本地。
     * 在视频模式时录制的是音视频数据,在语音模式时录制的是音频数据。
     * 注意:录制双方数据可以采用服务器录制。
     *
     * @param account 用户账号
     * @return {@code true} 方法调用成功,{@code false} 方法调用失败
     */
    public abstract boolean startAVRecording(String account);
参数 说明
account 用户账号。
// 开始录制用户的音视频数据
AVChatManager.getInstance().startAVRecording(account);
结束录制

客户端本地停止音视频录制接口, 停止录制后将会通过回调函数返回结果。

    /**
     * 停止录制某个用户的语音和视频数据到文件,格式为mp4,该用户的语音和视频数据会被记录在MP4文件中,文件保存在客户端本地。
     * 在视频模式时录制的是音视频数据,在语音模式时录制的是音频数据。
     * 注意:录制双方数据可以采用服务器录制。
     *
     * @param account 用户账号
     * @return {@code true} 方法调用成功,{@code false} 方法调用失败
     */
    public abstract boolean stopAVRecording(String account);
参数 说明
account 用户账号。
// 停止录制用户的音视频数据
AVChatManager.getInstance().stopAVRecording(account);
录制相关回调

录制结束后会通过网络通话状态通知中的回调告知。

    /**
     * 用户音视频数据录制结束
     *
     * @param account  用户账号
     * @param filePath 录制文件路径,当发生视频清晰度等情况时会存在多个MP4文件
     */
    void onAVRecordingCompletion(String account, String filePath);
参数 说明
account 用户账号。
filePath 录制文件路径。
   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();
        }
    }

通话录音

通话进行中,可以录制用户的音频数据, 录音文件格式为wav,文件保存在客户端本地。程序卸载时录制的本地文件也会随程序一并删除。

开始通话录音

客户端本地开始录音接口,包含所有用户的语音数据,录音文件格式为wav,文件保存在客户端本地。

    /**
     * 通话中开始录音,包含所有用户的语音数据,录音文件格式为wav,文件保存在客户端本地。
     *
     * @return {@code true} 方法调用成功,{@code false} 方法调用失败
     */
    public abstract boolean startAudioRecording();
// 开始录音
AVChatManager.getInstance().startAudioRecording();
结束通话录音

客户端本地停止音视频录制接口, 停止录制后将会通过回调函数返回结果。

     * 通话中停止录音,包含所有用户的语音数据,录音文件格式为wav,文件保存在客户端本地。
     *
     * @return {@code true} 方法调用成功,{@code false} 方法调用失败
     */
    public abstract boolean stopAudioRecording();
//停止录音
AVChatManager.getInstance().stopAudioRecording();
录音相关回调

录音结束后会通过网络通话状态通知中的回调告知。

/**
 * 语音录制结束
 *
 * @param filePath 录制语音文件路径
*/
void onAudioRecordingCompletion(String filePath);
参数 说明
filePath 录制语音文件路径。
   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时会自动关闭所有的录制功能