乐橙云开发文档
控制台
更新日志
控制台
更新日志
快速入门
  • 开始使用
  • 核心概念
  • 开发指南
  • 设备能力与事件参考
  • API 参考
  • SDK 与工具
    • Android SDK
      • 安装与初始化
      • 功能集成
      • API 参考
      • 示例工程
      • 更新日志
      • 版本迁移
      • 隐私与合规
    • iOS SDK
    • 鸿蒙 SDK
    • PC SDK
    • 轻应用组件 ImouPlayer
    • 小程序插件与半屏小程序
    • 图片解密组件
    • 服务端示例与签名工具
    • Postman 集合
    • 资源下载
  • 行业方案
  • 平台与支持
本页目录
步骤
功能
工程结构
代码位置
设备添加组件
相关
相关参考

示例工程

示例工程

Android 标准化 Demo 基于 OpenSDK 组件,实现乐橙云开放平台音视频相关的核心功能。建议阅读 Demo 源代码,作为参考或移植到自己的项目,有助于快速集成。下载见 资源下载 的 Android Demo 行。

由于 Demo 没有后台 SaaS 服务,Demo 直接在客户端请求开放平台接口来获取数据以及其他操作。建议涉及调用乐橙开放平台 OpenAPI 的地方,由开发者后台 SaaS 去调用,再将数据返回给客户端 App,整体系统架构采用云云对接。调用接口需要 appId 和 appSecret。如果放在客户端代码中实现,客户端被反编译后,存在 appId 和 appSecret 被盗用的风险。

步骤

按本页后续各节操作。

功能

  • 管理员模式登录:获取 accessToken,作为接下来每个 API 接口和 SDK 方法的必传参数。
  • 获取设备列表:分别获取开放平台绑定和乐橙 App 绑定的设备。
  • 设备详情:设备解绑、布防设置、设备升级、网络配置等。
  • 实时预览:视频播放、语音对讲、抓图、本地录制等。
  • 录像回放:录像下载,云录像/设备录像回放、倍速播放等。
  • 设备添加已封装成单独模块,供直接使用。
技术术语说明
管理员模式使用在开放平台注册得到的 AppId 和 AppSecret 换取 accessToken,类似于账号登录的概念
设备列表获取通过开发者账号请求 设备查询 相关接口,从乐橙云开放平台获取开发者账号下的设备列表清单
实时预览、本地录制/抓图实时预览指在客户端获取设备的实时码流,并进行解码和显示。本地录制指在实时预览过程中,将预览流存储为本地视频文件,支持 MP4。本地抓图指在实时预览过程中,将当前预览画面存储为本地图片,图片为 JPG
设备录像回放在客户端上获取设备里的 SD 卡存储的录像文件流,并进行解码和显示
语音对讲客户端与设备进行对讲通话,目前支持双向语音对讲
云录像回放客户端获取设备存储在云端的录像,并进行解码和显示
动检开关设备检测到移动时是否产生报警消息和录像的开关
云台(PTZ)通过终端(如 App)控制操作设备
OpenApi客户端与乐橙平台交互的接口,RESTful API

工程结构

解压后的目录:

  • DeviceAddModule:设备添加模块
  • DeviceDetailModule:设备详情模块
  • MediaModule:媒体模块
  • MessageModule:消息模块
  • mobilecommon:公共模块
  • PlaybackModule:录像模块(与 settings.gradle 模块名一致)
  • thrid-zxing:设备添加模块的依赖模块,主要用于添加设备时相机扫码(读取设备上的二维码并解析)
  • usermodule:用户模块
  • app:Demo 源码,依赖 DeviceAddModule

代码位置

在获取管理员设备列表以及进行设备操作前,需要获取 accessToken(管理员 token)。获取 accessToken 的过程叫做管理员账号模拟登录,获取之后直接进入设备列表。com.mm.android.mobilecommon.openapi.TokenHelper.java 的 getToken 已实现该接口。

设备列表在 com.lechange.demo.ui.DeviceListActivity.java 的 deviceList。实时预览页见 DeviceOnlineMediaPlayActivityNew.java,支持横屏和竖屏,还包含对讲、云台、抓图/录制。设备号、通道号、播放码在获取设备详细列表时即可获取到;码流类型默认为高清码流,0 为高清码流,1 为标清码流。

云台见 DeviceInfoOpenApiManager.java 的 controlMovePTZ。购买云存储套餐后可以查看云录像,见同文件 getCloudRecords。设备拥有 TF 卡后可以查看设备录像,见 queryLocalRecords。Demo 会保存退出实时预览页面之前的最后一帧画面,保存在本地数据库和 SD 卡,作为设备列表页和预览页面的默认图片,见 DeviceLocalCacheManager.java 和 DeviceLocalCacheDatabase.java。

当设备程序有更新时,可通过 OpenAPI 给设备升级,见 DeviceInfoOpenApiManager.java 的 upgradeDevice。重命名见 modifyDeviceName,布防见 modifyDeviceAlarmStatus,解绑见 unBindDevice,本地存储见 getDeviceStoreInfo、deviceSdcardStatus,云存储见 setAllStorageStrategy。当设备在线时,可以查询设备当前连接的 Wi-Fi 以及周边 Wi-Fi,并切换 Wi-Fi,见 DeviceAddOpenApiManager.java 的 currentDeviceWifi、wifiAround、controlDeviceWifi。

录像播放页见 DeviceRecordPlayActivityNew.java。云录像包含播放/暂停、下载、倍速、抓图、录制;设备录像包含播放/暂停、抓图、录制。这些功能调用 SDK 方法。

设备添加组件

把 DeviceAddModule 导入工程:Android Studio 菜单 File → New → Import Module,选择 Demo 工程中 DeviceAddModule 所在路径,Finish 完成导入。

在自己工程 app 目录的 build 文件中:

//高版本Android Stduio
api project(':usermodule')
api project(':MediaModule')
api project(':PlaybackModule')
api project(':MessageModule')
api project(':DeviceDetailModule')
//或低版本Android Stduio
compile project(':usermodule')
compile project(':MediaModule')
compile project(':PlaybackModule')
compile project(':MessageModule')
compile project(':DeviceDetailModule')

若编译报 Manifest merger failed with multiple errors, see logs,在 AndroidManifest.xml 的 application 节点加入 tools:replace="android:allowBackup,android:label,android:supportsRtl"。

若 targetSdkVersion >= 29,在 application 节点加入 android:requestLegacyExternalStorage="true"。

<application
        android:allowBackup="false"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:requestLegacyExternalStorage="true"
        tools:replace="android:allowBackup,android:label,android:supportsRtl"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
  </application>

设备添加模块目前以源码形式提供。集成后如需混淆,keep 规则见本页上文「设备添加组件」依赖列表,或 标准化 Demo — 设备添加组件(与 Demo 工程 proguard-rules.pro 对齐)。

初始化设备添加模块之后再调用添加。init 会包含 LCOpenSDK_Api 的 setHost(),因此不必再次调用 setHost()。初始化失败(如获取 token 失败)会在异常里返回 Throwable。addDevice 须在 init 成功之后调用。

try {
    CommonParam commonParam = new CommonParam();
    //(必传) 传入开放平台的域名(含端口),国内一般为:https://openapi.lechange.cn:443,海外一般为:https://openapi.easy4ip.com:443
    commonParam.setEnvirment(CONST.Envirment.CHINA_PRO.url);
    //(必传) Android的Application对象
    commonParam.setContext(EnvGuideActivity.this.getApplication());
    //(必传) 应用Id(乐橙开放平台注册获取)
    commonParam.setAppId("请替换成自己的appId");
    // Demo 源码还会调用 setAppSecret。生产应用不要把 AppSecret 放进客户端或提交到仓库。
    // 由服务端持有 AppSecret,客户端只使用服务端下发的 accessToken 或播放地址。
    //(非必传) 用户唯一id,默认appId
    commonParam.setUserId("");
    LCDeviceEngine.newInstance().init(commonParam);
} catch (Throwable e) {
    // Demo 可简化;集成时请 log 或提示(常见为 token/网络失败)
}

try {
    LCDeviceEngine.newInstance().addDevice(this);
} catch (Exception e) {
    // 须在 init 成功之后调用;失败时排查权限与模块依赖
}

设备添加模块的 AndroidManifest.xml 已经默认开启乐橙 SDK 所需的全部权限,集成后无需再开启,具体权限见该模块中的 AndroidManifest.xml。LCDeviceEngine 的 init 包含 LCOpenSDK_Api.setHost,使用该模块后无需再次调用 setHost。

模块目前提供的源码不支持 AndroidX。若项目使用 AndroidX:方式一,按 Android 官方迁移指南 在 Android Studio 中迁移;方式二,将设备添加模块打包为 aar 后引入工程。

相关

  • 安装与初始化
  • 客户端 SDK 实时预览
  • 标准化 Demo

相关参考

  • 开发指南

商务合作:cloud_openteam@imou.com · 工单 · 获取帮助(公众号、小程序试用中心)

Copyright © 2015-2026 IMOU. All Rights Reserved. 浙ICP备16023676号

日志与解密
更新日志