date:
updated:
CentOS7 部署 ZlMediaKit
官网
获取代码
1 2 3 4 5
| git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit
git submodule update --init
|
编译器
要求 gcc 版本 >= 4.8(4.7应该也能支持)
安装编译器
1 2
| sudo yum -y install gcc sudo yum -y install gcc-c++
|
cmake
1
| sudo yum -y install cmake
|
我安装完后还是 2.8.12.2 版本,不够:CMake 3.0.0 or higher is required. You are running version 2.8.12.2
1 2
| [root@liangshan build] cmake version 2.8.12.2
|
升级 cmake
依赖库
ZLMediaKit 可选依赖一些第三方库,这些库都不是必选的
- openssl
flash player 在播放 rtmp 时,采用的是复杂握手模式,如果不安装该库,flash player 将播放不了 zlmediakit 提供的 rtmp url
同时 ZLMediaKit 的 https/rtsps 相关功能需要使用 openssl 才能开启
- ffmpeg
zlmediakit 可以通过 fork ffmpeg 进程的方式实现多种协议的拉流,编译时不需要安装 FFmpeg
- sdl、avcodec、avutil
这3个库供 ZLMediaKit 的 test_player 测试程序使用,你通常不需要安装这3个库
openssl
1 2
| yum install openssl yum install openssl-devel
|
ffmpeg
参考 centos7:安装ffmpeg
1 2 3 4 5 6 7 8 9 10 11 12 13
| yum install epel-release -y yum update -y
sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
sudo yum install ffmpeg ffmpeg-devel -y
ffmpeg --help
|
构建和编译项目
由于开启 webrtc 相关功能比较复杂,默认是不开启编译的,如果你对 zlmediakit 的 webrtc 功能比较感兴趣,可以参考这里
1 2 3 4 5
| cd ZLMediaKit mkdir build cd build cmake .. make -j4
|
运行
ZLMediaKit 工程主要生成3种二进制目标文件,他们的生成的路径在 release 目录下,这些目标文件主要分为
这是 ZLMediaKit 作为服务器的主进程,该进程可以在免去开发的情况下直接作为测试流媒体服务器使用,如果你需要更复杂的业务逻辑,可以通过 Web HOOK 和 RESTful API 实现,同时你可以通过配置文件控制其参数
1 2 3 4 5
| cd ZLMediaKit/release/linux/Debug
./MediaServer -h
./MediaServer -d &
|
通过这种方式启动的,使用 killall -2 MediaServer
以便优雅关闭服务器(程序收到SIGINT信号后会自动释放资源并退出)
ZLMediaKit 也提供 c 的 api 二次开发 sdk 库,头文件在 ZLMediaKit/api/include
,库文件为
1
| ZLMediaKit/release/linux/Debug/libmk_api.so
|
相关代码在 ZLMediaKit/tests
目录下,你可以对照代码启动测试进程
测试
推流测试
ZLMediaKit 支持 rtsp/rtmp/rtp 推流,一般通常使用 obs/ffmpeg 推流测试,其中 FFmpeg 推流命令支持以下
1 2 3 4
| ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test
ffmpeg -re -i "/path/to/test.mp4" -vcodec h265 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test
|
如果报错
1
| The encoder 'aac' is experimental but experimental codecs are not enabled, add '-strict -2' if you want to use it
|
需要在最后一个参数前加 -strict -2
,如
1
| ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp -strict -2 rtsp://127.0.0.1/live/test
|
1 2 3
| ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f flv rtmp://127.0.0.1/live/test
|
1 2 3 4
| ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f rtp_mpegts rtp://127.0.0.1:10000
ffmpeg -re -i "/path/to/test.mp4" -vcodec h265 -acodec aac -f rtp_mpegts rtp://127.0.0.1:10000
|
观察日志
如果推流成功,会打印这种日志,日志中相关字符串分别代表:
1 2 3
| 2020-04-10 12:51:52.331 I | regist rtsp __defaultVhost__ rtp 206442D7 ^ ^ ^ ^ schema vhost app stream_id
|