RTSP 安装与使用
需求
- 兼容的摄像头
- 如果使用有Hdmi-in的RK开发板,也可以使用 HDMI RX 作为视频源
服务端配置
- 基于 Gstreamer + mediamtx
- 基于 FFmpeg
使用 HDMI RX 时,目前 gst-mppenc 暂不支持 NV24(YCbCr444) 与 RGB 输入,需要 HDMI 输入端切换颜色格式为 NV12(YCbCr420) 或 NV16(YCbCr422) ,或者使用Fmpeg 进行推流。
安装 依赖
sudo add-apt-repository -r ppa:george-coolpi/multimedia
sudo apt-get update
sudo apt-get install gstreamer1.0-rtsp
apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
查看支持的编码器
gst-inspect-1.0 | grep mpp
运行 mediamtx 和 Gstreamer
此处我们假定 /dev/video41
是你想要使用的视频源。如果你的摄像头被分配到了其他的名称下,请替换以下命令行中对应的设备名。
wget https://github.com/bluenviron/mediamtx/releases/download/v1.9.0/mediamtx_v1.9.0_linux_arm64v8.tar.gz
tar -xzvf mediamtx_v1.9.0_linux_arm64v8.tar.gz
nohup ./mediamtx &
# 可用的编码器有 mpph264enc、mpph265enc、mppjpegenc、mppvp8enc,修改编码器需要修改 pipeline 后的 rtp*pay 或 *parse
gst-launch-1.0 v4l2src device=/dev/video41 ! \
videoconvert ! \
video/x-raw,format=NV12 ! \
mpph264enc bps=2000000 ! \
h264parse ! \
rtspclientsink location=rtsp://localhost:8554/test
使用 HDMI RX 时,低于 720P 分辨率的输入源可能会导致编码失败。
安装编译依赖
sudo apt-get update
sudo apt-get install build-essential cmake git libdrm-dev libsdl2*-dev libx264-dev libx265-dev pkg-config
安装MPP和RGA
编译并安装 ffmpeg-rockchip
mkdir -p ~/dev && cd ~/dev
git clone --depth=1 https://github.com/nyanmisaka/ffmpeg-rockchip.git ffmpeg
cd ffmpeg
./configure --prefix=/usr --enable-gpl --enable-version3 --enable-libdrm --enable-rkmpp --enable-rkrga --enable-libx264 --enable-libx265 --enable-ffplay
make -j $(nproc)
# Try the compiled FFmpeg without installation
./ffmpeg -decoders | grep rkmpp
./ffmpeg -encoders | grep rkmpp
./ffmpeg -filters | grep rkrga
# Install FFmpeg to the prefix path
make install
运行 mediamtx 与 ffmpeg-rockchip
此处我们假定 /dev/video41
是你想要使用的视频源。如果你的摄像头被分配到了其他的名称下,请替换以下命令行中对应的设备名。
-vf "fps=30"
与 -s 1280x720
分别对应帧率与分辨率,需根据命令 sudo v4l2-ctl -d /dev/video41 --all
的输出进行调整,否则可能会因为无法自动读取到摄像头信息而影响编码性能甚至启动推流失败。
-c:v
选项可以指定使用的编码器,目前 ffmpeg-rockchip 支持的硬件编码器有 h264_rkmpp
、hevc_rkmpp
和 mjpeg_rkmpp
。
wget https://github.com/bluenviron/mediamtx/releases/download/v1.9.0/mediamtx_v1.9.0_linux_arm64v8.tar.gz
tar -xzvf mediamtx_v1.9.0_linux_arm64v8.tar.gz
nohup ./mediamtx &
ffmpeg-rockchip/ffmpeg -f v4l2 -input_format mjpeg -video_size 1280x720 -framerate 30 -i /dev/video41 \
-c:v h264_rkmpp \
-rc_mode AVBR \
-b:v 20M \
-minrate 10M \
-maxrate 40M \
-profile:v main \
-level 5.1 \
-f rtsp rtsp://0.0.0.0:8554/stream
# 如果仅想将摄像头录制成文件,请使用以下命令
# ffmpeg-rockchip/ffmpeg -f v4l2 -i /dev/video-camera0 -vf "fps=30" -s 1280x720 -c:v h264_rkmpp -rc_mode AVBR -b:v 20M -minrate 10M -maxrate 40M -profile:v main -level 5.1 /tmp/tmp.mp4
客户端配置
使用 VLC 播放器
以下以 Windows 下运行 VLC 为例,介绍如何收看 RTSP 视频推流。
-
下载并安装 VLC VLC
-
点击 媒体 - 打开网络串流 来输入 RTSP 推流地址
需替换为服务端命令行中指定的 URL 与 IP 地址。
- 点击播放后即可查看 RTSP 远程推流内容
在开发板上使用 ffplay 播放器
也可直接使用上面提到的 FFmpeg 的 ffplay 工具进行播放
需替换为服务端命令行中指定的 URL 与 IP 地址。
-vcodec
选项为指定的解码器,请根据 RTSP 流的编码进行调整,目前 ffmpeg-rockchip 支持的硬件解码器有 av1_rkmpp
、h263_rkmpp
、h264_rkmpp
、hevc_rkmpp
、mpeg1_rkmpp
、mpeg2_rkmpp
、mpeg4_rkmpp
、vp8_rkmpp
、vp9_rkmpp
。
ffmpeg-rockchip/ffplay -vcodec h264_rkmpp rtsp://192.168.1.123:8554/test