Appearance
千里眼OpenSDK 安卓使用说明
一、工程配置
1、工程下新建文件夹:如LocalRepo,将QlyOpenSDK_v1.0.0.aar复制到LocalRepo下qlysdk目录下,新建build.gradle文件,把以下两行代码复制到build.gradle文件中:
configurations.maybeCreate("default")
artifacts.add("default", file('QlyOpenSDK_v1.0.0.aar'))
如图:
2、 工程项目的settings.gradle文件中添加:
include ':LocalRepo:qlysdk'
如图:
3、将千里眼OpenSdk导入到工程项目:
implementation project(':LocalRepo:qlysdk')
implementation 'com.google.code.gson:gson:2.8.9'
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.1'
如图:
二、SDK使用方法
初始化
1、初始化SDK
/**
* 初始化SDK
*
* @param context 上下文
* @param appId 从开放平台申请的appId
* @param privateKey 从开放平台申请的密钥
*/
QlyOpenSdk.getInstance().init(context: Context, appId: String, privateKey: String)
2、设置开启调试模式
/**
* 设置开启调试模式
* 默认关闭
*
* @param debug true为开启调试模式,false为关闭调试模式
* 只有在调试模式下才会有日志输出
*/
QlyOpenSdk.getInstance().setDebug(debug: Boolean)
3、打印日志
QlyOpenSdk.getInstance().setLogCallback(callback: LogCallback)
登录
1、设置开放平台鉴权token
/**
* 设置开发平台的token
*/
QlyOpenSdk.getInstance().setOpenPlatformToken(token: String)
三、视频直播
开启会话
1、直播前需要建立链接
/**
* 连接设备
* @param context 上下文
* @param deviceId 设备ID
* @param callback 连接设备回调
*/
QlyOpenSdk.getInstance().connect(context: Context, deviceId: String, callback: NetCallBack<BaseResponse<String>>)
直播
1、播放器配置及播放
val mPlayer= QlyOpenSdkPlayer(context, deviceId)
mPlayer.setMediaCodecEnabled(true) //设置是否硬解,默认true
mPlayer.setOnPlayerListener(object : OnPlayerListener {
override fun onStateChanged(state: Int, code: Int) {
}
override fun onVideoSizeChanged(width: Int, height: Int) {
}
override fun onPlaybackComplete() {
}
})
View view = mPlayer.getView(); //获取播放界面,把此View添加到显示层级中
mPlayer.prepare()
mPlayer.start()
// 播放器状态监听回调说明
/**
* 当播放器状态发生变化,通过此方法回调,具体状态如下:
* {@link PlayStatus#STATE_ERROR}
* {@link PlayStatus#STATE_IDLE}
* {@link PlayStatus#STATE_PREPARING}
* {@link PlayStatus#STATE_PREPARED}
* {@link PlayStatus#STATE_BUFFERING}
* {@link PlayStatus#STATE_BUFFERED}
* {@link PlayStatus#STATE_PLAYING}
* {@link PlayStatus#STATE_PAUSED}
* {@link PlayStatus#STATE_STOPED}
* {@link PlayStatus#STATE_COMPLETED}
*
* @param state 状态值
* @param code 错误码,默认-1
*/
fun onStateChanged(@PlayStatus state: Int, code: Int)
/**
* 当视频开始播放时回调视频真实尺寸
*
* @param width 宽
* @param height 高
*/
fun onVideoSizeChanged(width: Int, height: Int)
/**
* 播放完成
*/
fun onPlaybackComplete()
2、暂停播放
mPlayer.pause()
3、恢复播放
mPlayer.resume()
4、语音通话
/**
* 开始通话
* @param isDuplexTalk 是否是双工通话
*
*/
mPlayer.startAudio(isDuplexTalk: Boolean)
// 注册通话状态监听器
mPlayer.setOnOnAudioCallListener(object : OnAudioCallListener {
override fun onAudioStateChanged(state: Int) {
}
})
// 结束通话
mPlayer.stopAudio()
// 通话状态监听器说明
/**
* {@link AudioState#AUDIO_STATE_AVAILABLE} 可进行通话
* {@link AudioState#AUDIO_STATE_UNAVAILABLE} 不可进行通话
* {@link AudioState#AUDIO_STATE_ERROR_BUSY} 别人正在通话导致断开
* {@link AudioState#AUDIO_STATE_ERROR_STOP} 通话异常断开
*
* @param state 状态
*/
fun onAudioStateChanged(@AudioState state: Int)
5、释放播放器
mPlayer.release()
6、倍速播放(目前支持 "0.5", "1", "2", "4", "8", "16", "32")
mPlayer.setPlaySpeed(float speed)
7、播放器静音
mPlayer.setMute(boolean mute)
8、获取当前播放时间
mPlayer.getCurrentTime()
9、切换为直播
mPlayer.switchToLive()
10、重新开始
mPlayer.restart()
11、设置告警信息
/**
*
* @param TimeLineEventBean event 告警视频对象
*/
mPlayer.setEventInfo(event);
断开会话
1、在完成对摄像头操作后需要断开会话
QlyOpenSdk.getInstance().disconnect()
四、视频回看
说明:直播和回放互相切换无需重新初始化播放器, 直接进行seek**,回放部分初始化与释放阶段与直播类似,这一节只概述回放相关的细节,详细示例参见:
1、获取云存储回放片段
/**
* 获取云存储回放数据列表
*
* @param deviceId 设备id
* @param startTime 开始时间
* @param endTime 结束时间
* @param callback 回调接口
*/
QlyOpenSdk.getInstance().getTimelineSectionList(
deviceId: String,
startTime: Long,
endTime: Long,
callback: NetCallBack<BaseResponse<List<TimeLineSectionBean>>>,
)
2、获取SD卡回放片段
/**
* 获取SD卡回放数据列表
*
* @param deviceId 设备id
* @param startTime 开始时间
* @param endTime 结束时间
* @param callback 回调接口
*/
QlyOpenSdk.getInstance().getSdcardTimelineSectionList(
deviceId: String,
startTime: Long,
endTime: Long,
callback: NetCallBack<BaseResponse<List<TimeLineSectionBean>>>,
)
// TimeLineSectionBean说明如下:
public class TimeLineSectionBean implements Serializable {
private String videoId;
private long startTime;
private long endTime;
}
3、设置回放
在选择了某个时间点后调用如下方法进行播放:
/**
* 注意需要有数据的回放片段才能回放
* @param time 回放位置时间戳
*/
mPlayer.seek(time: Long)
设置回放类型(本地、云存储):
/**
* @param time 回放位置时间戳
* @param type 设置回放类型(本地、云存储)
* {@link StorageType.CLOUD_STORAGE}
* {@link StorageType.SD_CARE_STORAGE}
*/
mPlayer.seek(time: Long, @StorageType type: Int)
回放指定时间段:
/**
* 指定播放时间段
* @param startTime 指定开始时间
* @param endTime 当前只支持传-1
*/
fun start(startTime: Long, endTime: Long)
4、实时预览
mPlayer.querySectionThumbnail(
thumbnailBean: SectionThumbnailBean,
callback: NetCallBack<BaseResponse<SectionThumbnail>>,
)
SectionThumbnailBean说明如下:
public class SectionThumbnailBean {
private long time; // 获取缩略图的时间戳
private String videoId; // 视频ID
private long startTime; // 视频开始时间
private long endTime; // 视频结束时间
}
五、视频告警
1、获取告警视频列表
/**
* 获取告警事件列表
* 分页说明:上一次分页的最后一条数据的开始时间,
* 作为下一次分页的结束时间
*
* @param deviceId 设备id
* @param startTime 开始时间
* @param endTime 结束时间
* @param isPaging 是否分页
* @param isCancel 是否取消上次请求
* @param callback 回调接口
*/
QlyOpenSdk.getInstance().getEventList(
deviceId: String,
startTime: Long,
endTime: Long,
isPaging: Boolean,
isCancel: Boolean,
callback: NetCallBack<BaseResponse<List<TimeLineEventBean>>>,
)
2、TimeLineEventBean 说明如下
public class TimeLineEventBean implements Serializable {
private String eventId; // 事件id
private long startTime; // 开始时间
private long endTime; // 结束时间
private String thumbnail; // 缩略图
private String playAddress; // 播放地址
private String videoId; // 视频ID
private boolean isServerEvent; // 是否有套餐
private int alarmType; //告警类型 通过个getEventType()获取
}
3、TimeLineEventBean 中有一个EventType的枚举,具体如下
public enum EventType {
Motion,//动作
Sound,//声音
Face,//人脸
PeopleDetection,//人型检测
PIR,//有人经过
ModeLive,//门铃
ManualRecord,//门铃拒接
ManualDoorbellHasBeenRead,//门铃已接听
DoorbellUnread,//门铃未接听
VideoMsg,//视频留言
VideocLip,//视频剪辑
VideoPic,//视频拍照
VideoCall,//视频电话
EventWander,//有人逗留
ForceDestroy,//暴力拆卸 强拆告警
PrivateFR,//识别到某个人而没有录制的时间
ManuelTurnOff,//手动关闭
ScheduleTurnOff,//计划关闭
SelfDelete,//被删除掉的时间段
Upgrading,//Camera在升级的时候停止录制的时间段
ModePir,//人体检测触发摄像机录制事件
DoorWindow,//门磁打开触发摄像机录制事件
OtherSensor,//其他传感器触发的摄像机录制事件
sensorTypeEnd,//传感器类型
BatteryMode,//强制拆迁的警告
NormalSound,//盘旋报警
ModeCall,//门铃按键
Unknown
}
4、播放告警视频
val mPlayer= QlyOpenSdkPlayer(context, deviceId)
mPlayer.setMediaCodecEnabled(true) //设置是否硬解,默认true
mPlayer.setPlayerType(VNPlayer.PLAYER_TYPE_NORMAL);
mPlayer.setEventInfo(timeLineEvent); // 把需要播放的事件数据设置到播放器中
mPlayer.prepare();
mPlayer.start();
六、设备能力
1、获取设备能力集合
/**
* 获取设备能力集
*/
QlyOpenSdk.getInstance().getDeviceAbility(
deviceId: String,
callback: NetCallBack<BaseResponse<CameraAbility>>,
)
2、获取设备信息
/**
* 获取设备信息
*/
QlyOpenSdk.getInstance().getSettings(
deviceId: String,
callback: NetCallBack<BaseResponse<List<CameraSettingInfo>>>,
)
七、设备能力
1、云台控制
/**
* 对设备进行上下左右方向的控制
* @param deviceId 设备id
* @param type 类型
* {@link OpenPTZType#TurnOnce} 转动一次
* {@link OpenPTZType#TurnContinue} 连续转动
* {@link OpenPTZType#StopTurn} 停止转动
* @param direct 如果类型为SetPosition则direct传null
* {@link OpenPTZDirect#TurnLeft}向左
* {@link OpenPTZDirect#TurnUp}向上
* {@link OpenPTZDirect#TurnRight}向右
* {@link OpenPTZDirect#TurnDown}向下
* @param position 具体位置信息
* @param callback 回调
*/
QlyOpenSdk.getInstance().setPTZPosition(
deviceId: String,
type: OpenPTZType,
direct: OpenPTZDirect?,
position: IntArray?,
callback: NetCallBack<BaseResponse<*>> )
2、旋转图像
/**
* 旋转图像180度
*/
QlyOpenSdk.getInstance().rotate(
deviceId: String,
@PlayerRotate imageRotateValue: Int,
callback: NetCallBack<BaseResponse<*>>,
)
3、高标清切换
/**
* 高标清切换
*/
QlyOpenSdk.getInstance().switchPlaybackQuality(
deviceId: String,
@PlayerHD hdVideoValue: Int,
callback: NetCallBack<BaseResponse<*>>,
)
八、重新配网
1、获取WIFI列表
/**
* 获取当前摄像机的wifi列表
*
*/
QlyOpenSdk.getInstance().getWiFiList(
deviceId: String,
callback: NetCallBack<BaseResponse<List<ICameraWifiInfo>>>,
)
AMODeviceWiFiInfo说明如下:
class TenantWifiInfo : ICameraWifiInfo, Serializable {
var ssid: String = "" //路由器SSID
var bssid: String = "" //路由器mac
var signal: String = "" // 信号强度,范围1~5
var key: String = ""// WIFI密码
var encryptionType: String = "" // 加密方式
var isConnected: Boolean = false // 是否是当前设备正在使用的Wi-Fi,true=是、false=否}
2、切换WIFI
/**
* 切换wifi连接
*/
QlyOpenSdk.getInstance().changeCameraWifi(
deviceId: String,
wifiName: String,
bssid: String,
encryption: String,
pass: String,
signal: Int,
callback: NetCallBack<BaseResponse<ICameraWifiInfo>>,
)
九、释放QlyOpenSDK
QlyOpenSdk.getInstance().unInit()