Android EasyClient 云台控制开源流媒体摄像机EasyCamera
2016-07-05 22:55
459 查看
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进行控制。
我定义了两个枚举,枚举了控制类型(单步还是连续),控制动作(上下左右停等)。
在EasyPlayerActivity.java中增加4个按键, 分别为上下左右,并增加OnTouchListener接口,当按键按下时持续转动,释放按键时停止转动。
源码参见Github上EasyClient,地址:https://github.com/EasyDarwin/EasyClient
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
相关文章推荐
- [Android]数据保存及读取
- Android编码规范
- Android笔记--我所理解的观察者模式
- android genymotion模拟器怎么使用以及和google提供的模拟器性能对比
- android 初识mvp
- Android截屏机制浅析
- xUtils3的使用简单总结
- android native中崩溃的调试办法
- Android ViewPager使用
- android自定义相机
- java.io.FileNotFoundException on Android, open failed: ENOENT (No such file or directory)
- android studio svn配置
- android中的资源文件
- Android 工具包 xUtils
- 简明adb使用教程
- 将Activity转成View添加到view中
- Android中常用布局
- Android第二天布局笔记
- Android 四种方法写按钮点击事件
- android spinner控件详解