准备工作

Flash 互动

创建互动直播

Interactive 主要实现互动相关的功能模块,获取实例的方式如下:

Interactive 参数 描述
context 上下文
messageCallback 消息回调,用于接收互动的Socket消息,必须实现
roomCallback 房间回调,用于接收互动房间中的一些订阅消息,比如流的添加,移除 必须实现
private InterActive interactive;
interactive = new InterActive(interActView.getContext(), new RoomCallback(), new MessageEventCallback());

互动房间回调

class RoomCallback implements InterActive.RoomCallback {
        @Override
        public void onDidConnect() {
			//进入房间
        }

        @Override
        public void onDidError() {
			//进入房间失败
        }

        @Override
        public void onDidPublishStream() {
			// 调用publish方法,上麦成功后回调
        }

        @Override
        public void onDidUnPublishStream() {
			//调用unpublish,下麦成功后回调
        }

        @Override
        public void onDidSubscribeStream(Stream stream, final VHRenderView newRenderView) {
			//接收订阅的Stream ,VHRenderView渲染View,直接显示就可以使用
        }

        @Override
        public void onDidRoomStatus(Room room, Room.VHRoomStatus vhRoomStatus) {
            switch (vhRoomStatus) {
                case VHRoomStatusDisconnected:// 异常退出
                    
                    break;
                case VHRoomStatusError:
                    break;
                case VHRoomStatusReady:
                    break;
                case VHRoomStatusConnected: // 重连进房间
					break;
                default:
                    break;
            }
        }

        @Override
        public void onDidRemoveStream(Room room, Stream stream) {
            //有流退出时回调,用于取消订阅该流
        }
    }
}

获取互动房间信息

获取互动房间信息 VhallSDK.initInteractive 调用方式如下:

initInteractive 参数 描述
webinarId 活动ID
nickname 用户名称 (如果第三方登陆可以传递空)
email 用户标识 (如果第三方登陆可以传递空)
password K值 (暂不可用)
RequestCallback 接口请求回调信息 成功or失败
		interactive.init(mParam.watchId, "", "", "", new RequestCallback() {
            @Override
            public void onSuccess() {
            }

            @Override
            public void onError(int errorCode, String errorMsg) {

            }
        });

###设置互动的分辨率

interactive.setDefinition(definition);
分辨率常量 描述
VHILSS.SD 低清分辨率 192*144(默认)
VHILSS.HD 标清分辨率 320*240
VHILSS.UHD 高清分辨率 480*360

此方法必须在setLocalView 之前调用 如自定义参数option中有设置,则该方法失效

设置本地预览

参考InteractivePresenter

//VHRenderView 互动渲染的View,主要用于采集Camera  
VHRenderView renderView = new VHRenderView(context);
renderView.setScalingMode(scaleType);//设置缩放模式
renderView.init(interactive.getEglBase().getEglBaseContext(),null);//初始化渲染视图,渲染事件监听如有需要可自行实现;
/**
 * 互动控制器添加本地渲染视图
 *
 * @param localView  本地预览渲染视图
 * @param streamType 互动流类型
 * @param attributes 流信息自定义内容,订阅端原样返回;
 */
interactive.setLocalView(renderView,Stream.VhallStreamType.VhallStreamTypeAudioAndVideo,null);
//将新建的本地渲染视图,添加到布局界面进行展示;
interFraView.addLocalView(renderView);

VHRenderView的渲染填充模式

SurfaceViewRenderer.VHRenderViewScalingMode 说明
kVHRenderViewScalingModeNone 原始大小
kVHRenderViewScalingModeAspectFit 自适应居中
kVHRenderViewScalingModeAspectFill 铺满视图

互动流类型

VhallStreamType 说明
VhallStreamTypeOnlyAudio 纯音频
VhallStreamTypeOnlyVideo 纯视频
VhallStreamTypeAudioAndVideo 音视频
VhallStreamTypeScreen 桌面共享(pc端发起)
VhallStreamTypeFile 文件插播(pc插播)

本地预览镜像设置

如果不希望本地预览时旋转手机产生镜像效果,可在本地渲染视图上添加镜像设置;

VHRenderView.setMirror(true);

进入房间

实现互动功能必须调用此方法

interactive.enterRoom();

下麦,当调用携带CallBack参数方法时,当接口调用成功时,会发送一条下麦消息,PC端也能收到下麦的消息,当调用空参数方法时,不会发送消息,SDK直接下麦

interactive.unpublish();
interactive.unpublish(new RequestCallback() {
            @Override
            public void onSuccess() {
                interActView.finish();
            }

            @Override
            public void onError(int errorCode, String errorMsg) {

            }
        });

上麦

房间连接成功后,可根据业务需求,自定义上麦时机;
回调onDidConnect()成功后生效;

interactive.onpublish();

下麦

为保证各设备信息同步,请保证下麦接口调用成功后再执行下麦操作;

interactive.unpublish(new RequestCallback(){});

设备状态切换

切换摄像头

切换本地采集前后置摄像头

interactive.onSwitchCamera();

切换本地禁音状态

interactive.onSwitchAudio(isOpen);

切换本地视频开关状态

interactive.onSwitchVideo(isOpen);

销毁互动模块

interactive.onDestroy();