Решение голосового домофона застряло после каскадной сетевой камеры 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 является каналом, поскольку он равен нулю, когда значение принимается, оно не будет принято даже после назначения.

В ответ на эту проблему мы улучшили код следующим образом

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 Qingxi Video , вы можете связаться с нами, чтобы получить демонстрационную программу, интуитивно понятный интерфейс, вы также можете загрузить и протестировать по желанию, если у вас есть какие-либо вопросы, пожалуйста, обращайтесь к нам.

Сервер потокового мультимедиа с открытым исходным кодом EasyDarwin представляет собой платформу потокового мультимедиа с открытым исходным кодом, разработанную и поддерживаемую местной командой потокового мультимедиа с открытым исходным кодом TSINGSEE Qingxi Video. С момента своего создания и развития в декабре 2012 года он расширился от исходной формы сервера потокового мультимедиа с одним сервисом до текущего проекта архитектуры облачной платформы с открытым исходным кодом.

рекомендация

отblog.csdn.net/EasyGBS/article/details/108734124