ZLMediaKit 编译以及测试(Centos 7.9 环境)

文章目录


一、前言

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
相关推荐
传而习乎3 小时前
Linux:CentOS 7 解压 7zip 压缩的文件
linux·运维·centos
谭震鸿16 小时前
Zookeeper集群搭建Centos环境下
分布式·zookeeper·centos
a_安徒生1 天前
window系统改为Linux系统
linux·windows·centos·系统安全
杰哥的技术杂货铺1 天前
Centos 7 安装 Docker 最新版本
linux·docker·centos
jerry-891 天前
CentOS 7安装SSHFS 实现远程主机目录 挂载为本地目录
linux·运维·centos
moxiaoran57531 天前
Centos使用docker搭建Graylog日志平台
docker·centos·graylog
丁总学Java2 天前
在 CentOS 系统上直接安装 MongoDB 4.0.25
mongodb·centos
技术-hxy2 天前
由于centos停更,yum、docker等不支持,采用阿里云仓库搭建K8S
centos·k8s
shaderdx3 天前
CentOS使用中遇到的问题及解决方法
linux·服务器·centos
kejijianwen4 天前
Algen的跨链互操作性:增强区块链连接性
运维·centos·区块链