乐橙云开发文档
快速入门
  • 文档综述
  • 云直播开发指南
  • 轻应用开发指南
  • 移动应用开发指南
  • 桌面应用开发指南
  • 消息推送
  • 云转存
  • 国标GB28181设备接入
  • HTTP接口
  • 服务支持
前往官网
快速入门
  • 文档综述
  • 云直播开发指南
  • 轻应用开发指南
  • 移动应用开发指南
  • 桌面应用开发指南
  • 消息推送
  • 云转存
  • 国标GB28181设备接入
  • HTTP接口
  • 服务支持
前往官网
快速入门
  • 文档综述

  • 云直播开发指南

  • 轻应用开发指南

  • 小程序对接指南

  • 移动应用开发指南

    • 应用开发
    • Android

      • OpenSDK组件
      • 标准化demo
    • IOS

    • SDK隐私协议
    • 未成年人个人信息处理规则
  • 桌面应用开发指南

  • 消息推送

  • 云转存

  • 国标GB28181设备接入

  • IOT物模型

  • HTTP接口

  • 服务支持

  • 平台活动

本页目录
Android OpenSDK对接文档
1. OpenSDK安装
2. 工程配置
2.1 配置AndroidManifest
2.2 配置build.gradle
3. 设备添加功能
3.1 调用SDK接口无线添加
3.1.1 SmartConfig添加
3.1.2 SoftAp添加
3.2 集成LCDeviceAddModule
4. OpenSDK初始化
5. 设置OpenSDK日志级别
6. 播放功能
6.1 实时预览
6.2 设备录像回放
6.3 云录像回放
7. 语音对讲功能
8. 下载功能
8.1 设备本地录像下载
8.2 设备云录像下载
9. 设备数据解密

OpenSDK组件

Android OpenSDK对接文档

以Demo工程搭建为例(IDE为AndroidStudio,AS),为开发者介绍OpenSDK对接过程。

Android OpenSDK 资源下载链接

1. OpenSDK安装

  • 下载Android OpenSDK压缩包解压
  • 拷贝libs/LCOpenSDK.aar文件到自己工程对应的目录下。

添加完成后的AS工程结构如下如所示:

AS工程结构

2. 工程配置

2.1 配置AndroidManifest

在AndroidManifest.xml中需设置相关权限:

<!-- 基础权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 配网所需权限  -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<!-- 对讲所需权限  -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

注意:请务必设置相关的权限,否则可能导致某些失败:未开启语音权限将导致对讲失败;未开启读写权限导致录像下载失败,无线配网无声音且配网失败等。

2.2 配置build.gradle

在AS工程的app的build.gradle文件中可根据需要选择兼容的架构:

android {
    …
    defaultConfig {
       …
        ndk{
            abiFilters "armeabi","arm64-v8a"//开发者根据实际情况选择要兼容的架构
        }
    }
}

3. 设备添加功能

设备添加是指先给设备配网,然后再将设备绑定到当前账号下的过程。

SDK目前支持的配网方式有:无线配网和Soft AP配网两种(有线不需要配网)。

由于无线添加流程比较复杂,为方便开发者灵活自由的实现设备添加的功能,我们提供两种添加设备的方案:一是直接调用SDK提供的接口,由开发者自己实现设备添加功能;二是使用demo中封装好的设备添加模块,实现快速对接。

备注:

未被绑定的设备添加说明:

1、配网前需明晰当前设备所支持的配网类型,然后选择相应的配网方式。

2、对于无线设备,需要用无线配对功能传递设备Wifi的密码,设备上线后方可添加。

3、对于支持软AP方式添加的设备(设备有热点),需要使用软AP配对功能。

4、对于有线,连上网线后直接查询状态在线即可添加(无配网过程,但网线必须能连接到外网)。

下面分别介绍两类方案的对接流程:

3.1 调用SDK接口无线添加

3.1.1 SmartConfig添加

设备添加步骤:

  • 开发者获取设备S/N等信息:通过扫描设备底部标签,或者手动输入

  • 调用unBindDeviceInfo接口查询设备支持的配网方式和绑定状态

  • 检查设备是否已被绑定

  • 判断当前设备所支持的配网类型是否为smartConfig

  • 开始无线配网并在局域网内搜索设备初始化信息

  • 搜索到设备后停止配网,停止搜索设备

  • 初始化设备(设备无安全码时需要通过sdk初始化)

  • 检查设备是否在线和当前能力集

  • 绑定设备

设备添加流程1

3.1.2 SoftAp添加

设备添加步骤:

  • 开发者获取设备S/N等信息:通过扫描设备底部标签,或者手动输入

  • 调用unBindDeviceInfo接口查询设备支持的配网方式和绑定状态

  • 检查设备是否已被绑定

  • 判断当前设备所支持的配网类型是否为SoftAP

  • 局域网搜索设备初始化信息:如搜索到设备信息,进入配网绑定流程

  • 开始SoftAp配网

  • 检查设备是否在线和当前能力集

  • 绑定设备

设备添加流程2

3.2 集成LCDeviceAddModule

设备添加步骤:

  • 导入设备添加组件,参考Android标准化Demo说明文档

  • 布局文件中添加用于触发设备添加的控件

<TextView
    android:id="@+id/tv_add"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />
  • 初始化设备添加模块
try {
		//初始化参数
         CommonParam commonParam = new CommonParam();
         commonParam.setEnvirment(CONST.Envirment.CHINA_PRO.url);
         commonParam.setContext(MainActivity.this.getApplication());
         commonParam.setAppId("…");//开发者自己的appid
         commonParam.setAppSecret("…");//开发者自己的appsecret
		//初始化添加模块
         LCDeviceEngine.newInstance().init(commonParam);
     } catch (Throwable throwable) {
         throwable.printStackTrace();
     }
     findViewById(R.id.tv_add).setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
             try {
			   //调用设备添加接口
                 LCDeviceEngine.newInstance().addDevice(MainActivity.this);
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }
     });

4. OpenSDK初始化

LCOpenSDK_Api是SDK内部与开放平台进行rest交互的封装类,应作为第一个调用的接口,在调用其他接口前进行初始化和设置参数。

初始化流程如下:

OpenSDK初始化

示例代码如下:

//初始化LCOpenSDK_Api
String token = "";//开发者自己去平台请求accessToken
String host = "openapi.lechange.cn:443";//host无需带协议类型

InitParams initParams = new InitParams(this, host, token);

try {
      int iRet = LCOpenSDK_Api.initOpenApi(initParams);
} catch (Throwable throwable) {
      throwable.printStackTrace();
}

备注:OpenSDK初始化需要开发者先自行向开放平台获取Token:获取管理员token 或者 获取子用户token

5. 设置OpenSDK日志级别

  • 通过调用LCOpenSDK_Utils.enableLogPrint()来开启或者关闭SDK内部日志打印

  • 通过调用LCOpenSDK_Util.setLogLevel()来设置SDK日志级别:0:fatal 1:error 2:warning 3:info 4:debug

备注:在排查一些SDK内部问题时可以调整SDK日志级别完成问题复现与日志抓取,方便后续的问题定位和分析

6. 播放功能

SDK支持的播放类型主要有:实时预览、设备录像回放、云录像回放,都需要在使用SDK播放功能前,在布局文件中创建一个播放父窗口:

<!--  播放窗口容器 -->
<FrameLayout
    android:id="@+id/live_window"
    android:layout_width="match_parent"
    android:layout_height="200dp">
    <!-- 渲染内容 -->
    <FrameLayout
        android:id="@+id/live_window_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    </FrameLayout>

备注:SDK里完成播放功能的类采用继承FrameLayout的方式实现,所以需要一个父窗口容器。

初始化播放父窗口,计算出渲染内容FrameLayout的高度:

//初始化布局
FrameLayout fr_window = findViewById(R.id.live_window);
FrameLayout getFr_window_content = findViewById(R.id.live_window_content);
//以9:16的比例计算出fr_window的高度
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(fr_window.getLayoutParams());
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
layoutParams.width =metrics.widthPixels;//屏幕宽度
layoutParams.height = metrics.heightPixels*9/16;
layoutParams.setMargins(0, 0, 0, 0);
fr_window.setLayoutParams(layoutParams);

6.1 实时预览

实时预览的主要步骤有:

  • 创建布局并初始化
  • 初始化播放类LCOpenSDK_PlayRealWindow
  • 给LCOpenSDK_ PlayRealWindow类添加事件监听和手势监听
  • 获取播放参数playToken,非必须但是可以加速视频出流速度(开发者获取设备信息)
  • 开始/停止播放
  • 释放资源

预览流程为:

实时预览

示例代码:

//初始化playWindow
LCOpenSDK_PlayRealWindow playWindow= new LCOpenSDK_PlayRealWindow();
playWindow.initPlayWindow(this, (ViewGroup) findViewById(R.id.live_window_content), 0, false);
//开发者实现事件监听并将监听设给playWindow
LCOpenSDK_EventListener listener = new LCOpenSDK_EventListener(){...}//开发者实现事件监听回调
playWindow.setWindowListener(listener);
//开启收拾监听
playWindow.openTouchListener();
/**
 * 开始预览
 * 1、准备预览参数
 * 2、开启预览
 * 3、在LCOpenSDK_EventListener回调中处理预览结果
 * 4、停止预览
 * 5、释放资源
 */
LCOpenSDK_ParamReal paramReal = new LCOpenSDK_ParamReal()
playWindow.playRtspReal(paramReal);
playWindow.stopRtspReal(true);
playWindow.uninitPlayWindow();

6.2 设备录像回放

设备录像回放的主要步骤有:

  • 创建布局并初始化(参考2.6)
  • 初始化播放类LCOpenSDK_PlayBackWindow
  • 给LCOpenSDK_ PlayBackWindow类添加事件监听和收拾监听
  • 获取回放参数playToken,非必须但是可以加速视频出流速度(开发者获取设备录像信息)
  • 开始/停止回放
  • 释放资源

回放流程为:

本地录像

示例代码:

//初始化playwindow
LCOpenSDK_PlayBackWindow playWindow= new LCOpenSDK_PlayBackWindow();
playWindow.initPlayWindow(this, (ViewGroup) findViewById(R.id.live_window_content), 0, true);
LCOpenSDK_EventListener listener = new LCOpenSDK_EventListener(){...}//开发者实现事件监听回调
playWindow.setWindowListener(listener);
//开启收拾监听
playWindow.openTouchListener();
/**
 * 开始回放
 * 1、准备回放参数
 * 2、开启回放
 * 3、在LCOpenSDK_EventListener回调中处理回放结果
 * 4、停止回放
 * 5、释放资源
 */
LCOpenSDK_ParamDeviceRecord paramDeviceRecord = new LCOpenSDK_ParamDeviceRecord(...);//开发者从录像列表中获取
playWindow.playRtspPlayback(paramDeviceRecord);
playWindow.stopRtspPlayback(true);
playWindow.uninitPlayWindow();

6.3 云录像回放

云录像回放的主要步骤有:

  • 创建布局并初始化(参考2.6)
  • 初始化播放类LCOpenSDK_PlayBackWindow
  • 给LCOpenSDK_PlayBackWindow类添加事件监听和收拾监听
  • 获取回放参数playToken,非必须但是可以加速视频出流速度(开发者获取设备云录像信息)
  • 开始/停止回放
  • 释放资源

云录像回放流程为:

云录像

示例代码:

//初始化playwindow
LCOpenSDK_PlayBackWindow playWindow = new LCOpenSDK_PlayBackWindow();
playWindow.initPlayWindow(this, (ViewGroup) findViewById(R.id.live_window_content), 0, true);
//开发者实现事件监听并将监听设给playWindow
LCOpenSDK_EventListener listener = new LCOpenSDK_EventListener(){...}//开发者实现事件监听回调
playWindow.setWindowListener(listener);
//开启收拾监听
playWindow.openTouchListener();
/**
 * 开始回放
 * 1、准备回放参数
 * 2、开启回放
 * 3、在LCOpenSDK_EventListener回调中处理回放结果
 * 4、停止回放
 * 5、释放资源
 */
LCOpenSDK_ParamCloudRecord paramCloudRecord = new LCOpenSDK_ParamCloudRecord(...)//开发者从云录像列表中获取
playWindow.playCloud(paramCloudRecord);
playWindow.stopCloud(true);
playWindow.uninitPlayWindow();

备注:

1、播放窗口监听回调类很重要,是上层与底层的直接回调交互类。

2、LCOpenSDK_EventListener类请参考OpenSDK接口文档。

7. 语音对讲功能

OpenSDK目前的对讲需要在成功开启预览的情况下才能对讲,对讲功能的主要步骤如下:

  • 获取对讲参数

  • 判断当前设备是否有对讲能力(设备能力集包含AudioTalk或AudioTalkV1)

  • 为对讲设置监听

  • 开始对讲

  • 停止对讲

对讲流程为:

语音对讲

示例代码:

//关闭预览声音
playWindow.stopAudio();
//设置对讲监听
LCOpenSDK_Talk.setListener(new LCOpenSDK_TalkerListener());
//准备对讲参数(开发者获取当前正在预览的设备信息)
LCOpenSDK_ParamTalk paramTalk = new LCOpenSDK_ParamTalk(...);
//开始对讲
LCOpenSDK_Talk.playTalk(paramTalk);
//停止对讲
LCOpenSDK_Talk.stopTalk();
//释放对讲监听
LCOpenSDK_Talk.setListener(null);
//开启预览声音
playWindow.playAudio();

8. 下载功能

SDK支持的下载包括设备SD卡录像下载和云录像下载两种,下面分别介绍两种下载功能的流程。

8.1 设备本地录像下载

设备本地录像下载的主要步骤为:

  • 获取设备本地录像片段列表

  • 初始化设备本地录像下载参数

  • 设置下载监听

  • 开始下载

设备本地录像下载流程:

设备本地录像下载

示例代码:

//获取设备录像列表(开发者自己请求获取)
//queryLocalRecords 查询设备录像记录
//设置下载监听(开发者重写LCOpenSDK_DownloadListener类方法)
LCOpenSDK_Download.setListener(new LCOpenSDK_DownloadListener());
//开始下载(开发者准备下载参数)
LCOpenSDK_Download.startDownload(...);

8.2 设备云录像下载

设备云录像下载的主要步骤为:

  • 获取设备云录像片段列表

  • 初始化设备云录像下载参数

  • 设置下载监听

  • 开始下载

设备云录像下载流程:

设备云录像下载

示例代码:

//获取云录像列表(开发者自己请求获取)
//queryCloudRecords 查询云录像记录
//设置下载监听(开发者重写LCOpenSDK_DownloadListener类方法)
LCOpenSDK_Download.setListener(new LCOpenSDK_DownloadListener());
//开始下载(开发者准备下载参数)
LCOpenSDK_Download.startDownload(...);

9. 设备数据解密

目前设备告警缩略图和录像封面图默认是加密存储的,需要解密后才能正常打开展示:使用SDK的LCOpenSDK_Utils.decryptPic方法来对加密图片数据进行解密操作。

应用开发
标准化demo