대기 시간 없이 VR 헤드셋으로 스트리밍하기 위해 FFmpeg 명령을 공식화하는 방법은 무엇입니까?

대기 시간 없이 VR 헤드셋으로 스트리밍하기 위해 FFmpeg 명령을 공식화하는 방법은 무엇입니까?

ffmpeg를 사용하여 가능한 가장 낮은 대기 시간으로 한 PC에서 다른 PC로 지점 간 2K 60-90Hz 스트리밍을 명령하려면 어떻게 해야 합니까?

전체 내용:

Amazon의 Eyebox, Alibaba의 자이로스코프 + 아두이노, 2K HDMI 디스플레이를 사용하여 VR 헤드셋을 만들었습니다. 블렌더 게임 엔진과 잘 작동하지만 전선이 나를 미치게 만듭니다.

라즈베리파이나 다른 소형 컴퓨터를 이용해서 무선 네트워크로 만들어 보려고 합니다. (어쨌든 헤드폰의 균형을 맞추기 위해 뒤쪽에 무게를 추가해야 합니다)

대략 이렇게 구성되어 있는 것 같아요 -

서버(PC): 대기 시간이 가장 짧은 IP의 포트 중 하나로 2K 애플리케이션 창을 스트리밍합니다.

클라이언트(HMD): 대기 시간을 최소화하기 위해 기본 모드에서 Mplayer를 실행합니다(FFmpeg 문서에 따름).

FFmpeg는 Blender에 완전히 통합되어 있지만 입력 스트림은 데스크톱 스크린샷일 수 있습니다.

ISP에서 제공하는 홈 라우터는 5Ghz Wi-Fi를 지원합니다. 또한 Linux에서 플러그 앤 플레이가 작동하는 5Ghz Wifi CSL USB 스틱도 있습니다.

VR에서는 대기 시간이 정말 안 좋기 때문에 압축하지 않은 상태로 스트리밍하면 몇 밀리초를 단축할 수 있을까요? 스트리밍은 LAN을 통해서만 이루어지기 때문에 대역폭은 100Mb/s인 5GHz Wi-Fi로만 제한된다고 가정합니다.

ffmpeg 문서를 해석하는 방법은 수백 가지가 있으며, 실제로 어떤 옵션을 사용해야 하는지는 경험을 통해서만 이해할 수 있는 것 같습니다. 다른 사람이 같은 일을 시도하는 것을 볼 수 없습니다.

가능한 모든 설정을 시도하는 데 일주일을 보낼 수 있지만 매일 ffmpeg를 다루는 사람은 최상의 설정을 즉시 알 수 있을 것이라고 확신합니다.

이 명령은 약 1초의 대기 시간과 25FPS를 제공합니다.

서버: avconv -f x11grab -s 2160x1200 -r 60 -i :0.0 -f mpegts udp://192.168.0.2:1234

클라이언트: mplayer -benchmark udp://192.168.0.2:1234

"rawvideo"를 사용하면 mplayer가 스트림을 선택하지 않습니다. "스트림을 검색할 수 없습니다"라고만 뜹니다.

답변1

avconv -f x11grab -s 640x1200 -r 60 -i :0.0 -f mpegts udp://192.168.0.2:1234

avconv -f x11grab -s 640x1200 -r 60 -i :0.0 -f mpegts udp://192.168.0.2:1235

avconv -f x11grab -s 640x1200 -r 60 -i :0.0 -f mpegts udp://192.168.0.2:1236

avconv -f x11grab -s 640x1200 -r 60 -i :0.0 -f mpegts udp://192.168.0.2:1237

그리고

기본 모드의 MPlayer, 지연 없음

추가 세부정보: 더 많은 CPU를 사용하려면 기본적으로 스트림을 분할해야 한다는 사실을 발견했습니다. 개별 스트림의 우선순위를 지정하기 위해 "nice"를 사용하는 것은 효과가 없습니다. CPU의 약 30%를 사용하여 25fps에서 2k를 추진했습니다. 위에 표시된 것처럼 여러 스트림으로 분할한 것과 같으며 CPU 사용량이 85%인 각 타일에서 60FPS를 얻을 수 있습니다. -threads 0 to 6 옵션은 예상과 다르게 동작합니다. 오히려 렌더링 속도가 느려질 뿐입니다. H264가 더 좋으며 네트워크는 기가비트여야 합니다.

관련 정보