一、前言
1、ZLMediaKit使用场景
最近在写一个摄像头检测的项目,其中需要做拉流测试,但是摄像头数量不够用,如果直接重复拉流可能会出现问题,使用ZLMediaKit(一个基于C++11的高性能运营级流媒体服务框架)可以实现按需拉流推流。
ZLMediaKit源码地址
但是网上可供参考的资料比较残缺不够完整,故在此记录一下完整的上手流程。
2、参考资料
Docker 简单部署 ZLMediaKit 超详细图文步骤
ZLMediaKit部署及使用
搭建流媒体服务器,ZLMediaKit+Docker
二、准备工作
在这里我们使用最简单直接的方式:Docker安装。所以需要有docker的环境。官网提供的docker下载命令如下:
docker run -d -p 1935:1935 -p 8080:80 -p 8554:554 -p 10000:10000 -p 10000:10000/udp -p 8000:8000/udp --name zlmediakit zlmediakit/zlmediakit:master
直接使用在后续可能会出现一个错误。在这里直接提供修改之后的代码。
在创建docker之前,做好如下配置
1、下载原始的ZLMediaKit
docker run -d -p 1935:1935 -p 8080:80 -p 8554:554 -p 10000:10000 -p 10000:10000/udp -p 8000:8000/udp --name zlmediakit zlmediakit/zlmediakit:master
2、修改ZLMediaKit配置文件
docker cp -a zlmediakit:/opt/media /home/docker/zlmediakit
docker rm -f zlmediakit #删除
cd /home/docker/zlmediakit/media/conf
vi config.ini
修改[http]相关配置
[api]
apiDebug=1
defaultSnap=./www/logo.png
downloadRoot=./www
#修改secret,当然也可以使用默认值,这个后续要用到
secret=Icetc
snapRoot=./www/snap/
.................
.................
[http]
#是否显示文件夹菜单,开启后可以浏览文件夹
dirMenu=1
#允许访问http api和http文件索引的ip地址范围白名单,置空情况下不做限制,初始值不为空
allow_ip_range=
启动流程
1、启动docker
按上述修改完配置文件之后就可以重新启动我们的docker了,注意启动的时候要使用我们自己的配置文件。
docker run -d -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 --restart=always --env MODE=standalone -e TZ="Asia/Shanghai" -v /home/docker/zlmediakit/media/bin:/opt/media/bin -v /home/docker/zlmediakit/media/conf:/opt/media/conf zlmediakit/zlmediakit:master
2、检查docker是否启动成功
我们在网页上输入http://{你的ip地址}:8080
如果出现一下页面,说明启动成功。
有一个错误可能是your ip is not allowed to access the service
,原因是在之前配置文件中未修改设置allow_ip_range=
3、添加推流
在这里我们就使用第一个使用rtsp方式推流,官方提供的测试命令如下:
推流测试
ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test
但是我们是在docker里,没有测试视频,需要把服务器中的测试视频上传到docker里。
docker cp /home/fight_test.mp4 zlmediakit:/
这样有了测试视频之后我们再进行推流测试。而且要在docker容器中运行,修改成我们的测试视频地址。
docker exec zlmediakit ffmpeg -re -i /fight_test.mp4 -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test
可能出现的一个问题:[aac @ 0x560f6b976780] Too many bits 8832.000000 > 6144 per frame requested, clamping to max
解决办法是至少设置一个参数即可修复卡住的错误,具体原因不明。其中ab 为码率,ar 为采样率,ac为声道。
在这里设置就设置一下-ar,完整命令如下:
docker exec zlmediakit ffmpeg -re -i /fight_test.mp4 -vcodec h264 -ar 44100 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test
出现以下页面说明添加推流成功!
4、查看推流
来到这个页面之后就可以查看刚才添加的推流了:
还可以查看观看人数。
5、获取视频
播放url规则
根据上面的讲述,可以知道我们的视频流地址创建的时候是这样的:rtsp://127.0.0.1/live/test
打开浏览器输入推流地址:rtsp://127.0.0.1:{端口号}/live/test
或者正在别的主机上ip换成推流主机的ip,说明docker内使用推流的端口号是554,这个在浏览器页面都能够查看到,在服务器上输入的推流地址需要做简单修改,docker映射在一开始启动docker的时候有8554:554
,所以应该是rtsp://127.0.0.1:8554/live/test
输入之后,弹出直播了,操作成功!之后把测试视频地址修改成摄像头地址,测试成功。