ZLMediaKit安装配置和推拉流
wptr33 2025-05-24 17:33 57 浏览
一、ZLMediaKit 库简介
ZLMediaKit 是一个基于 C++11 的高性能运营级流媒体服务框架
官方写的项目特点:
- 基于 C++11 开发,避免使用裸指针,代码稳定可靠,性能优越。
- 支持多种协议(RTSP/RTMP/HLS/HTTP-FLV/Websocket-FLV/GB28181/MP4),支持协议互转。
- 使用多路复用/多线程/异步网络 IO 模式开发,并发性能优越,支持海量客户端连接。
- Epoll, IoCompletionPort
- 代码经过长期大量的稳定性、性能测试,已经在线上商用验证已久。 支持 linux、macos、 ios、android、windows 全平台。
- 支持画面秒开、极低延时(500 毫秒内,最低可达 100 毫秒)。 提供完善的标准 C API,可 以作 SDK 用,或供其他语言调用。
- 提供完整的 MediaServer 服务器,可以免开发直接部署为商用服务器。 提供完善的 restful api 以及 web hook,支持丰富的业务逻辑。 打通了视频监控协议栈与直播协议 栈,对 RTSP/RTMP 支持都很完善。
- 全面支持 H265/H264/AAC/G711/OPUS。 其功能非常多,支持 RTSP、RTMP[S]、HLS、GB28181 等多种流媒体格式。
二、Linux环境搭建
1、安装依赖
下边的这些依赖库尽量安装一下,如果个别出错,不用管他。
安装依赖时,需要进可能充分一点
sudo apt install git gcc make cmake python p7zip-full libssl-dev pkg-config autoconf automake build-essential -y
sudo apt-get -y --force-yes install libass-dev
sudo apt-get -y --force-yes install libtheora-dev libtool libva-dev libvdpau-dev
sudo apt-get -y --force-yes install libvorbis-dev libxcb1-dev libxcb-shm0-dev
sudo apt-get -y --force-yes install libxcb-xfixes0-dev pkg-config texi2html zlib1g-dev
# 安装 gcc
sudo apt-get install build-essential
# 安装 cmake
sudo apt-get install cmake
# 安装依赖库 #除了 openssl,其他其实都可以不安装
sudo apt-get install libssl-dev -y
sudo apt-get install libsdl-dev -y
sudo apt-get install libavcodec-dev -y
sudo apt-get install libavutil-dev -y
sudo apt-get install ffmpeg -y
2、下载源码
请不要使用 github 下载 zip 包的方式下载源码,务必使用 git 克隆 ZLMediaKit 的代码,因为
ZLMediaKit 依赖于第三方代码,
zip 包不会下载第三方依赖源码,你可以这样操作:
#国内用户推荐从同步镜像网站 gitee 下载
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
#千万不要忘记执行这句命令:第三方库
git submodule update --init
3、安装 openssl
看一下自己系统的版本
openssl verison
编译 openssl
git clone https://github.com/openssl/openssl.git
或者搞一个稳定版本(建议用这个),请自己翻墙
wget https://github.com/openssl/openssl/archive/refs/heads/OpenSSL_1_1_1-stable.zip
下载完后编译
./config
make
sudo make install
指定快捷方式
因为默认安装到/usr/local 目录,或者 config 的时候指定/usr/lib,要不就把库链接过去
sudo ln -s /usr/local/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1
sudo ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1
4、安装 libsrtp
下载源码
git clone https://github.com/cisco/libsrtp.git
配置编译安装
cd libsrtp
./configure --enable-openssl
make
make runtest
sudo make install
测试
# 首先,进入 libsrtp 的测试文件目录
cd test
# 然后,执行测试命令如下
./rtpw_test.sh
最后面出现:./rtpw_test.sh : done (test passed)
本文福利, 免费领取C++音视频学习资料包+学习路线大纲、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs),有需要的可以进企鹅裙927239107领取哦~
5、编译 ZLMediaKit
进入刚刚下载的ZLMediaKit源码目录
直接运行根目录脚本
./build_for_linux.sh
错误一 libsrtp
srtp2/srtp.h: 没有那个文件或目录
这是因为缺少 libsrtp2 这个库
so…
sudo apt-get install libsrtp0-dev
老版本行不通,老老实实编源码
这里插一句,因为 openssl 版本问题导致二次编译 libsrtp,所以我们先搞定 openssl
未定义标识符 HMAC_CTX_init
MediaServer crash
libsrtp 没有–enable-openssl
错误二: openssl 版本问题
SSLUtil.cpp:315:33: error: invalid conversion from ‘const rsa_st*’ to ‘RSA* {aka rsa_st*}’
[-fpermissive]
以上都是 openssl 版本问题
ln: 无法创建符号链接’/usr/lib64/libssl.so.1.1’: 没有那个文件或目录
创建软连接解决
编译完成的程序在
ZLMediaKit/release/linux/Debug 下
运行测试
# 进入MediaServer目录
cd ZLMediaKit/release/linux/Debug
# 将配置文件 ZLMediaKit/conf/config.ini 复制到 MediaServer 同目录下
cp ../../../conf/config.ini ./
# 开始运行
sudo ./MediaServer
注意:程序启动失败,提示端口被占用,请修改配置文件中修改被占用的端口号后重试
三、推流、拉流
推流
rtsp push
ffmpeg -re -i 1.mp4 -vcodec libx264 -bsf:v h264_mp4toannexb -acodec aac -f rtsp -rtsp_transport tcp rtsp://codehere.top:554/live/test1
rtmp push
ffmpeg -re -i ande10.mp4 -vcodec libx264 -bsf:v h264_mp4toannexb -acodec aac -f flv rtmp://codehere.top:1936/live/test2
拉流
ffplay -i rtsp://codehere.top:554/live/test1 -fflags nobuffer
ffplay -i rtmp://192.168.1.6/live/test1 -fflags nobuffer
ffplay -i rtmp://192.168.1.6/live/test2 -fflags nobuffer
ffplay -i rtsp://192.168.1.6/live/test2 -fflags nobuffer
相关推荐
- MySQL进阶五之自动读写分离mysql-proxy
-
自动读写分离目前,大量现网用户的业务场景中存在读多写少、业务负载无法预测等情况,在有大量读请求的应用场景下,单个实例可能无法承受读取压力,甚至会对业务产生影响。为了实现读取能力的弹性扩展,分担数据库压...
- 3分钟短文 | Laravel SQL筛选两个日期之间的记录,怎么写?
-
引言今天说一个细分的需求,在模型中,或者使用laravel提供的EloquentORM功能,构造查询语句时,返回位于两个指定的日期之间的条目。应该怎么写?本文通过几个例子,为大家梳理一下。学习时...
- 一文由浅入深带你完全掌握MySQL的锁机制原理与应用
-
本文将跟大家聊聊InnoDB的锁。本文比较长,包括一条SQL是如何加锁的,一些加锁规则、如何分析和解决死锁问题等内容,建议耐心读完,肯定对大家有帮助的。为什么需要加锁呢?...
- 验证Mysql中联合索引的最左匹配原则
-
后端面试中一定是必问mysql的,在以往的面试中好几个面试官都反馈我Mysql基础不行,今天来着重复习一下自己的弱点知识。在Mysql调优中索引优化又是非常重要的方法,不管公司的大小只要后端项目中用到...
- MySQL索引解析(联合索引/最左前缀/覆盖索引/索引下推)
-
目录1.索引基础...
- 你会看 MySQL 的执行计划(EXPLAIN)吗?
-
SQL执行太慢怎么办?我们通常会使用EXPLAIN命令来查看SQL的执行计划,然后根据执行计划找出问题所在并进行优化。用法简介...
- MySQL 从入门到精通(四)之索引结构
-
索引概述索引(index),是帮助MySQL高效获取数据的数据结构(有序),在数据之外,数据库系统还维护者满足特定查询算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构...
- mysql总结——面试中最常问到的知识点
-
mysql作为开源数据库中的榜一大哥,一直是面试官们考察的重中之重。今天,我们来总结一下mysql的知识点,供大家复习参照,看完这些知识点,再加上一些边角细节,基本上能够应付大多mysql相关面试了(...
- mysql总结——面试中最常问到的知识点(2)
-
首先我们回顾一下上篇内容,主要复习了索引,事务,锁,以及SQL优化的工具。本篇文章接着写后面的内容。性能优化索引优化,SQL中索引的相关优化主要有以下几个方面:最好是全匹配。如果是联合索引的话,遵循最...
- MySQL基础全知全解!超详细无废话!轻松上手~
-
本期内容提醒:全篇2300+字,篇幅较长,可搭配饭菜一同“食”用,全篇无废话(除了这句),干货满满,可收藏供后期反复观看。注:MySQL中语法不区分大小写,本篇中...
- 深入剖析 MySQL 中的锁机制原理_mysql 锁详解
-
在互联网软件开发领域,MySQL作为一款广泛应用的关系型数据库管理系统,其锁机制在保障数据一致性和实现并发控制方面扮演着举足轻重的角色。对于互联网软件开发人员而言,深入理解MySQL的锁机制原理...
- Java 与 MySQL 性能优化:MySQL分区表设计与性能优化全解析
-
引言在数据库管理领域,随着数据量的不断增长,如何高效地管理和操作数据成为了一个关键问题。MySQL分区表作为一种有效的数据管理技术,能够将大型表划分为多个更小、更易管理的分区,从而提升数据库的性能和可...
- MySQL基础篇:DQL数据查询操作_mysql 查
-
一、基础查询DQL基础查询语法SELECT字段列表FROM表名列表WHERE条件列表GROUPBY分组字段列表HAVING分组后条件列表ORDERBY排序字段列表LIMIT...
- MySql:索引的基本使用_mysql索引的使用和原理
-
一、索引基础概念1.什么是索引?索引是数据库表的特殊数据结构(通常是B+树),用于...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
程序员的开源月刊《HelloGitHub》第 71 期
-
详细介绍一下Redis的Watch机制,可以利用Watch机制来做什么?
-
假如有100W个用户抢一张票,除了负载均衡办法,怎么支持高并发?
-
如何将AI助手接入微信(打开ai手机助手)
-
Java面试必考问题:什么是乐观锁与悲观锁
-
SparkSQL——DataFrame的创建与使用
-
redission YYDS spring boot redission 使用
-
一文带你了解Redis与Memcached? redis与memcached的区别
-
如何利用Redis进行事务处理呢? 如何利用redis进行事务处理呢英文
-
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)