カスケードネットワークカメラGB28181ストリーミングメディアプロトコルビデオプラットフォームEasyGBSの後にスタックした音声インターコムのソリューション

最近、EasyGBSビデオプラットフォームのカスケード接続に多くのユーザーが関心を寄せており、ユーザーからも多くの問い合わせを受けています。ただし、音声の領域では、EasyGBSカスケード後の音声重複の問題を解決するなど、解決すべき問題がまだ残っているようです。この問題に対処した、テスト音声インターコムのスタックを続行すると問題が発生しました。 、この記事では、問題のトラブルシューティングプロセスについても説明します。

EasyGBSアーキテクチャ2.5D.png

EasyGBSの上位プラットフォームを構成し、上位プラットフォーム構成情報で音声対応チャネルを選択して上位に登録します。

67.png

次に、上位レベルのプラットフォームがカスケードチャネル、インターコムのhttpsアクセスを再生します。

68.png

ただし、この時点で初めて話すとき、デバイスは音を出さず、スタックしました。パケットキャプチャで再度分析してみましょう。

69.png

パケットをキャプチャした後、音声通知コマンド
Broadcast \ nとデバイス初期化登録コマンドCSeq:15 INVITEが正常であることがわかります。これには、上位レベルの音声が下位レベルに送信されているため、デバイスに音声を送信するときは下位レベルである必要があります。問題。

for {
			select {
			//等待级联的udp链接建立完成
			case audioOnOff := <-Server.UacAudioOnOff[key]:
				dataConn := Server.UacAudioUdpConn[key]
				if dataConn != nil {
					Server.UacAudioUdpConn[key] = nil
					bufUDP := make([]byte, 102400)

値が最初に取得されて割り当てられるため、値が取得されるときに値が割り当てられていないため、このUacAudioOnOffはチャネルですが、値が取得されるとnilになるため、割り当て後も取得されません。

この問題に対応するため、コードを次のように改善しました

audioOnOffChan := Server.UacAudioOnOff[key]
	if audioOnOffChan == nil {
		audioOnOffChan = make(chan bool)
		Server.UacAudioLock.RLock()
		Server.UacAudioOnOff[key] = audioOnOffChan
		Server.UacAudioLock.RUnlock()
	}

値を取得する前に値の判断を実行し、変更後にパケットを再度キャプチャします。すべて正常です。

70.png

その後、音声インターホンを再起動してください。問題はありません。EasyGBSカスケードにまだ興味がある場合は、この記事を読むことができます。EasyGBSは、ビデオストリームの上方カスケードをどのように実現するのですか?ビデオ関連のソリューションについては、TSINGSEE Green Rhino Videoにアクセスしてください。デモプログラム、直感的な体験、または無料でダウンロードしてテストできます。ご不明な点がございましたら、お気軽にお問い合わせください。

EasyDarwinオープンソースストリーミングメディアサーバーは、国内のオープンソースストリーミングメディアチームTSINGSEE Qingxi Videoによって開発および保守されているオープンソースストリーミングメディアプラットフォームフレームワークです。2012年12月に作成および開発されて以来、元の単一サービスのストリーミングメディアサーバーフォームから、クラウドプラットフォームアーキテクチャの現在のオープンソースプロジェクトへと拡大しています。

おすすめ

転載: blog.csdn.net/EasyGBS/article/details/108734124