iOS

# 四分屏录制

# 简介

为了更好的了解业务全过程,菊风 Juphoon 提供四分屏录制方案。可同时将坐席和访客的视频画面,以及坐席和访客双方的屏幕画面同时录制下来。

  • 服务器录制为四分屏又称为双房间模式,即两方屏幕共享,两方视频画面。
  • 支持通过双通话房间模式将正在通话的双方摄像头及双方的屏幕(屏幕共享)画面进行合成录制。

# 1. 前提条件

在集成四分屏录制功能前,确保已初始化 JRTCRoom 模块,已开启房间远程录制。

# 2. 终端集成

双房间模式目前主要是为了服务器录制为四分屏,即两方屏幕共享,两方视频画面。 一般第二个房间不开启音视频流上传。

创建双房间示例代码如下:

JRTCRoom firstRoom = JRTCRoom.create(client, JCManager.getInstance().mediaDevice, this);
JRTCRoom secondRoom = JRTCRoom.create(client, JCManager.getInstance().mediaDevice, this);
private String mFirstDeliveryUserUri;

public void onJoin(boolean result, @ReasonCode int reason, String roomId, JRTCRoom room) {
    if (room == firstRoom) {
        //处理第一个房间
    } else if (room == secondRoom) {
        //处理第二个房间
    }
}

//开启远程录制
private void startRemoteRecord() {
    if (firstRoom.getRemoteRecordState() == RECORD_STATE_NONE) {
        //"cd未加入,当前不允许录制
    } else if (firstRoom.getRemoteRecordState() == RECORD_STATE_READY) {
        JRTCRecordRemoteParam p = new JRTCRecordRemoteParam();
        JRTCRecordRemoteParam p = new JRTCRecordRemoteParam();
        p.setFrameRate(30);
        p.setIBitrate(50);
        List<JRTCRecordRemoteParam.RecordLayout> layoutList = new ArrayList<>();
        int windows = 0; // windows表示屏幕的位置
        for (int i = 0; i < firstRoom.getParticipants().size(); i++) {
            JRTCRecordRemoteParam.RecordLayout layout = new JRTCRecordRemoteParam.RecordLayout();
            layout.setId(firstRoom.getParticipants().get(i).getUserId(), true);
            layout.setPosition(windows);
            layoutList.add(layout);
            windows++;
        }
        // 第一个会议屏幕共享的位置
        if (!TextUtils.isEmpty(firstRoom.getShareStreamId())) {
            JRTCRecordRemoteParam.RecordLayout layout = new JRTCRecordRemoteParam.RecordLayout();
            layout.setId(firstRoom.getCallId(), false);
            layout.setPosition(windows);
            layoutList.add(layout);
            windows++;
            
        }
        // 第二个屏幕共享的位置
        if (!TextUtils.isEmpty(mSecondRoom.getShareStreamId())) {
            JRTCRecordRemoteParam.RecordLayout layout = new JRTCRecordRemoteParam.RecordLayout();
            layout.setId(secondRoom.getCallId(), false);
            layout.setPosition(windows);
            layoutList.add(layout);
            windows++;
        }
        
        p.setLayoutList(layoutList);
        p.setWatermarkTextMap(map);
        //开启服务器录制
        room.enableRemoteRecord(true, p);
    }
}

#