
Cenário
Estou tentando transmitir um vídeo entre dois hosts usando RTP. Já resolvi esse problema usando o VLC usando os 2 comandos a seguir
Lado do servidor
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
Lado do cliente
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
Requerimento
Agora quero conseguir o mesmo, mas com FFMPEG.Qual seria o comando equivalente?
Trabalho realizado até agora
Lado do servidor
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
Lado do cliente
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
No entanto, não consigo gravar o fluxo recebido desta forma.
Responder1
Suponha que o IP do cliente seja 10.0.0.2
Código para rodar no lado do servidor
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
Após executar este código, um arquivo SDP deve ser gerado com o nome saved_sdp_file
. Isso deve ser transferido para o cliente, que precisa dele para receber o stream
Código para rodar no lado do cliente
ffmpeg -protocol_whitelist "file,rtp,udp" -i saved_sdp_file -strict 2 saved_video_file.mp4
Responder2
Considerando o endereço do servidor como 10.158.210.39 e streaming na porta UDP 5155
Lado do servidor:
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é um formato que também é suportado pelo VLC. Não há necessidade de copiar oSDParquivo para o cliente para receber o fluxo.
Lado do cliente:
ffmpeg -protocol_whitelist rtp,udp -i "rtp://10.158.210.39:5155" save.mp4
O fluxo recebido é salvo emsalvar.mp4
Para receber usando ffplay:
ffplay -protocol_whitelist rtp,udp -i "rtp://10.158.210.39:5155"
Isso reproduzirá o vídeo (mesmo em conexão SSH se você estiver usando mobaxterm)