
대본
RTP를 사용하여 두 호스트 간에 비디오를 스트리밍하려고 합니다. 이전에 다음 2개의 명령을 사용하여 VLC를 사용하여 이 문제를 해결했습니다.
서버 측
cvlc video_file.mp4 --sout "#transcode{vcodec=h264, acodec=mpga, ab=128, channels=2, samplerate=44100}: duplicate{dst=rtp{dst=10.X.X.X, port=5004, mux=ts}}" --run-time 40 vlc://quit
고객 입장에서
cvlc rtp://@:5004 --sout "#transcode{vcodec=h264, acodec=mpga, ab=128, channels=2, samplerate=44100}: std{access=file, mux=mp4, dst=downloaded.mp4}" --run-time 40 vlc://quit
요구 사항
이제 FFMPEG를 사용하여 동일한 결과를 얻고 싶습니다.동등한 명령은 무엇입니까?
지금까지 완료된 작업
서버 측
ffmpeg -re -i video_file.mp4 -vcodec libx264 -an -f rtp rtp://10.X.X.X:5004 -vn -acodec libtwolame -f rtp rtp://10.X.X.X:5005
고객 입장에서
ffmpeg -i rtp://10.X.X.X:5004 -vcodec libx264 -an -i rtp://10.5.19.244:5005 -acodec libtwolame -vn -t 00:00:35 downloaded.mp4
하지만 이 방법으로는 수신된 스트림을 녹음할 수 없습니다.
답변1
클라이언트의 IP가 10.0.0.2라고 가정합니다.
서버 측에서 실행되는 코드
ffmpeg -re -thread_queue_size 4 -i source_video_file.mp4 -strict 2 -vcodec copy -an -f rtp rtp://10.0.0.2:6005 -acodec copy -vn -sdp_file saved_sdp_file -f rtp rtp://10.0.0.2:7005
이 코드를 실행한 후에는 SDP 파일이 생성되어야 합니다 saved_sdp_file
. 이는 스트림을 수신하는 데 필요한 클라이언트로 전송되어야 합니다.
클라이언트 측에서 실행할 코드
ffmpeg -protocol_whitelist "file,rtp,udp" -i saved_sdp_file -strict 2 saved_video_file.mp4
답변2
서버 주소를 10.158.210.39로 간주하고 UDP 포트 5155에서 스트리밍합니다.
서버 측:
ffmpeg -re -i test_video.mp4 -c:v copy -c:a copy -f rtp_mpegts -sdp_file test_video.sdp "rtp://10.158.210.39:5155"
rtp_mpegtsVLC에서도 지원되는 형식입니다. 복사할 필요가 없습니다.SDP스트림을 수신하기 위해 클라이언트에 파일을 보냅니다.
고객 입장에서:
ffmpeg -protocol_whitelist rtp,udp -i "rtp://10.158.210.39:5155" save.mp4
수신된 스트림은 다음 위치에 저장됩니다.저장.mp4
ffplay를 사용하여 수신하려면:
ffplay -protocol_whitelist rtp,udp -i "rtp://10.158.210.39:5155"
이렇게 하면 비디오가 재생됩니다(mobaxterm을 사용하는 경우 SSH 연결에서도 마찬가지입니다).