┌─────────────────────┐
│ 2024年4月2日23:23:20最后编辑. │
│ 2024年3月29日首次编辑发布. . . .│
└─────────────────────┘
1.树莓派及板载摄像头启用rtp udp推流:
gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-h264,width=1080,height=720,framerate=24/1 ! h264parse ! rtph264pay ! udpsink host=192.168.231.1 port=5600
参数解释:
v4l2src: 视频源类型v4l2, Video for Linux 2的简称;
device=/dev/video0:视频源;
video/x-h264: 视频类型;
width、height: 宽、高;
framerate: 帧率;
h264parse:h264解析;
rtph264pay:RTP打包H264数据;
udpsink:数据以upd方式推送
host:目标主机
port:目标端口
备注:树莓派 使用raspivid延迟更小
raspivid -n -fl -w 540 -h 360 -b 10000000 -fps 30 -t 0 -rot 0 -o - | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=10 pt=96 ! udpsink host=172.16.0.94 port=5600
2. rtsp 2 rtp 推流(IPcam)
gst-launch-1.0 rtspsrc location='rtsp://admin:123456@192.168.1.86/H264?ch=1&subtype=0' latency=0 ! udpsink port=5600 host=192.168.124.3
参数解释:
rtspsrc:视频来源rtsp;
location:rtsp地址,跟卖家/厂家要;
latency:手动增加延迟?
udpsink:数据以upd方式推送
host:目标主机
port:目标端口
备注:这里没有对数据流进行打包,故推送的rtp包其实就是 rtsp 中的 rtp 包。没有视频流的编码与解码,只是 rtsp 中提取 rtp 包来转发,故在一些算力低的平台也可以使用。
3.树莓派用USB摄像头进行推流
gst-launch-1.0 -v v4l2src device=/dev/video1 ! videoconvert ! omxh264enc target-bitrate=10000000 control-rate=3 ! "video/x-h264,profile=high" ! h264parse ! queue max-size-bytes=10000000 ! rtph264pay pt=96 config-interval=1 ! udpsink port=5600 host=192.168.124.3 ts-offset=0
参数解释:无
备注:无
4.删除碍事的网卡的配置(通过IP)
sudo ip route del default via 192.168.1.1
参数解释:无
备注: rtsp 2 rtp 推流使用192.168.1.X网段,避免对外流量使用跑向192.168.1.X,所以删除192.168.1.X网段路由配置。
5.固定网口ip
sudo ifconfig eth0 192.168.1.10 netmask 255.255.255.0
参数解释:
eth0: 网卡接口,可以使用 ifconfig 命令查看所有 网卡接口
netmask:子掩码
备注:无
6.飞控mavlink消息转发
mavlink-routerd -e 192.168.7.1:14550 -e 127.0.0.1:14550 /dev/ttyS1:57600
参数解释:
-e: end point,数据传输目标;
/dev/ttyS1:57600: 数据源,串口/dev/ttyS1,波特率57600;这里前边没有参数-e,因此默认就是数据源;
备注:mavlink-routerd 依赖几个库,需要自己手动安装,具体忘记了是哪几个 ʅ( ‾⊖◝)ʃ
。 另外,mavlink-routerd支持 ipv6。这里有编译好的二进制执行文件https://gitee.com/ablen/mavlink-router/releases/tag/0.1.0 。
7.将RTSP视频流保存为MP4文件
gst-launch-1.0 -e rtspsrc location='rtsp://admin:123456@192.168.1.86/H264?ch=1&subtype=0' latency=0 ! rtph265depay ! h265parse ! mp4mux ! filesink location=~/camera-06.mp4
参数解释:
-e:添加流结束标志,没有这个参数文件会无法播放;
rtspsrc:视频来源rtsp;
location:rtsp地址,跟卖家/厂家要;
rtph265depay:从RTP数据包中提取H265视频流;
h265parse:分析H.265视频流;
filesink:数据推送至文件;
location:文件路径+名字。
备注:
(1) 参考文献;
(2) 如果视频流是H.265就用H.265 的提取和分析参数;如果是H.264就用H.264 的提取和分析参数( rtph264depay 和 h264parse)。
8.地面站QGC可把接收的视频流保存为文件
参数解释:无
备注:
(1) 录制的视频带状态数据,项目对应QGC显示的项目
(2) 画面花屏帧(不完整帧)部分不会录制保存;
9.使用SHELL脚本获得域名IPv6地址
#!/bin/sh
domain="example.com"
ipv6_addr=$(host ${domain} | grep -o "IPv6.*"| grep -o "24.*")
echo $ipv6_addr
运行结果示例:
10.使用shell更新DDNS(dynv6的ipv6)
#! bash
hostname="example.dynv6.net"
token="xxxxxxxxxxxxxxxxxxxxxx"
ipv6_addr=$(curl 'http://api-ipv6.ip.sb/ip')
echo "========================================="
echo "Your ipv6 addr is [$ipv6_addr];"
echo "========================================="
MSG=$(curl "http://dynv6.com/api/update?hostname=$hostname&token=$token&ipv6=$ipv6_addr&ipv6prefix=$ipv6_addr")
echo "================="
echo $MSG
说明:本脚本适用于www.dynv6.com家的DDNS
运行结果示例:出现 addresses updated 表示更新成功