另一个我取得了良好效果的流式传输命令是将 ffmpeg 输出通过管道传输到 vlc 以创建流式传输。如果您没有安装这些,您可以添加它们:
sudo apt install vlc ffmpeg
在示例中,我使用 http 上的 mpeg 传输流 (ts),而不是 rtsp。我都试过了,但是 http ts 流在我的播放设备上似乎没有故障。
我正在使用一个视频捕获 HDMI>USB 设备,它在 video4linux2 驱动程序上设置自己作为输入。通过 vlc 的管道必须对 CPU 友好,因为我的旧双核 Pentium CPU 能够进行实时编码而不会丢帧。我在使用其他一些方法时也遇到了音频同步问题,这种方法总是具有完美的音频同步。
您必须针对您的设备或文件调整命令。如果您使用文件作为输入,则不需要所有 v4l2 和 alsa 的东西。这是 ffmpeg|vlc 命令:
ffmpeg -thread_queue_size 1024 -f video4linux2 -input_format mjpeg -i /dev/video0 -r 30 -f alsa -ac 1 -thread_queue_size 1024 -i hw:1,0 -acodec aac -vcodec libx264 -preset ultrafast -crf 18 -s hd720 -vf format=yuv420p -profile:v main -threads 0 -f mpegts -|vlc -I dummy - --sout='#std{access=http,mux=ts,dst=:8554}'
比如你的服务器PC IP是192.168.0.10,那么这个命令就可以播放流:
ffplay http://192.168.0.10:8554
#or
vlc http://192.168.0.10:8554
更新:
这是一个使用 VLC 进行 rtsp 的命令,而不是使用 rtsp-simple-server:
ffmpeg -thread_queue_size 1024 -f video4linux2 -input_format mjpeg -video_size 1280x720 -r 30 -i /dev/video0 -f alsa -thread_queue_size 1024 -i plughw:CARD=MS2109,DEV=0 -acodec mp2 -vcodec libx264 -preset ultrafast -crf 20 -s hd720 -vf format=yuv420p -profile:v main -f mpegts -|vlc -I dummy - --sout='#rtp{sdp=rtsp://:8554/} --sout-all --sout-keep'
如果你的电脑ip是192.168.0.10,那么这个命令播放rtsp流:
vlc rtsp://192.168.0.10:8554/