国家標準のGB28181プロトコルビデオプラットフォームEasyGBSは、GB28181プロトコルを介してカスケードできます。HaikangやUnivisionなどのビデオプラットフォームとのカスケードに加えて、開発者独自のビデオプラットフォームとカスケードすることもできます(EasyGBSが優れたビデオストリーミングを実現する方法ユナイテッド)。
EasyGBSビデオプラットフォームは、上位レベルのプラットフォームの音声にカスケードすることもできますが、カスケード音声のテスト中に、上位レベルの音声は初めて正常でしたが、2回目以降に送信された音声は前の音声であることがわかりました。
したがって、パケットをキャプチャして問題の原因を分析すると、パケットキャプチャの結果から、1番目と2番目のオーディオに一貫性があることがわかります。
ただし、オーディオが2回目に収集されると、上位レベルのプラットフォームは新しく収集されたオーディオを送信し、下位レベルのプラットフォームは最後のオーディオをデバイスに送信します。
調査コードは、確立された各udpリンクがバッファーされたbuf配列で読み取られ、udpモニタリングリンクが閉じられていないため、データの混乱を引き起こし、最後のデータを送信することがわかりました。
case audioOnOff := <-Server.UacAudioOnOff[key]:
if dataConn != nil {
Server.UacAudioUdpConn[key] = nil
bufUDP := make([]byte, 102400)
//err := dataConn.SetReadDeadline(time.Now().Add(time.Second * 5))
//if err != nil {
// Server.UacAudioUdpConn[key].Close()
// log.Println("超时处理")
// return
//}
time.Sleep(time.Second * 1)
for audioOnOff {
n, _, err := dataConn.ReadFromUDP(bufUDP)
if err != nil {
//Server.UacAudioUdpConn[key].Close()
log.Printf("udp read error, %v", err)
continue
}
rtpBuf := make([]byte, n)
copy(rtpBuf, bufUDP[:n])
tempint, err := transportMS.UDPConn.Write(rtpBuf)
if err != nil {
log.Printf("发送rtperr : %s ,tempint :%d", err, tempint)
return
}
time.Sleep(80 * time.Millisecond)
log.Println("发送tempint", tempint)
}
}
次のコードを追加する必要があります
Server.UacAudioUdpConn[key] = nil
udp接続を取得するたびに、今回使用したリンクを空白のままにします。
case audioOnOff := <-Server.UacAudioOnOff[key]:
if dataConn != nil {
Server.UacAudioUdpConn[key] = nil
bufUDP := make([]byte, 102400)
//err := dataConn.SetReadDeadline(time.Now().Add(time.Second * 5))
//if err != nil {
// Server.UacAudioUdpConn[key].Close()
// log.Println("超时处理")
// return
//}
time.Sleep(time.Second * 1)
for audioOnOff {
n, _, err := dataConn.ReadFromUDP(bufUDP)
if err != nil {
//Server.UacAudioUdpConn[key].Close()
log.Printf("udp read error, %v", err)
continue
}
rtpBuf := make([]byte, n)
copy(rtpBuf, bufUDP[:n])
tempint, err := transportMS.UDPConn.Write(rtpBuf)
if err != nil {
log.Printf("发送rtperr : %s ,tempint :%d", err, tempint)
return
}
time.Sleep(80 * time.Millisecond)
log.Println("发送tempint", tempint)
}
}
再度使用すると、毎回送信される音声は上司が送信する音声と同じになります。
注:カメラデバイスが音声をサポートしている場合、EasyGBSカスケードを介して音声を受信できます。カメラデバイスが音声をサポートしていない場合、カメラデバイスは音声を受信できません。
EasyGBSビデオプラットフォームは、パンチルト制御をサポートし、動的ネットワーキングサービスに基づくインテリジェントネットワークを作成し、ポイントツーポイント相互接続を実現するためにネットワーキングを必要とするネットワークメンバーを選択し、RTSP、RTMP、HTTP-FLV、HLSなどの複数のストリーム出力を提供できます。複数のプロトコルストリーム。ユーザーは、独自のプロジェクト要件に応じて適切なビデオストリームを選択できます。
EasyGBSに加えて、TSINGSEE Qingxi Videoには、RTSPプロトコルをサポートするEasyNVRやRTMPプロトコルをサポートするEasyDSSビデオプラットフォームなど、他のビデオソリューションもあります。ビデオ関連のソリューションの詳細については、お問い合わせください。