保利威文档中心

幫助中心

6_7-互动学堂场景-连麦

更新時間:2023-04-17 15:27:57

1 功能概述

互動學堂支援連麥功能,支援學生進入課堂自動連麥、學生舉手申請連麥,也支援講師直接邀請學生連麥,並支援多人連麥,豐富課堂內容。

學生舉手連麥流程:學生舉手申請連麥 -> 講師端允許學生連麥 -> 學生正式加入連麥。

講師邀請上麥流程:講師選擇一名學生邀請上麥 -> 學生點擊確定立即上麥,或等待5秒後自動上麥

2 使用演示

互動學堂連麥功能以佈局方式引入,並在初始化時設定相應參數,監聽回呼即可。

plvhcLinkmicLy = findViewById(R.id.plvhc_linkmic_ly);
// 初始化连麦布局
plvhcLinkmicLy.init(liveRoomDataManager);
// 初始化连麦的媒体配置
boolean isOpenMic = getIntent().getBooleanExtra(EXTRA_IS_OPEN_MIC, true);
boolean isOpenCamera = getIntent().getBooleanExtra(EXTRA_IS_OPEN_CAMERA, true);
boolean isFrontCamera = getIntent().getBooleanExtra(EXTRA_IS_FRONT_CAMERA, true);
plvhcLinkmicLy.muteAudio(!isOpenMic);
plvhcLinkmicLy.muteVideo(!isOpenCamera);
plvhcLinkmicLy.switchCamera(isFrontCamera);
// 设置布局回调 - 连麦
plvhcLinkmicLy.setOnViewActionListener(new IPLVHCLinkMicLayout.OnViewActionListener() {
    // 连麦布局回调方法 ...
});

詳細的呼叫程式碼以及與其他模組的通訊,請參考PLVHCLiveHiClassActivity類別中的程式碼呼叫。

3 接口介紹

互動學堂連麥佈局的接口定義為IPLVHCLinkMicLayout,接口定義了可供外部直接呼叫的功能方法,以及需要外部回應的事件監聽器。

  1. 提供給外部的可直接呼叫功能方法
/**
 * 初始化
 *
 * @param liveRoomDataManager 直播间数据管理器
 */
void init(IPLVLiveRoomDataManager liveRoomDataManager);

/**
 * 设置view交互事件监听器
 *
 * @param listener 监听器
 */
void setOnViewActionListener(OnViewActionListener listener);

/**
 * 静音音频
 *
 * @param mute true表示静音,false表示打开
 */
void muteAudio(boolean mute);

/**
 * 禁用视频
 *
 * @param mute true表示禁用视频,false表示打开视频
 */
void muteVideo(boolean mute);

/**
 * 切换前后置摄像头方向
 */
void switchCamera(boolean front);

/**
 * 上课
 */
void startLesson(IPLVDataRequestListener<String> listener);

/**
 * 下课
 */
void stopLesson(IPLVDataRequestListener<String> listener);

/**
 * 发送举手事件
 *
 * @param raiseHandTime 举手时间
 */
void sendRaiseHandEvent(int raiseHandTime);

/**
 * 设置布局的可见性
 *
 * @param visibility One of {@link android.view.View#VISIBLE}, {@link android.view.View#INVISIBLE}, or {@link android.view.View#GONE}.
 */
void setVisibility(int visibility);

/**
 * 是否是课节上课状态
 *
 * @return true:是课节上课状态,false:不是课节上课状态
 */
boolean isLessonStarted();

/**
 * 获取连麦Presenter
 *
 * @return linkMicPresenter
 */
IPLVMultiRoleLinkMicContract.IMultiRoleLinkMicPresenter getLinkMicPresenter();

/**
 * 销毁,释放资源
 */
void destroy();
  1. 需要外部回應的事件監聽器
/**
 * view交互事件监听器
 */
interface OnViewActionListener {
    /**
     * 布局大小变化
     */
    void onLayoutSizeChanged();

    /**
     * 用户举手变化
     *
     * @param raiseHandCount 举手数量
     * @param isRaiseHand    是否举手
     */
    void onUserRaiseHand(int raiseHandCount, boolean isRaiseHand);

    /**
     * 我的画笔权限变化
     *
     * @param isHasPaint 是否有画笔权限
     */
    void onHasPaintToMe(boolean isHasPaint);

    /**
     * 设置连麦readerView
     */
    void onSetupLinkMicRenderView(SurfaceView surfaceView, String linkMicId);

    /**
     * 学生获取奖杯
     *
     * @param userName 用户名称
     */
    void onGetCup(String userName);

    /**
     * 网络质量回调
     *
     * @param networkQuality {@link com.plv.linkmic.PLVLinkMicConstant.NetQuality}
     */
    void onNetworkQuality(int networkQuality);

    /**
     * 上行流量网络状态
     *
     * @param networkStatusVO
     */
    void onUpstreamNetworkStatus(PLVNetworkStatusVO networkStatusVO);

    /**
     * 远端连麦用户网络状态
     *
     * @param networkStatusVO
     */
    void onRemoteNetworkStatus(PLVNetworkStatusVO networkStatusVO);

    /**
     * 课节准备中
     */
    void onLessonPreparing(long serverTime, long lessonStartTime);

    /**
     * 课节开始
     */
    void onLessonStarted();

    /**
     * 课节结束
     */
    void onLessonEnd(long inClassTime, boolean isTeacherType, boolean hasNextClass);
}

4 實作介紹

IPLVHCLinkMicLayout的實作類別是PLVHCLinkMicLayout,講師和學生共用同一個佈局。

4.1 初始化檢視

初始化檢視分為兩個階段完成:第一階段是佈局容器初始化,第二階段是佈局具體內容初始化

4.1.1 佈局容器初始化

佈局容器初始化在PLVHCLinkMicLayout建構時即開始執行,包括連麥檢視插樁的添加、啟動前台服務和保持屏幕常量等。

private void initView() {
    LayoutInflater.from(getContext()).inflate(R.layout.plvhc_linkmic_layout, this, true);

    classStopNoNextDialog = new PLVHCClassStopNoNextDialog(getContext());
    classStopHasNextDialog = new PLVHCClassStopHasNextDialog(getContext());

    // 启动前台服务,防止在后台被杀
    PLVForegroundService.startForegroundService(PLVHCLiveHiClassActivity.class, "POLYV互动学堂", R.drawable.plvhc_ic_launcher);
    // 防止自动息屏、锁屏
    setKeepScreenOn(true);
}
4.1.2 佈局具體內容初始化

佈局具體內容初始化會在獲取到頻道限制的連麥人數後執行。

互動學堂支援 1v6 和 1v16 的連麥,這兩種連麥方式的連麥檢視排列方式不同,因此需要在確定頻道連麥人數後才初始化具體的佈局內容。

佈局具體內容初始化包括連麥列表檢視建立、檢視尺寸調整、連麥檢視回呼監聽設定,以及執行需要在初始化後執行的延時任務。

private void initLinkMicItemLayout(boolean isLittleLayout) {
    if (isLittleLayout) {
        ViewStub linkMicLyStub = findViewById(R.id.plvhc_linkmic_little_ly_stub);
        linkMicItemLayout = (IPLVHCLinkMicItemLayout) linkMicLyStub.inflate();
        initLayoutSize(true);
    } else {
        ViewStub linkMicLyStub = findViewById(R.id.plvhc_linkmic_large_ly_stub);
        linkMicItemLayout = (IPLVHCLinkMicItemLayout) linkMicLyStub.inflate();
        initLayoutSize(false);
    }
    if (linkMicItemLayout != null) {
        linkMicItemLayout.setOnViewActionListener(new IPLVHCLinkMicItemLayout.OnViewActionListener() {
            @Override
            public void onClickItemView(final int position, final PLVLinkMicItemDataBean linkMicItemDataBean) {
                // 连麦视图点击回调 ...
            }
        });
        linkMicItemLayout.setOnRenderViewCallback(new PLVHCLinkMicItemView.OnRenderViewCallback() {
            // 连麦渲染视图的回调监听 ...
        });
        // 延时任务执行
        for (Runnable task : initiatedTasks) {
            task.run();
        }
        initiatedTasks.clear();
    }
}

4.2 初始化資料

初始化資料包括資料管理器IPLVLiveRoomDataManager的接收儲存、課節詳情資料的監聽、PresenterIMultiRoleLinkMicPresenter的註冊和初始化。

@Override
public void init(IPLVLiveRoomDataManager liveRoomDataManager) {
    this.liveRoomDataManager = liveRoomDataManager;
    observeLessonDataBean();

    linkMicPresenter = new PLVMultiRoleLinkMicPresenter(liveRoomDataManager);
    linkMicPresenter.registerView(linkMicView);
    linkMicPresenter.init();
}

連麥以 mvp 模式實作,具體互動邏輯在linkMicView內實作,詳情可以參考程式碼區塊 連麥 - MVP模式的view層實作

5 子目錄介紹

5.1 item

item目錄存放連麥列表佈局檢視和連麥檢視。

IPLVHCLinkMicItemLayout為連麥列表佈局檢視對外提供接口的定義。

PLVHCAbsLinkMicItemLayout為連麥列表佈局檢視的父類別,具體提供了多種連麥列表佈局的通用方法實作。

PLVHCLinkMicItemLittleLayout為 1v6 連麥模式下的佈局檢視,PLVHCLinkMicItemLargeLayout為 1v16 連麥模式下的佈局檢視。

PLVHCLinkMicItemView為單個連麥渲染檢視。

5.2 widget

widget目錄存放連麥功能特有的檢視控制項,包括學員被邀請上麥的倒數計時彈窗。

联系客服,在线咨询