logo
当前页

录制混流


功能简介

本地服务端录制 SDK 支持将房间内的所有用户的音视频流混合成一个画面再录制,集成 SDK 后,即可开始使用 SDK 的混流录制功能。

前提条件

使用步骤

置事件回调监听

初始化 SDK 之前,首先通过 setZegoRoomCallbacksetZegoStreamRecordCallbacksetZegoExternalVideoDataCallback 接口分别设置房间回调、录制回调、视频数据回调,便于接收音视频流录制过程中的相关事件通知。

Untitled
private static IZegoRoomCallback mRoomCallback = new IZegoRoomCallback() {
    //处理房间回调
};

private static IZegoStreamRecordCallback mStreamRecordCallback = new IZegoStreamRecordCallback() {
    //处理录制事件回调
};
   
private static IZegoExternalVideoDataCallback mVideoDataCallback = new IZegoExternalVideoDataCallback() {
    //处理视频帧数据回调,回调抛出每路单流解码帧数据,目前仅支持混流下使用
};

public void setZegoRoomCallback(IZegoRoomCallback callback)

public void setZegoStreamRecordCallback(IZegoStreamRecordCallback callback)
 
public void setZegoExternalVideoDataCallback(IZegoExternalVideoDataCallback callback)
1
Copied!

初始化 SDK 之前,您还可以根据需要,调用 setLogDirAndSize 接口,设置日志文件路径和大小,便于问题定位与分析。

初始化 SDK

调用 initSDK 接口初始化 SDK,将申请到的 AppID 传入参数 “appID”。

Untitled
public boolean initSDK(long appID, IZegoInitSDKCompletionCallback callback)
1
Copied!

注册异步回调 onInitSDK,用于接收初始化 SDK 过程中的相关事件通知。

Untitled
public interface IZegoInitSDKCompletionCallback {
    void onInitSDK(int errorCode);
}
1
Copied!

设置 Token

初始化 SDK 之后、登录房间之前,需要调用 setCustomToken 接口,传入您获取到的 Token,用于鉴权。

Token 的获取方式,请参考 使用 Token 鉴权

Untitled
public void setCustomToken(String thirdPartyToken);
1
Copied!

登录房间

鉴权通过后,调用 loginRoom 接口登录房间。

Untitled
public boolean loginRoom(String roomID, IZegoLoginCompletionCallback callback)
1
Copied!

注册异步回调 onLoginCompletion,用于接收登录房间过程中的相关事件通知。

Untitled
public interface IZegoLoginCompletionCallback {
    void onLoginCompletion(int errorCode, String roomID);
}
1
Copied!

开始录制

登录房间成功后,调用 startRecordMixStream 接口,开始录制音视频流。

Note
  • 建议您在登录房间成功、并收到 onStreamUpdate 流信息更新的回调通知,确认增加流的信息后,再调用 startRecordMixStream 接口开启录制混流。
  • 您可以在开始录制之前,调用 getMaxRecordCount 接口,获取 SDK 支持的最大同时录制流数,根据其值处理同时录制的流数量。
Untitled
public boolean startRecordMixStream(ZegoMixStreamRecordConfig config)
1
Copied!

其中:config 指进行混流录制的各项配置,详情请参考 ZegoMixStreamRecordConfig

注册异步回调 onStreamRecordBeginonMixStreamRecordUpdate,用于接收录制混流过程中的相关事件通知。

Untitled
public interface IZegoStreamRecordCallback {

    void onStreamRecordBegin(String streamID, String pathAndName);
    void onMixStreamRecordUpdate(String[] listStreamID);
}
1
Copied!

录制启动成功后,会收到 onStreamRecordBegin 回调,成功拉到有音视频数据的流时会收到 onMixStreamRecordUpdate 回调。

注意

如果您需要同时录制单流和混流,在开始录制之前,请先调用 enableSingleAndMixRecordMode 接口,启用 单流混流同时录制模式

  • 该模式下,“混流录制”会混入所有“单流录制”正在录制的流。即使您没有将“单流录制”中的某条单流作为“混流录制”的输入流,如果此条单流中有音频,这个音频也会被混流录制下来。
  • 该模式比较消耗系统资源;且只能先启动混流录制、再启动单流录制;结束混流录制时,也会同时结束所有的单流录制。

请您酌情使用该模式。

更新混流配置

当您需要增加输入流、更新输入流、或更新混流输出配置时,需要重新构造混流配置 ZegoStreamConfig、并调用 updateInputStreamConfig 接口更新混流配置。

Untitled
public boolean updateInputStreamConfig(ZegoStreamConfig[] listStreamConfig)
1
Copied!

注册异步回调 onMixStreamRecordUpdate,用于接收更新混流配置过程中的相关事件通知。

Untitled
public interface IZegoStreamRecordCallback {
    void onMixStreamRecordUpdate(String[] listStreamID);
}
1
Copied!
Note
  • 混流成功后,会返回混流输入流的流 ID 列表(仅包含成功拉到数据的流 ID)。
  • 混流录制的输入流发生变化时(例如,开始录制、录制中流发生异常等)都会收到 onMixStreamRecordUpdate 回调。

停止录制

当不需要录制、或录制完成后,调用 stopRecordMixStream 接口停止录制。

Untitled
public boolean stopRecordMixStream()
1
Copied!

注册异步回调 onStreamRecordEnd,用于接收停止录制时的相关事件通知。

Untitled
public interface IZegoStreamRecordCallback {
    void onStreamRecordEnd(String streamID, String pathAndName, int reason);
}
1
Copied!

然后:

  1. 调用 logoutRoom 接口退出房间。
  2. 调用 setZegoRoomCallback(null)、setZegoStreamRecordCallback(null)、setZegoExternalVideoDataCallback(null) 接口,停止回调监听。
  3. 调用 unInitSDK 反初始化 SDK。

Previous

录制单流

Next

使用 Token 鉴权