日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

​GB28181心跳机制探讨和技术实现

發布時間:2025/3/12 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ​GB28181心跳机制探讨和技术实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?GB/T 28181-2016心跳機制?

?通過周期性的狀態信息報送,實現注冊服務器與源設備之間的狀態檢測即心跳機制。 ?

?心跳發送方、接收方需統一配置“心跳間隔”參數,按照“心跳間隔”定時發送心跳消息,默認心跳間隔60s。心跳發送方、接收方需統一配置“心跳超時次數”參數,心跳消息連續超時達到“心跳超時次數”則認為對方下線,默認心跳超時次數3次。?

?心跳接收方在心跳發送方上線狀態態下檢測到心跳消息連續超時達到商定次數則認為心跳發送方離線;心跳發送方在心跳接收方上線狀態下檢測到心跳消息響應消息連續超時達到商定次數則認為心跳接收方離線。?

狀態信息流程如下:

?

具體技術實現

本文以我們實現的Android平臺GB28181國標接入模塊為例,探討下大概實現。

相關參數定義:

private int gb28181_reg_expired_ = 3600; // 注冊有效期時間最小3600秒 private int gb28181_heartbeat_interval_ = 20; // 心跳間隔GB28181默認是60, 目前調整到20秒 private int gb28181_heartbeat_count_ = 3; // 心跳間隔3次失敗,表示和服務器斷開了

設置到GB28181實現層:

// GB28181配置 gb28181_agent_.config(gb28181_reg_expired_, gb28181_heartbeat_interval_, gb28181_heartbeat_count_);

MESSAGE組成:

MESSAGE sip:34020000002000000001@3402000000 SIP/2.0 Via: SIP/2.0/TCP 192.168.0.120:60771;rport;branch=z9hG4bK741568174 From: <sip:34020000002000000005@3402000000>;tag=790237397 To: <sip:34020000002000000001@3402000000> Call-ID: 282416456 CSeq: 20 MESSAGE Content-Type: Application/MANSCDP+xml Max-Forwards: 70 User-Agent: IP Camera Content-Length: 176<?xml version="1.0" encoding="GB2312"?> <Notify> <CmdType>Keepalive</CmdType> <SN>2</SN> <DeviceID>34020000002000000005</DeviceID> <Status>OK</Status> <Info> </Info> </Notify>

底層針對異常的處理,如果超過設定的異常次數,狀態回調上去,便于上層做進一步處理:

int count = mExcepitonCount.incrementAndGet(); if ( count >= mConfig.getHeartBeatCount() ) {Log.e(GBDefine.LOGTAG, "KeepAlive.sendRequest() KeepAlive reached HeartBeatTimeoutCount:" + mConfig.getHeartBeatCount() + ", notify listener");GBSIPAgentListener listener = this.getListener();if ( listener != null) {listener.ntsOnHeartBeatException(count, e.getMessage());} }

上層收到底層發過來的心跳異常回調,并做相應的處理:

/** CameraPublishActivity.java* CameraPublishActivity* 針對心跳異常處理** Github: https://github.com/daniulive/SmarterStreaming*/ @Overridepublic void ntsOnHeartBeatException(int exceptionCount, String lastExceptionInfo) {Log.e(TAG, "ntsOnHeartBeatException heart beat timeout count reached, count:" + exceptionCount+", exception info:" + (lastExceptionInfo!=null?lastExceptionInfo:""));// 10毫秒后,停止信令, 然后重啟handler.postDelayed(new Runnable() {@Overridepublic void run() {Log.i(TAG, "gb28281_heart_beart_timeout");stopGB28181Stream();destoryRTPSender();if (gb28181_agent_ != null) {Log.i(TAG, "gb28281_heart_beart_timeout sip stop");gb28181_agent_.stop();Log.i(TAG, "gb28281_heart_beart_timeout sip start");gb28181_agent_.start();}}},10);}

感興趣的開發者,可以自行參考實現。

?

總結

以上是生活随笔為你收集整理的​GB28181心跳机制探讨和技术实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。