國標GB28181協議視訊智慧分析平臺國標平臺EasyGBS接入裝置後重復傳送語音對講訊息無響應問題分析

EasyGBS發表於2020-11-18

在早前的版本更新中,EasyGBS已經支援了語音對講的功能,不管是傳送一段語音,還是實時進行語音講話,EasyGBS都能很好的執行。

98.png

但是近期發現通過EasyGBS和裝置在進行語音對講過程中,第一次對講可以正常進行,再次傳送對講訊息的時候裝置則沒有響應了。進過抓包分析對講流程發現,第二次對講之後,裝置不會回覆對講訊息,需等裝置回覆關閉對講通道後,才能夠再次傳送對講訊息。

41.png

42.png

因此此處為了加強語音體驗的使用感,我們需要對程式碼進行修改,當和通道建立一次連線過後,超時十秒沒收到語音訊息,才會再次向裝置傳送語音喊話請求

if !Server.Talk {
		sipDev := Server.GetDevice(deviceId)
		if sipDev == nil {
			err = fmt.Errorf("[talk] device[%s] not found", deviceId)
			return
		}
		reqBroadcast, _, err := Server.MakeTalkRequest(deviceId, Server.Realm, channelId)
		err = reqBroadcast.SendByTransport(sipDev.Transport)
		if err != nil {
			return err
		}
		_, err = Server.WaitAck(reqBroadcast.HeaderMap["Call-ID"], reqBroadcast.HeaderMap["CSeq"])
		if err != nil {
			return err
		}
		go func() {
			key := fmt.Sprintf(`%s:`, deviceId)
			var talkChan = make(chan string)

			Server.TalkChanDataLock.RLock()
			Server.TalkChanData[key] = talkChan
			Server.TalkChanDataLock.RUnlock()
			Server.TalkChanData[key] <- talkData
			return
		}()

	}

再次傳送兩次語音請求測試,抓包檢視資料都顯示正常,則該問題優化完畢。

43.png

✈ 更多視訊解決方案資源彙總

  • 流媒體技術:

© EasyDarwin開源流媒體伺服器:http://www.easydarwin.org

© TSINGSEE視訊開放平臺:http://open.tsingsee.com

  • 視訊雲服務:

© EasyDSS網際網路視訊雲服務:http://www.easydss.com

© EasyCVR安防視訊雲服務:http://www.easycvr.com

© EasyGBS國標視訊雲服務:http://www.easygbs.com

© EasyRTC線上視訊會議平臺:http://www.easyrtc.cn

© EasyRTS即時通訊雲服務:http://www.easyrts.com

  • 邊緣計算:

© EasyNVR視訊邊緣計算閘道器:http://www.easynvr.com

© EasyNTS上雲閘道器:http://www.easynts.com

© TSINGSEE Team:http://www.tsingsee.com

相關文章