设想

设想

设想

我正在尝试使用 RTP 在 2 个主机之间传输视频。我之前使用 VLC 解决了这个问题,使用了以下 2 个命令

服务器端

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_mpegts也是 VLC 支持的格式。无需复制社会民主党文件发送到客户端来接收流。

客户端:

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 连接中也是如此)

相关内容