1 概念说明
直播:直播的视频源是用户实时推送的。因此,用户停止推送后,播放端的画面也会随即停止,而且由于是实时直播,所以播放器在播直播的时候是没有进度条的。
2 接入准备
2.1 成为开发者
申请开通微吼云账号,提供用户资料,微吼服务人员在后台为用户开通平台账号,账号开通后,用户即可登录,成为一名开发者。
2.2 创建应用
登录微吼云平台后,控制台选择应用管理,进入应用管理页面点击创建应用,根据页面提示信息,完成应用创建。应用创建完成,您可以在控制台界面找到在应用管理界面您可以找到 AppID。
2.3 添加服务
应用创建完成后,默认开通直播服务,在直播服务下直播管理的【直播配置】页面查看AppID
2.4 SDK下载
3 工程配置
3.1 开发环境
- Android SDK Tools: android-sdk_22.0.|+
- minSdkVersion: 16
- targetSdkVersion: 22
- Android Studio
3.2 系统要求
- SDK 支持 在 Android 4.1(API 16)及以上系统上运行,但只有 ( Android 4.3) API 18 以上的系统才能开启硬件编码
3.3 接入流程
- 新建gradle工程
- 复制vhallframework1.0.jar到工程lab目录下
- 复制jnilibs文件夹内容到appjni目录下
3.4 库简介
- vhallframework1.0.jar:vhallsdk基础包,用户sdk基础通迅、全局配置、日志管理、权限控制等。
- socket.io 一款公共I/O库,基础通讯功能使用,目前使用截止文档编写之日最新稳定版
compile("io.socket:socket.io-client:0.9.0") {
exclude group: 'org.json', module: 'json'
}
3.5 配置权限
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.RECORD_VIDEO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
3.6 接口简介
3.6.1 VhallSDK初始化
appid为注册应用时配置的应用ID 初始化操作为SDK的入口,一切SDK功能都在初始化成功后才能使用,建议在应用application启动时调用
VhallSDK.getInstance().init(Context context, String appid);
3.6.2 SDK信息配置
1、配置用户ID
用户ID为客户平台用户唯一标识,建议在用户登录之后配置
VhallSDK.getInstance().setUserId(String userid);
2、配置日志显示
设置SDK日志显示(警告和错误级别日志必打印,此开关控制debug/info/verbose级别日志
VhallSDK.getInstance().setLogEnable(boolean enable);
3.6.3 获取SDK状态
SDK是否初始化成功并处于可用状态,初始化操作会校验appid对应当前包名和签名,请确保配置正确
VhallSDK.getInstance().isEnable();
3.6.4 加入频道
加入频道并接收频道信息,channelid表示当前频道号,如果是lss服务,房间号即为频道号
VhallSDK.getInstance().join(String channelid,Callback callback);
3.6.5 离开频道
VhallSDK.getInstance().leave(String channelid);
4 功能使用
4.1 获取roomID、access_token
4.2 VHLivePlayer
4.2.1 VHVideoPlayerView 获取View
通过FindViewById 获取View的实例,此View重要用于看直播,拉流的数据会直接渲染到此View上,lss服务内部实现的一个普通渲染方案。
<com.vhall.lss.play.impl.VHVideoPlayerView
android:id="@+id/player"
android:layout_width="match_parent"
android:layout_height="match_parent" />
4.2.2 构造VHLivePlayer
VHLivePlayer采用builder模式构造,也是观看直播的核心方法,更多构造参数,参见builder类具体内容
mPlayer = new VHLivePlayer.Builder().videoPlayer(mVideoPlayer).listener(new MyListener()).build();
4.2.3 VHLivePlayer的 Builder
IVHVideoPlayer/IVHAudioPlayer为视频、音频播放接口,用户可实现此接口来自定义视频渲染和音频播放。
Builder | 描述 |
---|---|
videoPlayer | 添加视频播放器 |
aideoPlayer | 添加音频播放器 |
listener | 添加监听 |
reconnectTimes | 重连次数 |
connectTimeout | 超时时间 |
bufferSeconds | 缓冲时间 |
4.3 开始观看
- roomId 推流房间id 可以通过调用 api 创建
- accessToken 可以通过调用 api 获得
void start(String roomId,String accessToken);
4.4 设置观看显示模式
调整观看的布局
显示模式 | 参数 |
---|---|
VHLivePushFormat.DRAW_MODE_ASPECTFILL | 将图像等比例铺满整个屏幕,多余部分裁剪掉,此模式下画面不会留黑边,但可能因为部分区域被裁剪而显示不全 |
VHLivePushFormat.DRAW_MODE_ASPECTFIT | 将图像等比例缩放,适配最长边,缩放后的宽和高都不会超过显示区域,居中显示,画面可能会留有黑边 |
VHLivePushFormat.DRAW_MODE_NONE | 默认 |
void setDrawMode(int mode);
4.5 设置观看清晰度
从 IVHLivePlayer.EVENT_DPI_LIST 获取当前地址可用的分辨率,确定可用的情况下在切换
清晰度 | 描述 |
---|---|
IVHLivePlayer.DPI_SD | 低清 |
IVHLivePlayer.DPI_HD | 高清 |
IVHLivePlayer.DPI_XHD | 超清 |
IVHLivePlayer.DPI_AUDIO | 纯音频 |
IVHLivePlayer.DPI_SAME | 原画 |
void.setDPI(dpi);
4.5 暂停观看/ 恢复观看
停止拉流,而云端的视频源还在不断地更新着 , 当重新恢复时,会从最新的时间点播放
void pause();
void resume();
4.6 结束观看
停止拉流,此时调用Stop()方法,不在继续拉流,播放器的实例还在,
void stop();
4.7 销毁
当调用release() 方法时,视频播放器和音频播放器被释放, 如果需要再次使用请重新初始化
void release();
5 事件处理
观看事件 | 描述 |
---|---|
IVHLivePlayer.EVENT_STATUS_STARTED | 拉流成功 |
IVHLivePlayer.EVENT_STATUS_STOPED | 拉流停止 |
IVHLivePlayer.EVENT_DPI_LIST | 可用的清晰度 |
IVHLivePlayer.EVENT_DPI_CHANGED | 清晰度改变 |
IVHLivePlayer.EVENT_DOWNLOAD_SPEED | 下载速度 |
IVHLivePlayer.EVENT_START_BUFFER | 开始缓冲 |
IVHLivePlayer.EVENT_STOP_BUFFER | 停止缓冲 |
IVHLivePlayer.EVENT_VIDEO_SIZE_CHANGED | 视频宽高发生改变 |
IVHLivePlayer.EVENT_STREAM_START | 发起端发起 |
IVHLivePlayer.EVENT_STREAM_STOP | 发起端停止 |
错误事件 | 描述 |
---|---|
IVHLivePlayer.ERROR_CONNECT | 连接错误 |