logoEN logo400-888-9970

3.3.0

版本更新说明 for v3.3.0

使用变更

本次更新保持类名不变,但存在包地址变更情况,如遇类引用不正确情况,删除后重新引入即可;

发直播部分

  1. 使用VHVideoCaptureView 替代原有CameraFilterView进行视图渲染
  2. 使用setCameraDrawMode(VHLivePushFormat.DRAW_MODE_NONE) 替代原有 setDrawMode
  3. 原有setAutioCloseFilterCallback将不再需要,直接删除即可
  4. 切换摄像头cameraview.switchCarmera();或者getBroadcast().changeCamera();
  5. 关闭滤镜cameraview.setFilter(null);
  6. 发直播配置通过VHLivePushConfig进行设置。
  7. 直播事件回调使用VHPlayerListener替代Broadcast.BroadcastEventCallback

看直播部分

  1. 使用VHPlayerListener替代WatchLive.WatchEventCallback
  2. 关于分辨率类型变换:由原有int类型更改为String 类型; 原默认DPI_DEFAULT更改为DPI_SAME (原画);

点播部分

  1. 使用VHPlayerListener替代WatchPlayback.WatchEventCallback
  2. setScaleType 参数改为使用 Constants.VideoMode.DRAW_MODE_NONE

文档变更

发直播部分

SaaS文档 发起直播

准备工作

(3)设置默认发起布局(默认集成滤镜版)

原有设置发起布局需修改为:

<com.vhall.push.VHVideoCaptureView
android:id="@+id/cameraview"
android:layout_width="match_parent"
android:layout_height="match_parent" />

(4)发直播必需调用方法 将不再需要

发直播

Broadcast 实例:

    private Broadcast getBroadcast() {
        if (broadcast == null) {
        //原有视频相关配置改由VHLivePushConfig 进行配置
            VHLivePushConfig config = new VHLivePushConfig(param.pixel_type);
            //可不设置
           config.videoFrameRate = param.videoFrameRate;//帧率
           config.videoBitrate = param.videoBitrate;//码率
            Broadcast.Builder builder = new Broadcast.Builder()
                    .cameraView(mView.getCameraView())
                    .config(config)
                    .callback(new BroadcastEventCallback())// 直播事件回调
                    .chatCallback(new ChatCallback());//使用聊天,加上这个回调
            broadcast = builder.build();
        }

        return broadcast;
    }
直播回调
private class BroadcastEventCallback implements VHPlayerListener {

        @Override
        public void onStateChanged(Constants.State state) {
            switch (state) {
                case START:/** 直播开始*/
                    
                    break;
                case STOP:/** 直播停止*/
                    
                    break;
            }
        }

        @Override
        public void onEvent(int eventCode, String eventMsg) {
            switch (eventCode) {
                case Constants.Event.EVENT_UPLOAD_SPEED:/** 推流速度 eventMsg kbps*/
                    break;
                case Constants.Event.EVENT_NETWORK_UNOBS:/** 网络通畅 */
                    break;
                case Constants.Event.EVENT_NETWORK_OBS:/** 网络异常*/
                    break;
            }
        }

        @Override
        public void onError(int errorCode, int innerErrorCode, String errorMsg) {
            /**直播时发生错误回调,查看错误信息errorCode 错误码,innerErrorCode 内部错误码(一般为0),errorMsg 错误信息*/
        }
    }  
状态码
状态码 描叙
START 直播开始
STOP 直播停止

看直播部分

观看事件回调
    /**
     * 观看过程中事件监听
     */
    private class WatchCallback implements VHPlayerListener {
        @Override
        public void onStateChanged(com.vhall.player.Constants.State state) {
            switch (state) {
                case START://开始播放(缓冲结束)
                    isWatching = true;
                    liveView.showLoading(false);
                    liveView.setPlayPicture(isWatching);
                    break;
                case BUFFER://缓冲中
                    if (isWatching) {
                        liveView.showLoading(true);
                    }
                    break;
                case STOP:
                    isWatching = false;
                    liveView.showLoading(false);
                    liveView.setPlayPicture(isWatching);
                    break;
            }
        }

        @Override
        public void onEvent(int event, String msg) {
            switch (event) {
                case com.vhall.player.Constants.Event.EVENT_DOWNLOAD_SPEED:
                    liveView.setDownSpeed("速率" + msg + "/kbps");
                    break;
                case com.vhall.player.Constants.Event.EVENT_DPI_CHANGED:
                    //分辨率切换
                    Log.i(TAG, msg);
                    break;
                case com.vhall.player.Constants.Event.EVENT_DPI_LIST:
                    //支持的分辨率 msg
                    try {
                        JSONArray array = new JSONArray(msg);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                    break;
                case com.vhall.player.Constants.Event.EVENT_VIDEO_SIZE_CHANGED:
                    Log.i(TAG, msg);
                    break;
                case com.vhall.player.Constants.Event.EVENT_STREAM_START:
                	//发起端开始推流(主播开始推流业务处理)
                    
                    break;
                case com.vhall.player.Constants.Event.EVENT_STREAM_STOP:
                	//发起端停止推流(主播停止推流业务处理)
                    
                    break;
            }
        }

        @Override
        public void onError(int errorCode, int innerCode, String msg) {
            switch (errorCode) {
                case com.vhall.player.Constants.ErrorCode.ERROR_CONNECT:
                    /** 连接失败*/
                    break;
                default:
                    watchView.showToast(msg);
            }
        }
    }
状态码
状态码 描叙
START 开始播放
BUFFER 正在缓冲
STOP 停止播放

观看回放部分

观看回放移除exoPlayer封装,采用外部引用方式调用,需要额外添加依赖

api 'com.google.android.exoplayer:exoplayer-core:2.9.1'
api 'com.google.android.exoplayer:exoplayer-hls:2.9.1'
    private class WatchCallback implements VHPlayerListener {

        @Override
        public void onStateChanged(Constants.State state) {
            switch (state) {
                case IDLE://待机状态
                    break;
                case START://播放中
                    break;
                case BUFFER://缓冲中
                    break;
                case STOP://停止(等同PAUSE 可调用resume方法恢复播放)
                    break;
                case END://播放结束(内容播放结束,恢复时默认从初始位置开始)
                    break;
            }
        }

        @Override
        public void onEvent(int event, String msg) {
            switch (event) {
                case Constants.Event.EVENT_DPI_LIST:
                /** 服务器支持的视频分辨率列表*/

                    break;
                case Constants.Event.EVENT_DPI_CHANGED:
                /** 分辨率被切换为msg*/
                    break;
            }
        }

        @Override
        public void onError(int errorCode, int innerErrorCode, String msg) {
            switch (errorCode) {
                case Constants.ErrorCode.ERROR_INIT:
                /** 初始化错误*/

                    break;
                case Constants.ErrorCode.ERROR_INIT_FIRST:
                /** 未初始化*/

                    break;
            }
        }
    }

VideoScaleType 说明

Type 描述
Constants.VideoMode.DRAW_MODE_NONE 铺满全屏
Constants.VideoMode.DRAW_MODE_FIT 等比缩放居中
Constants.VideoMode.DRAW_MODE_FILL 等比拉伸居中
状态码
状态码 描叙
IDLE 待机(PREPARING)
START 开始播放(STATE_READY)
BUFFER 正在缓冲
STOP 停止播放(等同PAUSE 可调用resume方法恢复播放)
END 播放结束
错误码
错误码 描述
-260 未初始化视频信息
-261 初始化视频信息错误