通过流媒体服务器实现智能设备图传推拉流
通过流媒体服务器实现智能设备图传推拉流
JiuXia2025需求
最近,我在智能小车数据采集项目中遇到了个问题:嵌入式设备的摄像头只能在设备上查看,这给调试和分析带来了不便。虽然可以将这些摄像头推流到本地服务器,但 RTMP 流媒体协议 不利于在移动应用和网页端播放。
经过一番研究,我决定使用 ZLMediaKit 在本地搭建一个流媒体服务器。ZLMediaKit 提供了强大的推拉流和转码功能,可以将 RTMP 流转换为 WebRTC 协议,通过服务器转码后更方便将嵌入式设备的摄像头与网页应用和 SDK 进行无缝集成。
一、使用Docker启动容器
服务器上安装好Docker后,执行以下命令启动容器
sudo docker run -id -p 1935:1935 -p 8080:80 -p 8554:554 -p 10000:10000 -p 10000:10000/udp -p 8000:8000/udp -p 30000-30500:30000-30500 -p 30000-30500:30000-30500/udp --name zlmediakit --env MODE=standalone -e TZ="Asia/Shanghai" zlmediakit/zlmediakit:master
三、验证安装
使用浏览器访问服务器所在IP:8080,如果内容和下面一样那么就是没问题了
1.获取密钥
先进入容器
docker exec -it zlmediakit bash
cat /opt/media/conf/config.ini | grep secret=
secret=后面的就是密钥,记下来
2.打开后台
浏览器打开192.168.3.55:8080/webassist/?secret=此处替换为你的密钥
这里能正常显示数据即代表安装成功
四、拉流测试
1.拉流添加
登录后台,点击上方导航栏的拉流代理选项
这里输入的是qcloud的rtmpdemo测试链接
rtmp://liteavapp.qcloud.com/live/liteavdemoplayerstreamid
输入好地址勾选需要的转码和选项之后,点击右边卡片列表的增加,可以看到视频流已经被添加到了列表里
2.测试拉流
点击后台上方导航栏的WebRTC测试
url输入以下地址,链接的ip换成服务器的ip,其中app和stream参数为拉流添加时的名称
http://192.168.3.55:8080/index/api/webrtc?app=live&stream=test&type=play
选择画质720p,点击播放,这时候视频流已经成功播放了
五、推流测试
1.安装OBS
电脑安装OBS软件,下载地址:https://obsproject.com/
2.使用OBS推流
点击OBS左上角的文件-设置-直播-服务-自定义
推流地址设置为
rtmp://192.168.3.55:1935/live
推流码设置为test1,斜杠后面是应用名称,推流码是流的名称
在OBS的源添加一个显示器采集,点击开始直播测试
回到后台的WebRTC测试页面,链接把stream替换为刚才设置的推流码
http://192.168.3.55:8080/index/api/webrtc?app=live&stream=test1&type=play
能够正常显示画面即代表推流成功
六、嵌入式设备接入
我这里用的是树莓派5开发板,使用rtmp推流接入避障小车的底部避障摄像头
1.设备环境安装
sudo apt update
sudo apt install -y \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-tools \
python3-opencv
安装gstreamer拓展包
# Ubuntu/Debian
sudo apt install -y \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
gstreamer1.0-tools
2.使用gst-launcher推流
gst推流至本地的test2
gst-launch-1.0 \
v4l2src device=/dev/video0 ! \
image/jpeg,width=640,height=480,framerate=30/1 ! \
jpegdec ! \
videoconvert ! \
x264enc speed-preset=ultrafast tune=zerolatency ! \
flvmux ! \
rtmpsink location='rtmp://192.168.3.55:1935/live/test2' sync=false
使用webrtc测试播放
3.嵌入至前端播放器
使用Vue2构建一个前端项目,创建一个WebRTC播放器,使用在线播放地址
可以看到智能小车的前置避障摄像头已经正常显示在我们编写的前端上了,通过ZLM视频流转码不仅可以嵌入至前端还能接入安卓/IOS的SDK播放,更方便使用了