Então, eu usei o ffmpeg para transmitir a webcam ao vivo usando o protocolo UDP para a porta 1111:
ffmpeg -f dshow -i video="Lenovo EasyCamera" -f mpegts udp://localhost:1111
Quando o reproduzi diretamente pelo ffplay da porta 1111, tudo funcionou corretamente:
ffplay udp://localhost:1111
Eu tenho a qualidade de vídeo assim:
Então,euachoqueeupoderiaescreveralgunscódigoswinsockparaouviraporta1111&encaminharqualquerpacoteUDPcapturadoparaaporta2222.Assim,eupoderiasimularqueestoutransmitindoparaaporta2222.Meucódigoéalgoassim:
'//Pleasenotethatthisisthesimplifiedcode-causeitworked'//i'vejustpostthekeylinesWinsock1.Bind1111Winsock2.remotePort=2222WinSock1.GetDatamyPacketWinsock2.SendDatamyPacket
Entãoeutenteitocarostreamdaporta2222usandooffplay:
ffplayudp://localhost:2222
Bem,nãoseiporqueaqualidadedovídeosetornoutãoruimassim:
O ponto é que, eu enviei os mesmos pacotes UDP na mesma ordem que a fonte de streaming. O que poderia estar errado aqui?
PS: Experimentei uma experiência semelhante, como acima, com o TCP, mas a qualidade do vídeo do resultado final era tão boa quanto a transmissão direta. Então, isso poderia ser um problema do UDP?
PS2: testei a perda de pacotes UDP & desordem, substituindo o ffplay com um soquete que ouvir a porta 2222 & imprimir todos os pacotes recebidos. Mas o resultado é que todos os 10.000 pacotes estavam na ordem correta & nada perdido. Que fenômeno louco?