这篇文章,就Android平台上如何集成乐橙SDK进行讲解。

前言:
乐橙是浙江大华技术股份有限公司旗下的一家专注视频智能硬件,视频云和视频智能技术,为视频应用提供云视频能力的服务商。
我们接入乐橙设备,实现实时预览、远程回放、抓图、切换画质等功能。

类似于萤石的处理方式,我们也需要在乐橙开放平台注册应用,得到应用配置,并且我们也需要获取AccessToken,关于这些东西,大家可移步乐橙开放平台。

下面我们直接上代码:

/*** Created by Administrator on 2017/11/29.* 封装的乐橙播放库*/
public class PlayerLeChange {private static final String TAG = "LeChange";private Handler handler;public LCOpenSDK_PlayWindow lcOpenSDK_playWindow;  //播放窗口public PlayerLeChange(Context context, ViewGroup viewGroup, Handler handler) {LCOpenSDK_Api.setHost("openapi.lechange.cn:443");  //设置乐橙服务地址lcOpenSDK_playWindow = new LCOpenSDK_PlayWindow();lcOpenSDK_playWindow.initPlayWindow(context, viewGroup, 0);  //初始化播放功能,父窗口绑定到LCOpenSDK_playWindow的实例上this.handler = handler;}/*** 实时预览* @param token* @param deviceId* @param encryptKey* @param channelNo* @param quality*/public void live(String token, String deviceId, String encryptKey, int channelNo, int quality) {lcOpenSDK_playWindow.playRtspReal(token, deviceId, encryptKey, channelNo, quality);/*** 为播放窗口设置监听*/lcOpenSDK_playWindow.setWindowListener(new LCOpenSDK_EventListener() {@Overridepublic void onPlayerResult(int index, String code, int resultSource) {super.onPlayerResult(index, code, resultSource);if (resultSource == 0 && "4".equals(code)) {messageFeedback(null);} else {messageFeedback("实时预览失败");}}});}/*** 远程回放* @param token* @param deviceId* @param encryptKey* @param channelNo* @param beginTime* @param endTime*/public void playback(String token, String deviceId, String encryptKey, int channelNo, long beginTime, long endTime) {lcOpenSDK_playWindow.playRtspPlaybackByUtcTime(token, deviceId, encryptKey, channelNo, beginTime, endTime);lcOpenSDK_playWindow.setWindowListener(new LCOpenSDK_EventListener() {@Overridepublic void onPlayerResult(int index, String code, int resultSource) {super.onPlayerResult(index, code, resultSource);if (resultSource == 0 && "4".equals(code)) {messageFeedback(null);} else {messageFeedback("远程回放失败");}}});}/*** 停止实时预览*/public void stopLive() {lcOpenSDK_playWindow.stopRtspReal();}/*** 停止远程回放*/public void stopPlayback() {lcOpenSDK_playWindow.stopRtspPlayback();}/*** 查询录像段文件数量* @param token* @param deviceId* @param channelNo* @param beginTime* @param endTime*/public int queryRecordNum(String token, String deviceId, int channelNo, String beginTime, String endTime) {QueryLocalRecordNum req = new QueryLocalRecordNum();req.data.token = token;req.data.deviceId = deviceId;req.data.channelId = channelNo + "";req.data.beginTime = beginTime;req.data.endTime = endTime;RetObject retObject = request(req, 60 * 1000);QueryLocalRecordNum.Response resp = (QueryLocalRecordNum.Response) retObject.resp;if (retObject.mErrorCode != 0) {  //查询录像失败return -1;} else {if (resp.data == null) {  //录像数据为空return 0;} else {return resp.data.recordNum;}}}/*** 获取录像段文件* @param token* @param deviceId* @param channelNo* @param beginTime* @param endTime* @param queryRange* @return*/public List<LeChangeRecordInfo> getRecordFile(String token, String deviceId, int channelNo, String beginTime, String endTime, String queryRange) {List<LeChangeRecordInfo> recordInfoList = new ArrayList<LeChangeRecordInfo>();QueryLocalRecords req = new QueryLocalRecords();req.data.token = token;req.data.deviceId = deviceId;req.data.channelId = channelNo + "";req.data.beginTime = beginTime;req.data.endTime = endTime;req.data.queryRange = queryRange;RetObject retObject = request(req);QueryLocalRecords.Response resp = (QueryLocalRecords.Response) retObject.resp;if (retObject.mErrorCode == 0 && resp.data != null && resp.data.records != null) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");for (QueryLocalRecords.ResponseData.RecordsElement element:resp.data.records) {LeChangeRecordInfo recordInfo = new LeChangeRecordInfo();try {recordInfo.setStartTime(sdf.parse(element.beginTime).getTime());recordInfo.setEndTime(sdf.parse(element.endTime).getTime());recordInfoList.add(recordInfo);} catch (ParseException e) {e.printStackTrace();}}}return recordInfoList;}public static class RetObject {public int mErrorCode = 0;  //错误码表示符 -1:返回体为null,0:成功,1:http错误,2:业务错误public String mMsg;public Object resp;}/*** 发送网络请求,并对请求结果的错误码进行处理* @param req* @return*/private RetObject request(BaseRequest req) {return request(req, 5 * 1000);}/*** 发送网络请求,并对请求结果的错误码进行处理* @param req* @param timeout* @return*/private RetObject request(BaseRequest req, int timeout) {RetObject retObject = new RetObject();BaseResponse t = null;try {t = LCOpenSDK_Api.request(req, timeout);  //openAPI请求方法if (t.getCode() == 200) {  //请求成功if (!t.getApiRetCode().equals("0")) {  //业务错误retObject.mErrorCode = 2;retObject.mMsg = "业务错误码:" + t.getApiRetCode() + ",错误消息:"+ t.getApiRetMsg();LogUtils.i(TAG, "retObject.mMsg:" + retObject.mMsg);}} else {retObject.mErrorCode = 1;  //http错误retObject.mMsg = "HTTP错误码:" + t.getCode() + ",错误消息:" + t.getDesc();LogUtils.i(TAG, "retObject.mMsg:" + retObject.mMsg);}} catch (Exception e) {e.printStackTrace();retObject.mErrorCode = -1000;retObject.mMsg = "内部错误码 : -1000, 错误消息 :" + e.getMessage();LogUtils.i(TAG, "retObject.mMsg:" + retObject.mMsg);}retObject.resp = t;return retObject;}private void messageFeedback(String msg) {Message message = Message.obtain();message.obj = msg;handler.sendMessage(message);}
}
public class LeChangeRecordInfo {public enum RecordType{DeviceLocal,         // 设备本地录像PrivateCloud,          // 私有云PublicCloud,          // 公有云}public enum RecordEventType{All,         // 所有录像Manual,          // 手动录像Event,           // 事件录像}private String id = UUID.randomUUID().toString();private RecordType type;      // 录像类型private float fileLength;        // 文件长度private float downLength = -1;  // 已下载长度private long startTime;         // 开始时间private long endTime;            // 结束时间private String deviceId;         //设备IDprivate String deviceKey;private String backgroudImgUrl;  // 录像文件Urlprivate String chnlUuid;      // 通道的uuidprivate RecordEventType eventType;    // 事件类型private long recordID;           //录像IDprivate String recordPath;        //录像ID(设备录像)public String getDeviceId() {return deviceId;}public void setDeviceId(String deviceId) {this.deviceId = deviceId;}public String getDeviceKey() {return deviceKey;}public void setDeviceKey(String deviceKey) {this.deviceKey = deviceKey;}public RecordType getType() {return type;}public void setType(RecordType type) {this.type = type;}public long getStartTime() {return startTime;}public float getFileLength() {return fileLength;}public void setFileLength(float fileLength) {this.fileLength = fileLength;}public float getDownLength() {return downLength;}public void setDownLength(float downLength) {this.downLength = downLength;}public void setStartTime(long startTime) {this.startTime = startTime;}public long getEndTime() {return endTime;}public void setEndTime(long endTime) {this.endTime = endTime;}public String getBackgroudImgUrl() {return backgroudImgUrl;}public void setBackgroudImgUrl(String backgroudImgUrl) {this.backgroudImgUrl = backgroudImgUrl;}public String getChnlUuid() {return chnlUuid;}public void setChnlUuid(String chnlUuid) {this.chnlUuid = chnlUuid;}public RecordEventType getEventType() {return eventType;}public void setEventType(RecordEventType eventType) {this.eventType = eventType;}public String getId() {return id;}public void setId(String id) {this.id = id;}public void setRecordID(long id) {this.recordID = id;}public long getRecordID() {return this.recordID;}public boolean isDownload() {return downLength >= 0;}public String getRecordPath() {return recordPath;}public void setRecordPath(String recordPath) {this.recordPath = recordPath;}
}

补充:
1、抓图:
直接调用LCOpenSDK_PlayWindow的snapShot(String filePath)方法就可以了。
2、切换画质:
直接调用LCOpenSDK_PlayWindow的playRtspReal(final String token, final String deviceID, final String encryptKey, final int channelID, final int bateMode)方法就可以了。
bateMode:0-高清;1-流畅。
注:只有实时预览支持切换画质,远程回放不支持。

Android平台上集成乐橙SDK相关推荐

  1. Android平台上集成海康SDK(二)

    Android平台上集成海康SDK 以上是我之前写的一篇Android平台上集成海康SDK的文章,其中对于Android平台上集成海康SDK.基于海康SDK进行二次开发基本上进行了详细地介绍. 这篇文 ...

  2. Android平台上集成大华SDK(二)

    Android平台上集成大华SDK 以上是我之前写的一篇Android平台上集成大华SDK的文章,其中对于Android平台上集成大华SDK.基于大华SDK进行二次开发基本上进行了详细地介绍. 这篇文 ...

  3. Android平台上集成大华SDK

    在项目中需要接入大华设备,因此我们集成了大华Android版本SDK.与海康SDK类似,它也是分为NetSDK和PlaySDK. 前者用于设备连接.网络通信:后者用于解码.播放. 在APP中,关于大华 ...

  4. Android平台上集成海康SDK

    在项目中需要接入海康设备,因此我们集成了海康Android版本SDK.它分为Device Network SDK和Player SDK.前者用于设备连接.网络通信:后者用于解码.播放. 在APP中,关 ...

  5. Android平台上集成萤石SDK

    这篇文章,就Android平台上如何集成萤石SDK进行讲解. 前言: 萤石是海康威视集团旗下的一家做视频云的公司.我们接入萤石设备,实现实时预览.远程回放.抓图.切换画质等功能. 关于具体如何接入,包 ...

  6. 在 Android* 平台上设置原生 OpenGL ES*

    Setting up Native OpenGL ES* on Android* Platforms final.docx BSD2.0.txt ParticleSystemNDK.zip READM ...

  7. Freeline - Android平台上的秒级编译方案

    Freeline 技术揭秘 Freeline是什么? Freeline是蚂蚁金服旗下一站式理财平台蚂蚁聚宝团队15年10月在Android平台上的量身定做的一个基于动态替换的编译方案,5月阿里集团内部 ...

  8. 奥比中光Gemini 3D双目结构光深度相机在Android平台上深度数据噪点非常多的问题

    相机:Gemini 3D双目结构光深度相机 环境:Android7.1 软件:SDK中的java demo下的depthforopenni2 问题: 在Android样例depthforopenni2 ...

  9. Gemini 3D双目结构光深度相机在Android平台上深度数据噪点非常多的问题

    相机:Gemini 3D双目结构光深度相机 环境:Android7.1 软件:SDK中的java demo下的depthforopenni2 问题: 在Android样例depthforopenni2 ...

最新文章

  1. NVIDIA 自动驾驶软件平台
  2. 编译原理四种文法的理解补充
  3. 管道符和作业控制、shell变量、环境变量配置文件
  4. centos6.7上使用nginx实现负载均衡!
  5. json 的简单应用
  6. mysql按特定的顺序_如何在MySQL中按特定顺序排列数据?
  7. Liunx安装gogs,mysql,jdk,tomcat等常用软件
  8. 怎样快速画出一个正方体_图形与几何---正方体
  9. c++多线程结束后需要释放_缓刑结束后是否需要继续坐牢?
  10. HTML网站即将上线临时托管源码
  11. SpringBoot入门之简单配置
  12. 将自己电脑的SSH key添加到GitHub上
  13. ie浏览器和谷歌浏览器控件不同_win7系统怎么重置ie浏览器 重置ie浏览器操作方法【详解】...
  14. python小甲鱼笔记_小甲鱼python笔记第4讲笔记(个人笔记)
  15. 罗技Logitech Options下载地址
  16. android地图旋转监听,ArcGIS for Android示例解析之地图旋转-----MapRotation
  17. matlab仿真动画,MATLAB图形及三维动画仿真设计.ppt
  18. 训练好的深度学习模型是怎么部署的?
  19. 使用MyQR制作二维码
  20. iOS开发技巧--iOS app 上架(2016年10月底)以及版本迭代上架

热门文章

  1. php Spreadsheet 导出,使用PhpSpreadsheet导出Excel文件
  2. 解读 | 《2019亚洲区块链产业报告》发布 ,附下载方式
  3. 10设置精美的免费网站后台管理系统模板
  4. PDF打印反应非常慢
  5. 不好意思辞职怎么办?
  6. Ubuntu下安装wicd网络管理工具
  7. Unity HybridRender 视锥体裁剪
  8. 把玩数据在内存中的存储
  9. 浅谈APS精益生产排程六大要素
  10. 去除龙卷风收音机软件界面下广告的方法