• 基于EasyDarwin云平台实现的EasyClient客户端与EasyCamera摄像机之间的对讲与云台控制功能


    本文转自EasyDarwin团队Kim的博客,感谢Kim长期对EasyDarwin开源项目的贡献:http://blog.csdn.net/jinlong0603

    EasyDarwin云平台是一套由EasyDarwin、EasyCMS、EasyCamera、EasyClient、nginx、redis构成的完整云平台架构,支持分布式、跨平台、多点部署,流媒体服务器支持负载均衡,按需直播,非常适用于互联网化的安防、智能家居、幼教平台、透明厨房、透明家装等多个行业应用。
    EasyClient并不直接与EasyCamera进行通信。EasyCamera开机时会将中心管理服务器(EasyCMS)发送注册请求、发送快照等,并且一直定时发送注册、快照进行保活。EasyCMS记录了所有当前在线的EasyCamera信息。当Android客户端EasyClient打开时,首先会向EasyCMS获取当前在线的EasyCamera列表。EasyClient请求某个Camera视频时,EasyCMS会通知对应的EasyCamera将视频流推送到指定的EasyDarwin服务器上,EasyClient从该EasyDarwin服务器上获取到实时视频流进行播放。
    部署云平台时EasyCamera是视频源端, EasyCMS和EasyDarwin结合是服务器端,EasyClient为客户端。可以做到有Client端观看时,EasyCamera才向EasyDarwin推流,没有Client观看时自动停止推流。对于3G/4G摄像机来说是个福音,很好的节约了网络流量。当EasyClient请求nginx是当客户端请求RTMP流时,由nginx转发的。EasyNVR和EasyCamera相同,是可以接入EasyCMS的设备端。

    EasyClient控制、对讲功能实现

    EasyCamera、EasyClient与EasyCMS服务器交互的命令参考EasyDarwin/Doc/EasyDarwin Protocol v1.1.pdf
    Android EasyClient代码中如下:

    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;
        }
    
    void sendControlCommand(ControlCmd cmd, ControlType type) {
            String url = String.format("http://%s:%s/api/v1/ptzcontrol?device=%s&channel=%d&actiontype=%s&command=%s&speed=5&protocol=onvif",
                    MyApplication.getInstance().getIp(),
                    MyApplication.getInstance().getPort(),
                    mDevSerial,
                    mChannelId,
                    type.GetDes(),
                    cmd.GetDes());
    
            MyApplication.asyncPost(url, new CallbackWrapper<DeviceInfoBody>(DeviceInfoBody.class) {
                @Override
                public void onError(Call call, Exception e) {
                    Toast.makeText(EasyPlayerActivity.this, "onError:" + e.toString(), Toast.LENGTH_SHORT);
                }
            });
        }

    下载地址

    Android EasyCamera app下载:https://fir.im/EasyCamera
    Android EasyClient app下载:https://fir.im/EasyClient
    EasyCamera Demo代码下载:https://github.com/EasyDarwin/EasyCamera
    EasyClient Demo代码下载:https://github.com/EasyDarwin/EasyClient
    EasyDarwin服务器下载:https://github.com/EasyDarwin/EasyDarwin

    获取更多信息

    邮件:support@easydarwin.org

    WEB:www.EasyDarwin.org

    Copyright © EasyDarwin.org 2012-2017

    EasyDarwin

  • 相关阅读:
    11. Container With Most Water
    9. Palindrome Number
    375. 猜数字大小 II leetcode java
    leetcode 72 编辑距离 JAVA
    73. 矩阵置零 leetcode JAVA
    快速排序 JAVA实现
    63. 不同路径 II leetcode JAVA
    重写(override)与重载(overload)
    62 不同路径 leetcode JAVA
    leetcode 56 合并区间 JAVA
  • 原文地址:https://www.cnblogs.com/babosa/p/7348787.html
Copyright © 2020-2023  润新知