그래서 ffmpeg를 사용하여 UDP 프로토콜을 사용하여 라이브 웹캠을 포트 1111로 스트리밍했습니다.
ffmpeg -f dshow -i video="Lenovo EasyCamera" -f mpegts udp://localhost:1111
포트 1111에서 ffplay로 직접 재생했을 때 모든 것이 제대로 작동했습니다.
ffplay udp://localhost:1111
다음과 같은 비디오 품질을 얻었습니다.
그래서 내 생각에는 Winsock 코드를 몇 개 작성할 수 있을 것 같습니다.포트 1111을 수신하고 포착한 모든 UDP 패킷을 포트 2222로 전달합니다.. 따라서 포트 2222로 스트리밍하는 것을 시뮬레이션할 수 있습니다. 내 코드는 다음과 같습니다.
' // Please note that this is the simplified code - cause it worked
' // i've just post the key lines
Winsock1.Bind 1111
Winsock2.remotePort = 2222
WinSock1.GetData myPacket
Winsock2.SendData myPacket
그런 다음 ffplay를 사용하여 포트 2222에서 스트림을 재생해 보았습니다.
ffplay udp://localhost:2222
글쎄, 비디오 품질이 왜 이렇게 나빠졌는지 모르겠습니다.
요점은 스트리밍 소스와 동일한 순서로 동일한 UDP 패킷을 보냈다는 것입니다. 여기서 무엇이 잘못되었을 수 있습니까?
추신: TCP를 사용하여 위와 유사한 실험을 시도했지만 최종 결과 비디오 품질은 직접 스트리밍만큼 좋았습니다. 그렇다면 이것이 UDP의 문제일 수 있습니까?
PS2: ffplay를 포트 2222를 수신하고 수신된 모든 패킷을 인쇄하는 소켓으로 교체하여 UDP 패킷 손실 및 장애를 테스트했습니다. 그러나 결과적으로 10,000개 이상의 패킷이 모두 올바른 순서로 유지되었으며 손실된 것은 없습니다. 정말 말도 안되는 현상인가요?