• 基于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

  • 相关阅读:
    转:matplotlib画图,plt.xx和ax.xx之间有什么差异
    转:Python __call__()方法,可调用对象
    训练集,验证集,测试集,交叉验证
    Visio画图和导出图的时候,去除多余白色背景
    在线jupyter notebook
    dfs序
    codeforces 877b
    codeforce864d
    codeforce868c
    查看本地git查看git公钥,私钥的方式
  • 原文地址:https://www.cnblogs.com/babosa/p/9217849.html
Copyright © 2020-2023  润新知