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

文章目录

  • 一、前言
  • 二、编译器
    • 1、获取代码
    • 2、编译器
      • 2.1 编译器版本要求
      • 2.2 安装编译器
    • 3、安装cmake
    • 4、依赖库
      • 4.1 依赖库列表
      • 4.2 安装依赖库
        • 4.2.1 安装libssl-dev和libsdl-dev
        • 4.2.2 安装 ffmpeg-devel依赖和ffmpeg依赖
  • 三、构建和编译项目(启用WebRTC功能)
    • 1、 openssl 安装 (openssl版本要求1.1以上)
    • 2、 libsrtp安装
    • 3、 编译ZLM
  • 四、运行


一、前言

  ZLMediaKit的作者是使用Ubuntu 16开发的,但是如果要跑到测试甚至于生产上必须要部署到centos上,笔者使用的是centos7.9环境,因为有需求就装完给大家分享一下。

二、编译器

1、获取代码

如果没有git,需要先安装git,有了yum都不是难事。

yum install git

验证git安装情况

[root@localhost zlm]# git version
git version 1.8.3.1

拉取代码

#国内用户推荐从同步镜像网站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编译器:

yum -y install gcc
yum -y install gcc-c++

3、安装cmake

ZLMediaKit采用cmake来构建项目,通过cmake才能生成Makefile(或Xcode/VS工程),所以必须先安装cmake才能完成后续步骤。

ZLMediaKit官网的办法,安装cmake,发现版本还是太低,不满足最低的cmake版本要求。

#官方提供的安装办法(版本太低)
yum -y install cmake

作者使用下面的办法进行安装,首先下载对应的安装包,如果github的资源无法下载,可以先去找对应的文件,手动拷贝到目标机器上,进行后续的操作。

wget https://github.com/Kitware/CMake/releases/download/v3.26.3/cmake-3.26.3.tar.gz
#解压
tar -zxvf cmake-3.26.3.tar.gz

cd cmake-3.26.3
./bootstrap

#这步耗时较长,请耐心等待
gmake

#进行安装
gmake install

#检查版本
cmake --version

出现了错误

[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 命令本来存在,然后进行了安装。 类似于缓存导致失败的一样。

hash -r

然后再执行

[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
#安装libssl-dev
yum install openssl-devel

#安装libsdl-dev
yum install SDL-devel

4.2.2 安装 ffmpeg-devel依赖和ffmpeg依赖

直接安装可能会提示 没有可用软件包 的问题

[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源,按照以下步骤进行操作。

执行下面这条命令

#安装 epel-release
yum install epel-release -y
#通过rpmfusion存储库安装 rpm
yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm
#清理缓存
yum clean all
#重新生成缓存
yum makecache
#升级yum源
yum uptade
#安装依赖 ffmpeg-devel
yum install ffmpeg-devel
#安装依赖ffmpeg
yum install ffmpeg

输出一下内容即表示安装完成,执行ffmpeg version命令,可以直接打印版本等信息。
在这里插入图片描述

三、构建和编译项目(启用WebRTC功能)

作者编译zlm启用了webrtc功能

编译机器:

centos 7.9
gcc version 4.8.5 (GCC)
cmake version 3.26.3

1、 openssl 安装 (openssl版本要求1.1以上)

新建文件夹openssl

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
$ ./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安装

去 这里 下载。

$ 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 版本,即

$ 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

终于到了最振奋人心的时刻了,哈哈

$ mkdir build
$ cd build
$ cmake .. -DENABLE_WEBRTC=true  -DOPENSSL_ROOT_DIR=/usr/local/openssl  -DOPENSSL_LIBRARIES=/usr/local/openssl/lib
$ cmake --build . --target MediaServer

输出

[ 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下启动:

cd ZLMediaKit/release/linux/Debug
#通过-h可以了解启动参数
./MediaServer -h
#以守护进程模式启动
./MediaServer -d &

根据 config.ini 文件中 http 部分的配置,启动之后通过浏览器直接访问,如果看到如下界面,就表示已经启动成功了。
在这里插入图片描述

停止或者关闭命令。

killall -2 MediaServer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/246147.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pytorch:to()、device()、cuda()将Tensor或模型移动到指定的设备上

将Tensor或模型移动到指定的设备上:tensor.to(‘cuda:0’) 最开始读取数据时的tensor变量copy一份到device所指定的GPU上去,之后的运算都在GPU上进行在做高维特征运算的时候,采用GPU无疑是比用CPU效率更高,如果两个数据中一个加了…

智慧城市/一网统管建设:人员危险行为检测算法,为城市安全保驾护航

随着人们压力的不断增加,经常会看见在日常生活中由于小摩擦造成的大事故。如何在事故发生时进行及时告警,又如何在事故发生后进行证据搜索与事件溯源?旭帆科技智能视频监控人员危险行为/事件检测算法可以给出答案。 全程监控,有源…

智能优化算法应用:基于探路者算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于探路者算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于探路者算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.探路者算法4.实验参数设定5.算法结果6.参考文…

人工智能导论习题集(5)

第四章:搜索策略 题1题2 题1 题2 参考文献:https://blog.csdn.net/m0_64372178/article/details/134890561

平头哥玄铁 E906 编译与使用

1、E906 概述 与玄铁 E902 一样, E906 核的 RTL 代码也是开源的,开源仓库地址:https://github.com/T-head-Semi/opene906 玄铁 E906 是一款完全可综合的中端 MCU 级处理器,兼容 RV32IMA[F][D]C[P] 指令集,提供可观的…

C# WPF上位机开发(动态添加控件)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 写图形界面软件的时候,我们经常会遇到一种情况。那就是图形界面上面,显示的控件可能是不定的。有可能多,也有可…

JupyterNotebook VS JupyterLab 如果jupyter安装成功,点击jupyterlab即可进入lab环境

简介 JupyterNotebook 是一个款以网页为基础的交互计算环境,可以创建Jupyter的文档,支持多种语言,包括Python, Julia, R等等。一般来说,如果是使用R语言的话,使用Rstudio居多,使用Python的话,使…

消息队列 - RabbitMQ

消息队列 - RabbitMQ 1. 初识 MQ1.1 同步调用1.2 异步调用1.3.技术选型 2. RabbitMQ2.1 安装2.2 收发信息2.2.1 交换机(Exchange)2.2.2 队列2.2.3 绑定关系2.2.4 发送消息 2.3 数据隔离 相关文章: SpringAMQP 快速入门 RabbitMQ 如何保证消息可靠性 1. 初识 MQ 微服务一旦拆分…

beyond compare文件夹比较时候文本乱码问题解决

“格式”,在下面的左侧编码重写和右侧编码覆盖选择 GB2312/UTF-8/GBK,这个可以根据自己喜好和文本自身的encode选择。

C++ 指针基础

指针的定义 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h>int main() {int a 10;printf("%p\n", &a); // &a 表示取&#xff08;a&#xff09;的地址 000000842FD9FB64// 存放指针&#xff08;地址&#xff09;的变量就是指针变量&#xff0c…

Java中的链表

文章目录 前言一、链表的概念及结构二、单向不带头非循坏链表的实现2.1打印链表2.2求链表的长度2.3头插法2.4尾插法2.5任意位置插入2.6查找是否包含某个元素的节点2.7删除第一次出现这个元素的节点2.8删除包含这个元素的所以节点2.9清空链表单向链表的测试 三、双向不带头非循坏…

spring 笔记三 Spring与Web环境集成

文章目录 Spring与Web环境集成ApplicationContext应用上下文获取方式导入Spring集成web的坐标置ContextLoaderListener监听器通过工具获得应用上下文对象SpringMVC概述SpringMVC快速入门 Spring与Web环境集成 ApplicationContext应用上下文获取方式 应用上下文对象是通过new …

leetcode面试经典150题——36 旋转图像

题目&#xff1a; 旋转图像 描述&#xff1a; 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#x…

中国经济增长:全球复苏的引擎

近年来&#xff0c;中国经济以其强劲的增长势头成为全球经济的重要引擎。中国的经济崛起不仅对自身国家发展具有重要意义&#xff0c;而且也对全球经济复苏和稳定有着积极影响。本文将从多个角度探讨中国经济增长对全球经济的影响及其作为全球复苏的引擎。 首先&#xff0c;中国…

《使用ThinkPHP6开发项目》 - ThinkPHP6使用JWT生成Token

《使用ThinkPHP6开发项目》 - 登录接口一-CSDN博客 《使用ThinkPHP6开发项目》 - 登录接口二-CSDN博客 《使用ThinkPHP6开发项目》 - 登录接口三【表单验证】-CSDN博客 登录接口成功后返回Token&#xff0c;便于其他需要验证用户登录的接口携带Token进行请求校验 这里Think…

基于ssm网络安全宣传网站设计论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本网络安全宣传网站就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

SI24R03国产自主可控RISC-V架构MCU低功耗2.4GHz收发芯片SoC

目录 RISC-V架构的优势SI24R03/04特性射频收发器模块特征MCU 模块特征 其他特征 RISC-V架构的优势 相对于目前主流的英特尔X86架构及ARM等架构来说&#xff0c;RISC-V架构具有指令精简、模块化、可扩展、开源、免费等优点。RISC-V的基础指令集只有40多条&#xff0c;加上其他基…

爬虫的分类

爬虫的分类 网络爬虫按照系统结构和实现技术&#xff0c;大致可分为4类&#xff0c;即通用网络爬虫、聚焦网络爬虫、增量网络爬虫和深层次网络爬虫。 1.通用网络爬虫&#xff1a;搜索引擎的爬虫 比如用户在百度搜索引擎上检索对应关键词时&#xff0c;百度将对关键词进行分析…

比特币价格创新高:加密货币的崛起与未来

一、引言 近年来&#xff0c;比特币的价格一路上涨&#xff0c;引起了全球投资者和市场的广泛关注。作为最早一批区块链技术应用案例之一&#xff0c;比特币的成功带动了整个加密货币市场的兴起。本文将探讨比特币价格创新高的原因、加密货币的崛起以及未来发展趋势。 二、比特…

ChatGPT热门项目

1.智能GPT 项目地址&#xff1a;智能GPT&#xff1a;你只要提供OpenAI的API Key&#xff0c;那么它就可以根据你设定的目标&#xff0c;采用Google搜索、浏览网站、执行脚本等方式 主要语言&#xff1a;Python 推荐理由&#xff1a;这是由开发者Significant Gravitas推出的项目…