FFmpeg命令:通过RTSP流生成原始视频

时间:2018-01-16 15:33:02

标签: video ffmpeg video-streaming live-streaming

我正在研究使用FFmpeg将应用程序生成的输出流式传输到同一网络中的另一个系统。但是,我发现命令列表有点令人生畏,难以理解。所以我希望我能就此事请求你的帮助。

我目前的用例: 我有一个Unity应用程序,它有一个单独的视频输出流,并使用插件,我能够将该输出保存到视频文件。使用的命令是将其保存到文件:

ffmpeg -y -f rawvideo -vcodec rawvideo -pixel_format rgba -colorspace bt709 -video_size 1280x720 -framerate 30 -loglevel warning -i - -pix_fmt yuv444p -preset ultrafast -crf 0 test.mp4

输出格式等已经正确,但我现在想直接通过网络传输此输出,最好是使用RTSP。使用下面的命令,我用最后test.mp4替换udp://127.0.0.1:23000以测试UDP上的流,但这会在Unity中返回IOException。

非常感谢任何帮助我指导正确方向的帮助。 提前谢谢!

2 个答案:

答案 0 :(得分:0)

您必须在命令末尾定义输出流式源。您需要定义ffmpeg命令以匹配流格式的所有元素。例如,如果您通过UDP进行流式传输,则可以使用与此类似的命令。

ffmpeg -i (your input) -r 10 -vcodec mpeg4 -f mpegts udp://127.0.0.1:1234

您可以使用VLC或ffplay播放器测试UDP流。但是,如果要通过RTSP进行流式传输,最简单的解决方案是使用Wowza或Red5等媒体服务器。 Red5是一个开源媒体服务器,它对初学者来说有点混乱。 Wowza是付费媒体服务器,但提供更好的文档和支持服务。如果您使用的是RTMP协议,则可以使用与此类似的命令。

ffmpeg -i (your input) -r 10 -vcodec libx264 -pix_fmt yuv420p -f flv "rtmp://(IpAddress):(portnumber)/live/myStream flashver=FMLE/3.0\20(compatible;\20FMSc/1.0) live=myApplication pubUser=myRTMP connection pubPasswd=password"

您也可以使用ffserver(Ffmpeg媒体服务器)进行RTMP。但它仅适用于Linux操作系统。

答案 1 :(得分:0)

这里有一个我以前用过的示例ffmpeg行,格式为mpeg-ts(视频h264 + audio aac),可能会有所帮助:

/path_to_ffmpeg/bin/ffmpeg -ignore_unknown -probesize 100000000 -analyzeduration 100000000 -loglevel verbose -thread_queue_size 2048 -err_detect aggressive -fflags +nobuffer+discardcorrupt -re -i - -aspect 16:9 -s 1920x1080 -c:v:0 libx264 -x264-params force-cfr=1 -preset superfast -vb 6000k -minrate 6000k -maxrate 6000k -bufsize 6000k -muxrate 7000k -nal-hrd cbr -flags +ilme+ildct -top 1 -g 25 -r 25 -pix_fmt yuv420p -vbsf h264_mp4toannexb -c:a:0 libfdk_aac -strict -2 -b:a:0 128k -mpegts_service_type advanced_codec_digital_hdtv -metadata service_provider='PROVIDER' -metadata service_name='hd_low' -mpegts_flags system_b -flush_packets 0 -f mpegts 'udp://DEST_IP:DEST_PORT?pkt_size=1316&reuse=1&localaddr=INTERFACE_IP&bitrate=7000000&fifo_size=18618&overrun_nonfatal=1'

替换这些:
你猜对了DEST_IP,目的地IP即192.168.1.5
DEST_PORT是目的地端口,即:1234
INTERFACE_IP如果设备有多个以太网接口,则应输入interface ip以用于输出,或者只输入设备的ip。 i.e.:192.168.1.3。这是可选的。

您使用目标IP作为网络上的PC之一,并使用VLC在该PC上播放流(打开网络流并输入udp://@dest_ip:port)。

希望有所帮助。