
Сценарий
Я пытаюсь транслировать видео между 2 хостами с помощью RTP. Ранее я решил эту проблему с помощью 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"
Это воспроизведет видео (даже при подключении по SSH, если вы используете mobaxterm)