-
Notifications
You must be signed in to change notification settings - Fork 16
3_3 直播_连麦
保利威云课堂sdk支持连麦功能,举手连麦、音频连麦、视频连麦可自由选择,并支持多人连麦,丰富课堂内容。
连麦流程:讲师端发起连麦->学员举手申请连麦->讲师端允许学员连麦->学员正式加入连麦。
连麦需要以下的权限,并且CAMERA
和RECORD_AUDIO
权限需要动态申请,权限的申请时机可以放到申请连麦前。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
权限的配置在polyv-demo的app模块的AndroidManifest.xml
文件中已经配置好了,权限申请的代码在PolyvCloudClassVideoHelper
类的requestPermission
方法中处理。
如果您项目已集成了polyv-demo的app和commonui模块,则这些权限无需再配置。
PolyvLinkMicClient.getInstance().setAppIdSecret(appId, appSecert);
该方法的用例在PolyvCloudClassLoginActivity
类的checkToken
方法中可以找到。
PolyvLinkMicWrapper.getInstance().init(context);
PolyvLinkMicWrapper.getInstance().intialConfig(channelId);
该方法的用例在PolyvCloudClassHomeActivity
类的initialLinkMic
方法中可以找到。
//设置直播的类型是否是三分屏(PPT类型),因为连麦的摄像头会根据直播的类型做调整
PolyvLinkMicWrapper.getInstance().setPPTStatus(showPPT);
该方法的用例在PolyvCloudClassVideoHelper
类的createLinkMicLayout
方法中可以找到。
讲师端可以开启视频/音频连麦,学员端连麦时也需要根据讲师端的连麦类型作调整。
//讲师端的连麦类型从videoView.getLinkMicType方法中获取
PolyvLinkMicWrapper.getInstance().muteLocalVideo("audio".equals(videoView.getLinkMicType()));
该方法的用例在PolyvCloudClassVideoHelper
类的sendJoinRequest
方法中可以找到。
连麦的申请,取消申请事件的发送,都是通过聊天室来完成的,所以连麦举手用如下的方法:
polyvChatManager.sendJoinRequestMessage(PolyvLinkMicWrapper.getInstance().getLinkMicUid());
该方法的用例在PolyvCloudClassVideoHelper
类的sendJoinRequest
方法中可以找到。
polyvChatManager.sendJoinLeave(PolyvLinkMicWrapper.getInstance().getLinkMicUid());
该方法的用例在PolyvCloudClassVideoHelper
类的leaveChannel
方法中可以找到。
当讲师同意连麦后,学员端就可以加入连麦,同意连麦的事件可以在聊天室的信息监听回调中拿到。
PolyvLinkMicWrapper.getInstance().joinChannel("");
该方法的用例在PolyvCloudClassVideoHelper
类的processJoinResponseMessage
方法中可以找到。
PolyvLinkMicWrapper.getInstance().leaveChannel();
该方法的用例在PolyvCloudClassMediaController
类的showStopLinkDialog
方法中可以找到。
连麦事件监听包括:举手申请、取消举手、讲师同意、讲师开启/关闭连麦、连麦类型、讲师摄像头开关等。
polyvChatManager.addNewMessageListener(newMessageListener);
该方法的用例在PolyvCloudClassVideoHelper
类的构造方法中可以找到。
监听事件的类型及回调处理在PolyvCloudClassVideoHelper
类的onNewMessage
方法中可以找到。
连麦状态监听包括:连麦者的音量变化、连麦加入成功、离开连麦、用户加入连麦、用户离开连麦、用户禁用视频/音频等。
PolyvLinkMicWrapper.getInstance().addEventHandler(polyvLinkMicAGEventHandler);
该方法的用例在PolyvCloudClassVideoHelper
类的构造方法中可以找到。
监听事件的类型及回调处理在PolyvCloudClassVideoHelper
类的polyvLinkMicAGEventHandler
匿名内部类可以找到。
连麦渲染视图的作用是显示连麦者的视频画面。
PolyvLinkMicWrapper.getInstance().createRendererView(PolyvAppUtils.getApp());
该方法的用例在PolyvLinkMicDataBinder
类的onCreateViewHolder
方法中可以找到。
关联渲染视图后,方可把连麦者的画面显示出来。
//关联本地(自己)摄像头的视图
PolyvLinkMicWrapper.getInstance().setupLocalVideo(surfaceView, VideoCanvas.RENDER_MODE_FIT, myUid);
//关联远端连麦者的视图
PolyvLinkMicWrapper.getInstance().setupRemoteVideo(surfaceView, VideoCanvas.RENDER_MODE_FIT, remoteUid);
该方法的用例在PolyvLinkMicDataBinder
类的onBindViewHolder
方法中可以找到。
PolyvLinkMicWrapper.getInstance().switchCamera();
该方法的用例在PolyvLinkMicDataBinder
类的构造方法中可以找到。
PolyvLinkMicWrapper.getInstance().getLinkMicUid();
当不需要使用连麦功能时,需要销毁连麦并释放资源,建议该方法的使用放到Activity的onDestroy方法里。
PolyvLinkMicWrapper.getInstance().destroy(null);
该方法的用例在PolyvCloudClassHomeActivity
类的onDestroy
方法里可以找到。
保利威云课堂demo已经封装好连麦应用层的实现代码,由于连麦涉及到的交互比较多,建议客户直接使用云课堂demo的连麦代码,再在上面进行二次开发。
以下的类仅说明在连麦功能中的作用。
(1) PolyvCloudClassLoginActivity:配置连麦的账号信息。
(2) PolyvCloudClassHomeActivity:连麦布局的创建、布局位置的调控,初始化连麦,销毁连麦。
(3) PolyvCloudClassVideoHelper:基本整个连麦流程和交互都是在这个类完成,包括:申请连麦、离开连麦、连麦布局的显示/隐藏、连麦状态的维护、连麦相关事件的监听处理等。
(4) PolyvLinkMicDataBinder/PolyvNormalLiveLinkMicDataBinder:云课堂/普通直播的连麦适配器,主要是控制连麦列表布局item的处理、连麦item视图与主屏视图的切换逻辑。
(5) PolyvLinkMicListView/PolyvNormalLinkMicView:连麦item的父控件,主要是控制布局的位置,显示隐藏状态。