Raspbian命令行RTSP/RTP服务
- 1. 源由
- 2. Raspbian摄像头
- 2.1 命令行启动RTP摄像头
- 2.2 命令行启动RTSP摄像头
- 3. 示例
- 3.1 测试RTP摄像头
- 3.2 测试RTSP摄像头
- 3.3 QGroundControl测试
- 3.3.1 RTSP配置
- 3.3.2 RTP配置
- 4. 总结
- 5. 参考资料
1. 源由
鉴于实际测试发现RTP协议下,摄像头明显比RTSP协议下响应快。
因此,这里记录下命令行模式下启动RTP和RTSP摄像头,以及VLC图像界面的操作。
2. Raspbian摄像头
2.1 命令行启动RTP摄像头
在树莓派上进行RTP(Real-time Transport Protocol)视频流式传输需要使用一些工具。一个常见的工具是raspivid结合ffmpeg,ffmpeg可以将视频流编码并通过RTP进行传输。
以下是在树莓派上设置RTP视频流的命令行:
raspivid -t 0 -w 640 -h 480 -fps 25 -b 2000000 -o - | ffmpeg -i - -vcodec copy -an -f rtp rtp://<destination_ip>:<destination_port>
raspivid -t 0 -w 640 -h 480 -fps 25 -b 2000000 -o -: 使用raspivid捕获视频流,并将其发送到标准输出。
ffmpeg -i - -vcodec copy -an -f rtp rtp://<destination_ip>:<destination_port>: 使用ffmpeg接收来自raspivid的视频流,并将其编码为RTP格式,然后通过指定的目标IP地址和端口进行传输。
确保替换<destination_ip>和<destination_port>为接收视频流的设备的IP地址和端口号。这个命令将在树莓派上启动视频流,并将其发送到指定的目标。
接收视频流的设备可以使用VLC等RTP兼容的媒体播放器来接收和播放视频流。
2.2 命令行启动RTSP摄像头
要在树莓派上使用命令行设置RTSP视频流,您可以使用raspivid结合cvlc(VLC的命令行版本)来实现。以下是一个示例命令:
raspivid -t 0 -w 640 -h 480 -fps 25 -b 2000000 -o - | cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
这个命令将树莓派的摄像头视频流通过RTSP进行传输。解释一下命令的各个部分:
raspivid -t 0 -w 640 -h 480 -fps 25 -b 2000000 -o -: 使用raspivid捕获视频流,并将其发送到标准输出。
cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264: 使用cvlc接收来自raspivid的视频流,将其编码为RTP格式,并通过RTSP进行传输。其中rtsp://:8554/指定了RTSP服务器的地址和端口号。
确保您已经在树莓派上安装了vlc和raspivid。这个命令将在树莓派上启动视频流,并将其通过RTSP传输,您可以在任何支持RTSP的播放器中播放该流。
3. 示例
Raspbian摄像头: 192.168.1.17
Windows笔记本: 192.168.1.14
QGroundControl:192.168.1.8
3.1 测试RTP摄像头
- Step 1:制作VLC的SDP文件,并保存为
rtp.sdp
m=video 5004 RTP/AVP 96
a=rtpmap:96 H264
a=framerate:25
c=IN IP4 127.0.0.1
- Step 2:启动Windows端RTP服务
注:Windows桌面先要装好VLC图形界面软件,双击rtp.sdp
文件,启动RTP服务。
- Step 3:树莓派运行RTP摄像头程序
$ raspivid -t 0 -w 640 -h 480 -fps 25 -b 2000000 -o - | ffmpeg -i - -vcodec copy -an -f rtp rtp://192.168.1.14:5004
- Step 4:等待大概1~2秒,摄像头图像即可显示
3.2 测试RTSP摄像头
- Step 1:树莓派运行RTSP摄像头服务
$ raspivid -t 0 -w 640 -h 480 -fps 25 -b 2000000 -o - | cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/test}' :demux=h264
-
Step 2:Windows启动VLC软件
-
Step 3:选择【Media】–>【Open Network Stream…】–>【Network】,填写RTSP地址
rtsp://192.168.1.17:8554/test
- Step 4:点击【Play】开始播放RTSP摄像头画面
3.3 QGroundControl测试
3.3.1 RTSP配置
$ raspivid -t 0 -w 640 -h 480 -fps 25 -b 2000000 -o - | cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/test}' :demux=h264
3.3.2 RTP配置
$ raspivid -t 0 -w 640 -h 480 -fps 25 -b 2000000 -o - | ffmpeg -i - -vcodec copy -an -f rtp rtp://192.168.1.8:5004
4. 总结
经测试:
- RTP协议较RTSP协议延迟明显改善
- VLC需要使用SDP文件启动RTP服务(待查)
- VLC无法使用SDP文件启动RTSP客户端(待查)
- 所有测试过程都需要先启动服务端程序,然后再启动客户端程序
RTP摄像头(客户端)
RTSP摄像头(服务端)
5. 参考资料
【1】Raspbian简易RTSP服务
【2】Raspbian安装摄像头
【3】Raspbian镜像无头烧录