Existe alguma maneira de encapsular o RTP / RTSP / RTCP em uma conexão TCP?

1

Aqui está minha configuração:

Eu tenho duas caixas pretas se comunicando umas com as outras usando algum tipo de rádio. Ambas as caixas pretas podem enviar / receber ao mesmo tempo.

Eu posso enviar / receber dados para cada um desses blackboxs usando um socket de cliente TCP em uma porta pré-definida.

Eu posso enviar / receber arquivos, mas não é tão sexy quanto vídeos para fins de demonstração.

FILE --> APP --> BLACKBOX_TX --RADIO--> BLACKBOX_RX --> APP --> FILE

Aqui está o que eu quero fazer:

Eu gostaria de enviar um vídeo de um lado para outro enquanto você pode ver o vídeo do lado do TX e do lado do RX. É claro que a mágica acontece no lado da RX e eu deveria poder ver o vídeo sem perda porque é isso que o blackbox faz.

Aqui está a minha pergunta:

Eu usei o VLC há alguns anos para enviar um vídeo usando o RTP e seus dois amigos RTSP e RTCP. Alguma chance de eu poder usar a mesma coisa colocando a conexão de fluxo em uma conexão TCP (em direção ao lado TX) e demolindo de uma conexão TCP (do lado RX)?

VLC --> [PROXY] --> BLACKBOX_TX --RADIO--> BLACKBOX_RX --> [PROXY] --> VLC

Estou aberto a qualquer outro tipo de solução que não envolva o VLC. O blackbox + TCP é uma obrigação.

Obrigado,

SOKS

    
por SOKS 19.09.2017 / 10:30

1 resposta

1

Vou repetir o que entendi sobre a configuração e espero que esteja correta; Caso contrário, atualize a questão. Aqui está uma foto, os endereços IP são compostos:

Computer A      Blackbox B      Blackbox C      Computer D
Laptop etc.     Embedded        Embedded        Laptop
10.0.0.1/24 --- 10.0.0.2/24 ... 10.0.1.2/24 --- 10.0.1.1/24
                Port 123        Port 123

Assim, A e B são conectados por Ethernet (LAN), B e C por seu rádio, e C e D novamente por Ethernet. Existe um aplicativo em execução em B e C que escuta na porta 123 e encaminha tudo de ou para essa porta para o outro lado via rádio. Você deseja executar o VLC em A e D e transmitir um vídeo para demonstrar a latência envolvida.

Nesse caso, eu configurei um túnel com socat da seguinte maneira. Em A,

socat TCP4:10.0.0.2:12 TUN:10.0.2.1/24,iff-up 

e em B,

socat TCP4:10.0.1.2:12 TUN:10.0.2.2/24,iff-up 

Verifique com ip route em A e D que você tem algo como

10.0.2.0/24 dev tun0 proto kernel scope link src ...

Esse tipo de pessoa finge que A e D estão conectados diretamente, como em uma LAN, como na foto:

A                 D
10.0.2.1/24 ----  10.0.2.2/24
tun0              tun0

Teste que isso funciona fazendo ping 10.0.2.2 de A, e se a conexão de rádio é bidirecional, com ping 10.0.2.1 de D. Se a conexão não for bidirecional, você pode ter problemas, não tenho certeza.

(Eu testei isso usando uma configuração um pouco diferente, mas não posso testar uma conexão unidrectional. Eu não testei streaming VLC como descrito abaixo).

Agora você pode iniciar um fluxo enviando a instância VLC em A e um fluxo recebendo a instância VLC em D. Todos os protocolos devem funcionar em teoria (se a conexão de rádio for bidirecional), experimente todos eles. Se a conexão de rádio for unidirecional, o RTP e o UDP devem funcionar. O destino do fluxo é 10.0.2.2 (endereço do túnel de D) para o método UDP e RTP. Se você enviar via HTTP, o receptor precisa de algo como vlc http://10.0.2.1:8080/go.mpg .

    
por 19.09.2017 / 16:40

Tags