本文转自EasyDarwin开源团队成员kim的博客:http://blog.csdn.net/jinlong0603/article/details/51835308
EasyCamera是EasyDarwin开源团队开发的一款植入摄像机内部的嵌入式程序,功能是将普通IP Camera与EasyDarwin流媒体云平台(EasyCMS、EasyDarwin、EasyRMS等云服务器)对接,上传数据、接受指令控制,形成一套云摄像机方案。
EasyCamera目前已经提供了云台控制的功能,大家可以查阅EasyDarwin的协议文档。本文就介绍下Android客户端如何实现对EasyCamera的云台控制。
首先,简单介绍下Android客户端(EasyClient)如何与EasyCamera交互的。EasyClient并不直接与EasyCamera进行通信。EasyCamera开机时会将中心管理服务器(EasyCMS)发送注册请求、发送快照等,并且一直定时发送注册、快照进行保活。EasyCMS记录了所有当前在线的EasyCamera信息。当Android客户端EasyClient打开时,首先会向EasyCMS获取当前在线的EasyCamera列表。EasyClient请求某个Camera视频时,EasyCMS会通知对应的EasyCamera将视频流推送到指定的EasyDarwin服务器上,EasyClient从该EasyDarwin服务器上获取到实时视频流进行播放。
从EasyClient上云台控制EasyCamera,是EasyClient向EasyCMS服务器发送一个请求,内容包括设备序列号、动作等,参见协议文档4.9节。EasyCMS回复MSG_SC_PTZ_CONTROL_ACK给EasyClient后,会将请求内容发送给对应的EasyCamera进行控制。
我定义了两个枚举,枚举了控制类型(单步还是连续),控制动作(上下左右停等)。
- enum ControlType{
- TYPE_SINGLE("single"),
- TYPE_CONTINUE("continuous");
- private String des;
-
- private ControlType(String string) {
- des=string;
- }
-
- public String GetDes() {
- return des;
- }
- }
-
- enum ControlCmd{
- CMD_MOVESTOP("stop"),
- CMD_MOVEUP("up"),
- CMD_MOVEDOWN("down"),
- CMD_MOVELEFT("left"),
- CMD_MOVERIGHT("right"),
- CMD_ZOMEIN("zoomin"),
- CMD_ZOMEOUT("zoomout");
- private String des;
-
- private ControlCmd(String string) {
- des=string;
- }
-
- public String GetDes() {
- return des;
- }
- }
在EasyPlayerActivity.java中增加4个按键, 分别为上下左右,并增加OnTouchListener接口,当按键按下时持续转动,释放按键时停止转动。- @Override
- public boolean onTouch(View v, MotionEvent event) {
- if(TextUtils.isEmpty(mDevSerial)){
- return true;
- }
-
- switch (event.getAction()){
- case MotionEvent.ACTION_DOWN:
- switch (v.getId()){
- case R.id.btMoveUp:
- sendControlCommand(ControlCmd.CMD_MOVEUP, ControlType.TYPE_CONTINUE);
- break;
- case R.id.btMoveDown:
- sendControlCommand(ControlCmd.CMD_MOVEDOWN, ControlType.TYPE_CONTINUE);
- break;
- case R.id.btMoveLeft:
- sendControlCommand(ControlCmd.CMD_MOVELEFT, ControlType.TYPE_CONTINUE);
- break;
- case R.id.btMoveRight:
- sendControlCommand(ControlCmd.CMD_MOVERIGHT, ControlType.TYPE_CONTINUE);
- break;
- }
- break;
- case MotionEvent.ACTION_UP:
- case MotionEvent.ACTION_CANCEL:
- sendControlCommand(ControlCmd.CMD_MOVESTOP, ControlType.TYPE_CONTINUE);
- break;
- default:
- break;
- }
-
- return false;
- }
源码参见Github上EasyClient,地址:https://github.com/EasyDarwin/EasyClient
获取更多信息
邮件:support@easydarwin.org
WEB:www.EasyDarwin.org
Copyright © EasyDarwin.org 2012-2016

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术