本文转自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进行控制。

我定义了两个枚举,枚举了控制类型(单步还是连续),控制动作(上下左右停等)。

[java] view plain copy
  1. enum ControlType{
  2. TYPE_SINGLE("single"),
  3. TYPE_CONTINUE("continuous");
  4. private String des;
  5. private ControlType(String string) {
  6. des=string;
  7. }
  8. public String GetDes() {
  9. return des;
  10. }
  11. }
  12. enum ControlCmd{
  13. CMD_MOVESTOP("stop"),
  14. CMD_MOVEUP("up"),
  15. CMD_MOVEDOWN("down"),
  16. CMD_MOVELEFT("left"),
  17. CMD_MOVERIGHT("right"),
  18. CMD_ZOMEIN("zoomin"),
  19. CMD_ZOMEOUT("zoomout");
  20. private String des;
  21. private ControlCmd(String string) {
  22. des=string;
  23. }
  24. public String GetDes() {
  25. return des;
  26. }
  27. }

在EasyPlayerActivity.java中增加4个按键, 分别为上下左右,并增加OnTouchListener接口,当按键按下时持续转动,释放按键时停止转动。

[java] view plain copy
  1. @Override
  2. public boolean onTouch(View v, MotionEvent event) {
  3. if(TextUtils.isEmpty(mDevSerial)){
  4. return true;
  5. }
  6. switch (event.getAction()){
  7. case MotionEvent.ACTION_DOWN:
  8. switch (v.getId()){
  9. case R.id.btMoveUp:
  10. sendControlCommand(ControlCmd.CMD_MOVEUP, ControlType.TYPE_CONTINUE);
  11. break;
  12. case R.id.btMoveDown:
  13. sendControlCommand(ControlCmd.CMD_MOVEDOWN, ControlType.TYPE_CONTINUE);
  14. break;
  15. case R.id.btMoveLeft:
  16. sendControlCommand(ControlCmd.CMD_MOVELEFT, ControlType.TYPE_CONTINUE);
  17. break;
  18. case R.id.btMoveRight:
  19. sendControlCommand(ControlCmd.CMD_MOVERIGHT, ControlType.TYPE_CONTINUE);
  20. break;
  21. }
  22. break;
  23. case MotionEvent.ACTION_UP:
  24. case MotionEvent.ACTION_CANCEL:
  25. sendControlCommand(ControlCmd.CMD_MOVESTOP, ControlType.TYPE_CONTINUE);
  26. break;
  27. default:
  28. break;
  29. }
  30. return false;
  31. }

源码参见Github上EasyClient,地址:https://github.com/EasyDarwin/EasyClient

获取更多信息

邮件:support@easydarwin.org

WEB:www.EasyDarwin.org

Copyright © EasyDarwin.org 2012-2016

开源流媒体客户端EasyClient手机端控制摄像机EasyCamera云台PTZ控制实现的更多相关文章

  1. EasyDarwin开源流媒体云平台之云台ptz控制设计与实现

    本文转自EasyDarwin开源团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/51912692 近日,EasyDarwin云平 ...

  2. js判断客户端是手机端还是PC端

    封装函数: function isPC() { var userAgentInfo = navigator.userAgent; var Agents = ["Android", ...

  3. [js开源组件开发]js手机端浮层控件,并有多种弹出小提示,兼容pc端浏览器

    js dialog组件,包含alert和confirm的实现 本组件所有的资源均在github上可以查看源代码 GitHub 本dialog的组件的例子请在这里查看 demo dialog js di ...

  4. C#校验手机端或客户端

    以下代码用来检查,客户端是手机端还是PC端 string strUserAgent = Request.UserAgent.ToString().ToLower(); bool isMobile = ...

  5. 自动PC端显示 手机端隐藏CSS代码判断实现

    实现场景描述: 有些内容部署在PC端但是有不适合在手机端显示(比如盒子过大,遮挡内容)或者手机端显示毫无意义等.我们可以使用下面的代码来实现:电脑端显示,手机端隐藏 实现方法: CSS控制判断 @me ...

  6. EasyDarwin开源流媒体云平台支持EasyCamera摄像机、EasyCamera手机直播监控、EasyNVR等多终端接入

    云平台架构 EasyDarwin开源流媒体云平台目前已经包括了EasyCMS中心管理服务.EasyDarwin流媒体服务.EasyCamera设备端(支持Arm_Linux.Android.PC).E ...

  7. [js开源组件开发]-手机端照片预览组件

    手机端照片预览组件 可怜的我用着华为3C手机,用别人现成的组件都好卡,为了适应我这种屌丝,于是自己简化写了一版的照片预览效果,暂时无缩放功能,以后可能有空再加吧,你也可以自己加下,这是个github上 ...

  8. PHP判断客户端是PC web端还是移动手机端方法

    PHP判断客户端是PC web端还是移动手机端方法需要实现:判断手机版的内容加上!c550x260.jpg后缀变成缩略图PHP用正则批量替换Img中src内容,用正则表达式获取图片路径实现缩略图功能 ...

  9. 【开源GPS追踪】 之 手机端安卓版

    GPS追踪,后台是利用的是开源的Opengts,可以通过web方式浏览位置信息.这里介绍一款手机端软件go Tracker. 这款软件是在Google app 上找到的,目前还没有找到源码,用了几天有 ...

随机推荐

  1. 【CF733F】Drivers Dissatisfaction(最小瓶颈生成树,倍增)

    题意:给出一个图,每条边有权值和花费c,每次花费c能使的权值-1.给出一个预算,求减完权值后的一个最小生成树. 思路:感谢CC大神 有这样一个结论:最佳方案里必定存在一种,预算全部花费全部分配在一条边 ...

  2. 模仿手机qq空间头部向上滚动颜色加深

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. LeetCode OJ--Unique Paths *

    https://oj.leetcode.com/problems/unique-paths/ 首先,转换成一个排列组合问题,计算组合数C(m+n-2) (m-1),请自动想象成上下标. class S ...

  4. 记一次安装centos7及gnome桌面

    https://blog.csdn.net/bingbingtea/article/details/79553669

  5. 在线扩展根分区 red hat 4.8.3-9

    跑程序的时候发现报错,提示空间不足,仔细查看后发现是根分区已满 27G的空间只有20k剩余 考虑从/data分区压缩一点空间到/分区 切换到root用户 执行下面的命令 1. umount /data ...

  6. 洛谷—— P3865 【模板】ST表

    https://www.luogu.org/problemnew/show/P3865 题目背景 这是一道ST表经典题——静态区间最大值 请注意最大数据时限只有0.8s,数据强度不低,请务必保证你的每 ...

  7. luogu P1310 表达式的值

    题目描述 对于1 位二进制变量定义两种运算: 运算的优先级是: 先计算括号内的,再计算括号外的. “× ”运算优先于“⊕”运算,即计算表达式时,先计算× 运算,再计算⊕运算.例如:计算表达式A⊕B × ...

  8. C# MD5加密(16进制)

    MD5加密(16进制) vs会提示引用 using System.Security.Cryptography; 代码如下: public static string MD5Encrypt32(stri ...

  9. array_map常用技巧

    array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组. 简单来说 “array_map” 会对数组中的每一项进行处理,并返回处理后的数据. 定 ...

  10. 使用spring声明式事务,spring使用AOP来支持声明式事务,会根据事务属性,自动在方法调用之前决定是否开启一个事务,并在方法执行之后决定事务提交或回滚事务。

    使用spring声明式事务,spring使用AOP来支持声明式事务,会根据事务属性,自动在方法调用之前决定是否开启一个事务,并在方法执行之后决定事务提交或回滚事务.