文章目录
- 一、前言
- 二、编译器
- 三、构建和编译项目(启用WebRTC功能)
-
- [1、 openssl 安装 (openssl版本要求1.1以上)](#1、 openssl 安装 (openssl版本要求1.1以上))
- [2、 libsrtp安装](#2、 libsrtp安装)
- [3、 编译ZLM](#3、 编译ZLM)
- 四、运行
一、前言
ZLMediaKit的作者是使用Ubuntu 16开发的,但是如果要跑到测试甚至于生产上必须要部署到centos上,笔者使用的是centos7.9环境,因为有需求就装完给大家分享一下。
二、编译器
1、获取代码
如果没有git,需要先安装git,有了yum都不是难事。
bash
yum install git
验证git安装情况
bash
[root@localhost zlm]# git version
git version 1.8.3.1
拉取代码
bash
#国内用户推荐从同步镜像网站gitee下载
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
cd ZLMediaKit
#千万不要忘记执行这句命令
git submodule update --init
2、编译器
2.1 编译器版本要求
ZLMediaKit采用了C++11的语法和库,要求编译器支持完整的C++11标准,即:
linux上要求gcc 版本 >= 4.8(4.7应该也能支持)
2.2 安装编译器
如果你是centos7或以上用户,你可以这样安装gcc编译器:
bash
yum -y install gcc
yum -y install gcc-c++
3、安装cmake
注意:这步如果执行提示openssl的错误,那么先执行后续的流程,包括 2.4(依赖库),3.1( openssl 安装 (openssl版本要求1.1以上)和3.2(libsrtp安装)部分的内容,最后再安装cmake。
ZLMediaKit采用cmake来构建项目,通过cmake才能生成Makefile(或Xcode/VS工程),所以必须先安装cmake才能完成后续步骤。
ZLMediaKit官网的办法,安装cmake,发现版本还是太低,不满足最低的cmake版本要求。
bash
#官方提供的安装办法(版本太低)
yum -y install cmake
作者使用下面的办法进行安装,首先下载对应的安装包,如果github的资源无法下载,可以先去找对应的文件,手动拷贝到目标机器上,进行后续的操作。
bash
wget https://github.com/Kitware/CMake/releases/download/v3.26.3/cmake-3.26.3.tar.gz
bash
#解压
tar -zxvf cmake-3.26.3.tar.gz
cd cmake-3.26.3
#如果报错,请看本节的注意事项
./bootstrap
#这步耗时较长,请耐心等待
gmake
#进行安装
gmake install
#检查版本
cmake --version
出现了错误
bash
[root@localhost cmake-3.26.3]# cmake -version
CMake Error: Could not find CMAKE_ROOT !!!
CMake has most likely not been installed correctly.
Modules directory not found in
/usr/local/bin
段错误(吐核)
解决办法
原因:cmake 命令本来存在,然后进行了安装。 类似于缓存导致失败的一样。
bash
hash -r
然后再执行
bash
[root@localhost cmake-3.26.3]# cmake --version
cmake version 3.26.3
CMake suite maintained and supported by Kitware (kitware.com/cmake).
版本已经升级了
4、依赖库
4.1 依赖库列表
ZLMediaKit可选依赖一些第三方库,这些库都不是必选的;在构建ZLMediaKit时,cmake能查找系统路径中的这些库,并根据安装情况选择是否开启相关特性,你可以选择安装这些依赖并启用相关特性:
-
openssl
- flash player在播放rtmp时,采用的是复杂握手模式,如果不安装该库,flash player将播放不了zlmediakit 提供的rtmp url.
- 同时ZLMediaKit的https/rtsps/webrtc相关功能需要使用openssl才能开启。
-
ffmpeg
- zlmediakit可以通过fork ffmpeg进程的方式实现多种协议的拉流,编译时不需要安装FFmpeg。
-
sdl、avcodec、avutil
- 这3个库供ZLMediaKit的test_player测试程序使用,你通常不需要安装这3个库。
4.2 安装依赖库
4.2.1 安装libssl-dev和libsdl-dev
bash
#安装libssl-dev
yum install openssl-devel
#安装libsdl-dev
yum install SDL-devel
4.2.2 安装 ffmpeg-devel依赖和ffmpeg依赖
直接安装可能会提示 没有可用软件包 的问题
bash
[root@localhost ZLMediaKit]# yum install ffmpeg ffmpeg-devel
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.lzu.edu.cn
* epel: mirrors.tuna.tsinghua.edu.cn
* extras: mirror.lzu.edu.cn
* updates: mirrors.ustc.edu.cn
没有可用软件包 ffmpeg。
没有可用软件包 ffmpeg-devel。
错误:无须任何处理
这里就要更新下yum源,按照以下步骤进行操作。
执行下面这条命令
bash
#安装 epel-release
yum install epel-release -y
#通过rpmfusion存储库安装 rpm
yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm
bash
#清理缓存
yum clean all
#重新生成缓存
yum makecache
#升级yum源
yum uptade
bash
#安装依赖 ffmpeg-devel
yum install ffmpeg-devel
#安装依赖ffmpeg
yum install ffmpeg
输出一下内容即表示安装完成,执行ffmpeg version命令,可以直接打印版本等信息。
三、构建和编译项目(启用WebRTC功能)
作者编译zlm启用了webrtc功能
编译机器:
bash
centos 7.9
gcc version 4.8.5 (GCC)
cmake version 3.26.3
1、 openssl 安装 (openssl版本要求1.1以上)
新建文件夹openssl
bash
mkdir /openssl
cd /openssl
$ wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz
$ tar -xvzf openssl-1.1.1k.tar.gz
$ yum install -y zlib zlib-devel perl-CPAN
$ cd openssl-1.1.1k
$ mkdir -p /usr/local/openssl
$ ./config shared --openssldir=/openssl/openssl-1.1.1k --prefix=/usr/local/openssl
$ make && make install
$ echo "/usr/local/lib64/" >> /etc/ld.so.conf
$ echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
$ ldconfig
$ ln -s /usr/local/openssl/bin/openssl /usr/local/bin/openssl # 替换系统openssl,非必须
$ openssl version -a
2、 libsrtp安装
去 这里 下载。
bash
$ tar -xvzf libsrtp-2.3.0.tar.gz
$ cd libsrtp-2.3.0
$ ./configure --enable-openssl --with-openssl-dir=/usr/local/openssl
$ make -j8 && make install
如果对于一些比较新的编译环境(如GCC 10+),编译 libsrtp-2.3.0 可能会存在问题,可以考虑切换到 2.5.0 版本,即
bash
$ wget https://github.com/cisco/libsrtp/archive/refs/tags/v2.5.0.tar.gz
$ tar -xvzf libsrtp-2.5.0.tar.gz
$ cd libsrtp-2.5.0
3、 编译ZLM
终于到了最振奋人心的时刻了,哈哈
bash
$ mkdir build
$ cd build
$ cmake .. -DENABLE_WEBRTC=true -DOPENSSL_ROOT_DIR=/usr/local/openssl -DOPENSSL_LIBRARIES=/usr/local/openssl/lib
$ cmake --build . --target MediaServer
输出
bash
[ 96%] Built target test_rtcp_fci
[ 96%] Building CXX object tests/CMakeFiles/test_rtp.dir/test_rtp.cpp.o
[ 97%] Linking CXX executable ../../release/linux/Debug/test_rtp
[ 97%] Built target test_rtp
[ 97%] Building CXX object tests/CMakeFiles/test_wsServer.dir/test_wsServer.cpp.o
[ 97%] Linking CXX executable ../../release/linux/Debug/test_wsServer
[ 97%] Built target test_wsServer
[ 97%] Building CXX object tests/CMakeFiles/test_server.dir/test_server.cpp.o
[ 97%] Linking CXX executable ../../release/linux/Debug/test_server
[ 97%] Built target test_server
[ 98%] Built target jsoncpp
[ 98%] Linking CXX executable ../../release/linux/Debug/MediaServer
[100%] Built target MediaServer
四、运行
ZLMediaKit工程主要生成的二进制目标文件在release目录下。
这是ZLMediaKit作为服务器的主进程,该进程可以在免去开发的情况下直接作为测试流媒体服务器使用,如果你需要更复杂的业务逻辑,可以通过Web HOOK和RESTful API实现,同时你可以通过 配置文件 控制其参数。
在linux下启动:
bash
cd ZLMediaKit/release/linux/Debug
#通过-h可以了解启动参数
./MediaServer -h
#以守护进程模式启动
./MediaServer -d &
根据 config.ini 文件中 http 部分的配置,启动之后通过浏览器直接访问,如果看到如下界面,就表示已经启动成功了。
停止或者关闭命令。
bash
killall -2 MediaServer