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
相关推荐
风跟我说过她5 小时前
HBase完全分布式部署详细教程(含HA高可用版+普通非HA版)
大数据·数据库·分布式·centos·hbase
Violet_YSWY7 小时前
CentOS 的 DVD 镜像 和 Minimal 镜像 的区别
linux·运维·centos
甘韦9 小时前
CentOS 7更换阿里云的源
linux·阿里云·centos
召田最帅boy18 小时前
centos7安装Redis6并设置密码
redis·centos
云和数据.ChenGuang1 天前
openeuler下的git指令集合
linux·运维·数据库·centos
SMF19191 天前
解决从物理机复制的文件无法粘贴到vm虚拟机centos系统中问题
linux·运维·centos
QQ12154614681 天前
Linux CentOS 7配置 Tomcat 系统服务
linux·centos·tomcat
SMF19191 天前
【FTP服务器】Linux(Centos)系统搭建FTP服务器(可根据账号独立配置每个账号的ftp地址)
linux·服务器·centos
努力的小帅1 天前
Linux_进程间通信(Linux入门到精通)
linux·c++·centos·共享内存·进程通信·命名管道·管道的学习
cnskylee2 天前
【Nginx】Nginx-1.28.1版本已恢复对CentOS 7的兼容性
运维·nginx·centos