开源流媒体客户端EasyClient手机端控制摄像机EasyCamera云台PTZ控制实现
本文转自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
获取更多信息
Copyright © EasyDarwin.org 2012-2016

开源流媒体客户端EasyClient手机端控制摄像机EasyCamera云台PTZ控制实现的更多相关文章
- EasyDarwin开源流媒体云平台之云台ptz控制设计与实现
本文转自EasyDarwin开源团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/51912692 近日,EasyDarwin云平 ...
- js判断客户端是手机端还是PC端
封装函数: function isPC() { var userAgentInfo = navigator.userAgent; var Agents = ["Android", ...
- [js开源组件开发]js手机端浮层控件,并有多种弹出小提示,兼容pc端浏览器
js dialog组件,包含alert和confirm的实现 本组件所有的资源均在github上可以查看源代码 GitHub 本dialog的组件的例子请在这里查看 demo dialog js di ...
- C#校验手机端或客户端
以下代码用来检查,客户端是手机端还是PC端 string strUserAgent = Request.UserAgent.ToString().ToLower(); bool isMobile = ...
- 自动PC端显示 手机端隐藏CSS代码判断实现
实现场景描述: 有些内容部署在PC端但是有不适合在手机端显示(比如盒子过大,遮挡内容)或者手机端显示毫无意义等.我们可以使用下面的代码来实现:电脑端显示,手机端隐藏 实现方法: CSS控制判断 @me ...
- EasyDarwin开源流媒体云平台支持EasyCamera摄像机、EasyCamera手机直播监控、EasyNVR等多终端接入
云平台架构 EasyDarwin开源流媒体云平台目前已经包括了EasyCMS中心管理服务.EasyDarwin流媒体服务.EasyCamera设备端(支持Arm_Linux.Android.PC).E ...
- [js开源组件开发]-手机端照片预览组件
手机端照片预览组件 可怜的我用着华为3C手机,用别人现成的组件都好卡,为了适应我这种屌丝,于是自己简化写了一版的照片预览效果,暂时无缩放功能,以后可能有空再加吧,你也可以自己加下,这是个github上 ...
- PHP判断客户端是PC web端还是移动手机端方法
PHP判断客户端是PC web端还是移动手机端方法需要实现:判断手机版的内容加上!c550x260.jpg后缀变成缩略图PHP用正则批量替换Img中src内容,用正则表达式获取图片路径实现缩略图功能 ...
- 【开源GPS追踪】 之 手机端安卓版
GPS追踪,后台是利用的是开源的Opengts,可以通过web方式浏览位置信息.这里介绍一款手机端软件go Tracker. 这款软件是在Google app 上找到的,目前还没有找到源码,用了几天有 ...
随机推荐
- JavaWeb学习总结(十三)——使用Session防止表单重复提交(转)
在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...
- 百万级日活 App 的屏幕录制功能是如何实现的
Android 从 4.0 开始就提供了手机录屏方法,但是需要 root 权限,比较麻烦不容易实现.但是从 5.0 开始,系统提供给了 App 录制屏幕的一系列方法,不需要 root 权限,只需要用户 ...
- Linux 之 Samba服务器
Samba服务器 参考教程:[千峰教育] 一:Samba简介: 360百科: Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成. SMB(Server M ...
- checkbox 复选框只能选中一次,之后不能用
<td> <input type="checkbox" name="is_check" id="is_check" val ...
- iOS-开发者账号失效后是否还可以打包
参考链接:https://www.jianshu.com/p/601f596e8550
- AC日记——小行星 洛谷 P2711
题目背景 pid=3437 题目描述 星云中有n颗行星,每颗行星的位置是(x,y,z).每次可以消除一个面(即x,y或z坐标相等)的行星,但是由于时间有限,求消除这些行星的最少次数. 输入输出格式 输 ...
- js-判断移动端用户是横屏放的还是竖屏放的
在一些移动端页面中,页面的样式我们就支持竖屏播放,这时我们就需要判断是横屏还是竖屏了,不同的方向显示冉的样式. //判断手机横屏竖屏 var html = ""; window.a ...
- 拼题 L2-001 紧急救援 最短路计数+记录路径
https://pintia.cn/problem-sets/994805046380707840/problems/994805073643683840 L2-001 紧急救援 (25 分) 作 ...
- Ural 1774 Barber of the Army of Mages 最大流
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1774 1774. Barber of the Army of Mages Time li ...
- JAVA算法总结_时间复杂度_Demo
JAVA面试中经常问到排序算法问题,本人结合网络上一些资源整理了编写一下常用的Demo,并附带运行结果,希望能帮助到大家. /** * @Title: 冒泡排序 * @Description: 将数组 ...