开放平台
首页平台概述
开发者
  • API文档
  • SDK
产品功能
  • 新手入门
  • 产品功能
常见问题
首页平台概述
开发者
  • API文档
  • SDK
产品功能
  • 新手入门
  • 产品功能
常见问题
  1. 版本更新说明
  • demo
  • JS SDK
    • 产品介绍
    • 快速接入
    • SDK 对接示例
    • 观看直播
    • 暖场视频
    • 房间消息说明
    • 互动连麦
    • 文档白板
    • 全局事件
    • 全局错误码
    • 版本更新记录
    • 互动工具
      • 互动-抽奖
      • 互动-礼物
      • 互动-签到
      • 互动-问卷
      • 互动-公告
      • 互动-商品
      • 互动-问答
      • 互动-推屏卡片
      • 互动-快问快答
      • 互动-聊天
      • 互动-优惠券
      • 互动-点赞
    • 直播间拓展功能
      • 资料下载
      • 观看限制验证
      • 观看协议
      • 回放章节
  • 点播SDK
    • 点播上传SDK
    • 更新记录
  • iOS SDK
    • 整体介绍
    • 快速接入
    • SDK 登录
    • 暖场视频
    • 视频轮询
    • 直播彩排
    • 高级美颜
    • 云导播
    • 观看协议
    • 文档白板演示
    • 聊天功能
    • 视频直播
      • 发起视频直播
      • 观看视频直播
    • 互动直播
      • 观众互动
      • 推流摄像头
      • 互动直播API
      • 主播发起互动直播
      • 嘉宾加入互动直播
    • 无延迟直播
      • 主播发起无延迟直播
      • 观众观看无延迟直播
    • 互动工具
      • 互动-抽奖
      • 互动-礼物
      • 互动-签到
      • 互动-问卷
      • 互动-章节打点
      • 互动-公告
      • 互动-商品
      • 互动-计时器
      • 互动-问答
      • 互动-推屏卡片
      • 互动-快问快答
      • 互动-优惠券
      • 互动-点赞
    • 直播间拓展能力
      • 直播间特色功能配置项
      • 文件下载
      • 修改角色昵称
      • 观看权限校验
      • 投屏
      • 虚拟人数
    • 观看回放
      • 观看回放
    • 防录屏
      • 跑马灯
    • 字段说明
      • 互动活动详情字段
      • 错误码说明
      • 常量定义
      • 活动详情字段说明
    • 版本更新说明
      • 版本更新信息
      • v2.3.0 到 v2.4.0 升级说明
      • v3.0.1 到 v3.2.0 升级说明
      • V2.9.0到v3.0.1升级说明
      • v6.3.0
      • v6.2.1
      • v3.2.0 到 v4.0.1
      • v2.7.0 到 v2.8.0、v2.9.0 升级说明
      • 6.5.0
      • v5.0.x 到 v6.0.0
      • v6.4.0
  • Adroid SDK
    • 整体介绍
    • 快速接入
    • SDK登录
    • 暖场视频
    • 视频轮巡功能
    • 直播彩排
    • 高级美颜
    • 云导播功能
    • 观看协议
    • 文档白板
    • 聊天功能
    • 房间消息
    • 信息采集说明
    • 视频直播
      • 发起视频直播
      • 观看视频直播
    • 互动直播
      • 互动直播API
      • 主播发起互动直播
      • 嘉宾加入互动直播
      • 观众观看互动直播
    • 无延迟直播
      • 主播发起无延迟直播
      • 观众观看无延迟直播
    • 互动工具
      • 互动-抽奖
      • 互动-礼物
      • 互动-签到
      • 互动-问卷
      • 互动-公告
      • 互动-商品
      • 互动-计时器
      • 互动-问答
      • 互动-推屏卡片
      • 互动-快问快答
      • 互动-优惠券
      • 互动-点赞
    • 直播拓展功能
      • 修改角色名称
      • 文件下载
      • 投屏演示
      • 虚拟人数
      • 观看权限校验
      • 直播间特色功能配置项
    • 观看回放
      • 观看回放/点播
    • 防录屏
      • 直播水印
      • 跑马灯
    • 字段说明
      • 房间消息字段说明
      • 聊天消息字段说明
      • 活动详情字段说明
    • 版本更新说明
      • 更新记录
      • v6.4.0
      • v6.3.0
      • v6.2.3
      • v6.2.1
      • v6.2.0
      • v6.1.0
      • v6.0.0
      • v5.0.0
      • v4.1.0
      • v4.0.0
      • v3.3.0
  • APP嵌入支付说明
    • 支付调起说明
    • Scheme规则说明
  1. 版本更新说明

v3.3.0

3.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初始化视频信息错误
修改于 2025-05-27 11:08:19
上一页
v4.0.0
下一页
支付调起说明
Built with