A solução do intercomunicador de voz travou após a câmera de rede em cascata GB28181 plataforma de vídeo de protocolo de mídia de streaming EasyGBS

Recentemente, muitos usuários estão muito interessados ​​na disseminação da plataforma de vídeo EasyGBS e também tenho recebido muitas perguntas de usuários. Mas na área de voz, parece que ainda há alguns problemas com os quais precisamos lidar. Por exemplo, o artigo anterior resolveu o problema de duplicação de voz após o EasyGBS em cascata. Depois de resolver o problema, houve um problema ao continuar o intercomunicador de voz de teste travou . , Portanto, este artigo também fala sobre o processo de solução do problema.

Arquitetura EasyGBS 2.5D.png

Configuramos a plataforma de nível superior do EasyGBS e selecionamos o canal de suporte de voz nas informações de configuração da plataforma de nível superior para registrar no nível superior.

67.png

Em seguida, a plataforma de nível superior reproduz o canal em cascata, acesso https para intercom,

68.png

Mas na primeira vez que você falar neste momento, o dispositivo não emitirá nenhum som e travou. Vamos analisar novamente por meio da captura de pacotes.

69.png

Depois de capturar o pacote, você pode descobrir que o comando de notificação de voz
Broadcast \ n e o comando de registro de inicialização do dispositivo CSeq: 15 INVITE estão normais, incluindo a voz de nível superior foi enviada para o nível inferior, portanto, deve ser o nível inferior ao enviar a voz para o dispositivo. problema.

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

Uma vez que o valor é primeiro obtido e depois atribuído, o valor não foi atribuído quando o valor é obtido, portanto, embora este UacAudioOnOff seja um canal, porque é nulo quando o valor é obtido, ele não será obtido mesmo após a atribuição.

Em resposta a este problema, melhoramos o código da seguinte maneira

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

Execute um julgamento de valor antes de obter o valor e, em seguida, capture o pacote novamente após a modificação, tudo está normal.

70.png

Em seguida, inicie o interfone de voz novamente, não há problema. Se ainda estiver interessado em nosso EasyGBS em cascata, você pode ler este artigo: Como o EasyGBS realiza a cascata ascendente de fluxos de vídeo? Para soluções relacionadas a vídeo, você pode visitar o TSINGSEE Green Rhino Video . Você pode nos contatar para um programa de demonstração, experiência intuitiva ou download gratuito e teste. Se você tiver alguma dúvida, não hesite em nos consultar.

O servidor de streaming de mídia de código aberto EasyDarwin é uma estrutura de plataforma de streaming de mídia de código aberto desenvolvida e mantida pela equipe nacional de streaming de mídia de código aberto TSINGSEE Qingxi Video. Desde seu estabelecimento e desenvolvimento em dezembro de 2012, ele se expandiu da forma original de servidor de streaming de mídia de serviço único para o projeto de código aberto atual da arquitetura de plataforma em nuvem.

Acho que você gosta

Origin blog.csdn.net/EasyGBS/article/details/108734124
Recomendado
Clasificación