1. 程式人生 > >EasyClient實現IPCamera攝像機遠端雲臺控制、語音對講等功能

EasyClient實現IPCamera攝像機遠端雲臺控制、語音對講等功能

EasyDarwin雲平臺

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); } }); }


下載地址

獲取更多資訊

Copyright © EasyDarwin.org 2012-2017

EasyDarwin