使用ZLMediaKit 开源项目搭建RTSP 服务器
ZLMediaKit 是啥?
ZLMediaKit是国人开发的开源C++流媒体服务器,同SRS一样是主流的流媒体服务器。
ZLToolKit是基于C++11的高性能服务器框架,和ZLMediaKit是同一个作者,ZLMediaKit正是使用该框架开发的。
官网
ZLMediaKit开源地址:https://github.com/ZLMediaKit/ZLMediaKit
ZLToolKit开源地址:https://github.com/ZLMediaKit/ZLToolKit
国内登陆github非常不稳定,如下是ZLMediaKit对应的gitee 网址
ZLMediaKit: 实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
ZLMediaKit源码分析的一篇文章
原文链接:https://blog.csdn.net/weixin_40355471/article/details/135422631
1.如何使用 ZLMediaKit 搭建RTSP 服务器
1.国内⽤户推荐从同步镜像⽹站gitee下载源码
2.编译相关
2.1 编译器版本要求
在ubuntu上查看g++版本
g++ --version
2.2 安装编译器
build-essential包。 build-essential是一个包含编译软件所需要的基本包集合的元包。它会安装GCC、G++、Make等基本工具,这些工具是编译大部分源代码所必需的
2.3 安装cmake
2.4 依赖库
2.4.1 依赖库列表
2.4.2 安装依赖库
Debian系(包括ubuntu)系统下安装依赖的⽅法:
sudo apt-get install openssl
2.5 构建和编译项⽬
1 cd ZLMediaKit
2 mkdir build
3 cd build
4 #macOS下可能需要这样指定openss路径:cmake .. -DOPENSSL_ROOT_DIR=/usr/lo
cal/Cellar/openssl/1.0.2j/
5 cmake ..
6 make -j4 3 运⾏
1 cd ZLMediaKit/release/linux/Debug
2 #通过-h可以了解启动参数
3 ./MediaServer -h
4 #以守护进程模式启动
5 ./MediaServer -d &
2.本地实验的截图和说明

下载 ZLMediaKit

cd ZLMediaKit

在ubuntu上查看g++版本

linux上要求gcc 版本 >= 4.8(4.7应该也能⽀持),本地安装的ubuntu 是符合标准的,因此
安装编译器
build-essential是一个包含编译软件所需要的基本包集合的元包。它会安装GCC、G++、Make等基本工具,这些工具是编译大部分源代码所必需的
安装cmake
安装依赖库,这里只是安装了openssl
sudo apt-get install openssl
构建和编译项⽬
1 cd ZLMediaKit
2 mkdir build
3 cd build
4 #macOS下可能需要这样指定openss路径:cmake .. -DOPENSSL_ROOT_DIR=/usr/lo
cal/Cellar/openssl/1.0.2j/
5 cmake ..
6 make -j4
3.运行MediaServer
1. 错误排查,原因是 端口号 554 被占用
2. 使用 sudo lsof -i:554 查看554端口被那个 程序占用了
3.使用 sudo kill -9 xxxxx 将 占用该端口的杀死
4. debug目录下的config.ini 改动参数
; auto-generated by mINI class {[api]
apiDebug=1
defaultSnap=./www/logo.png
downloadRoot=./www
secret=nXIB3CEQY1nAtaoDoe0JSwNCNakR3asa
snapRoot=./www/snap/[cluster]
origin_url=
retry_count=3
timeout_sec=15[ffmpeg]
bin=/usr/bin/ffmpeg
cmd=%s -re -i %s -c:a aac -strict -2 -ar 44100 -ab 48k -c:v libx264 -f flv %s
log=./ffmpeg/ffmpeg.log
restart_sec=0
snap=%s -i %s -y -f mjpeg -frames:v 1 -an %s[general]
broadcast_player_count_changed=0
check_nvidia_dev=1
enableVhost=0
enable_ffmpeg_log=0
flowThreshold=1024
listen_ip=::
maxStreamWaitMS=15000
mediaServerId=your_server_id
mergeWriteMS=0
resetWhenRePlay=1
streamNoneReaderDelayMS=20000
unready_frame_cache=100
wait_add_track_ms=3000
wait_audio_track_data_ms=1000
wait_track_ready_ms=10000[hls]
broadcastRecordTs=0
deleteDelaySec=10
fastRegister=0
fileBufSize=65536
segDelay=0
segDur=2
segKeep=0
segNum=3
segRetain=5[hook]
alive_interval=10.0
enable=0
on_flow_report=
on_http_access=
on_play=
on_publish=
on_record_mp4=
on_record_ts=
on_rtp_server_timeout=
on_rtsp_auth=
on_rtsp_realm=
on_send_rtp_stopped=
on_server_exited=
on_server_keepalive=
on_server_started=
on_shell_login=
on_stream_changed=
on_stream_none_reader=
on_stream_not_found=
retry=1
retry_delay=3.0
stream_changed_schemas=rtsp/rtmp/fmp4/ts/hls/hls.fmp4
timeoutSec=10[http]
allow_cross_domains=1
allow_ip_range=::1,127.0.0.1,172.16.0.0-172.31.255.255,192.168.0.0-192.168.255.255,10.0.0.0-10.255.255.255
charSet=utf-8
dirMenu=1
forbidCacheSuffix=
forwarded_ip_header=
keepAliveSecond=30
maxReqSize=40960
notFound=<html><head><title>404 Not Found</title></head><body bgcolor="white"><center><h1>您访问的资源不存在!</h1></center><hr><center>ZLMediaKit(git hash:8bf48ed/2024-12-15T11:43:31+08:00,branch:master,build time:2024-12-19T12:43:26)</center></body></html>
port=80
rootPath=./www
sendBufSize=65536
sslport=443
virtualPath=[multicast]
addrMax=239.255.255.255
addrMin=239.0.0.0
udpTTL=64[protocol]
add_mute_audio=1
auto_close=0
continue_push_ms=15000
enable_audio=1
enable_fmp4=1
enable_hls=1
enable_hls_fmp4=0
enable_mp4=0
enable_rtmp=1
enable_rtsp=1
enable_ts=1
fmp4_demand=0
hls_demand=0
hls_save_path=./www
modify_stamp=2
mp4_as_player=0
mp4_max_second=3600
mp4_save_path=./www
paced_sender_ms=0
rtmp_demand=0
rtsp_demand=0
ts_demand=0[record]
appName=record
enableFmp4=0
fastStart=0
fileBufSize=65536
fileRepeat=0
sampleMS=500[rtc]
externIP=
maxRtpCacheMS=5000
maxRtpCacheSize=2048
max_bitrate=0
min_bitrate=0
nackIntervalRatio=1.0
nackMaxCount=15
nackMaxMS=3000
nackMaxSize=2048
nackRtpSize=8
port=8000
preferredCodecA=PCMA,PCMU,opus,mpeg4-generic
preferredCodecV=H264,H265,AV1,VP9,VP8
rembBitRate=0
start_bitrate=0
tcpPort=8000
timeoutSec=15[rtmp]
directProxy=1
enhanced=0
handshakeSecond=15
keepAliveSecond=15
port=1935
sslport=0[rtp]
audioMtuSize=600
h264_stap_a=1
lowLatency=0
rtpMaxSize=10
videoMtuSize=1400[rtp_proxy]
dumpDir=
gop_cache=1
h264_pt=98
h265_pt=99
opus_pt=100
port=10000
port_range=30000-35000
ps_pt=96
rtp_g711_dur_ms=100
timeoutSec=15
udp_recv_socket_buffer=4194304[rtsp]
authBasic=0
directProxy=1
handshakeSecond=15
keepAliveSecond=15
lowLatency=0
port=554
rtpTransportType=-1
sslport=0[shell]
maxReqSize=1024
port=0[srt]
latencyMul=4
pktBufSize=8192
port=9000
timeoutSec=5; } --- 4. ZLMediaKit 已经启动,使用ffmpeg 命令 给该服务器上 推流数据
1、使⽤rtsp⽅式推流,我们这一节学这个
1 # h264推流
2 ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f rtsp
-rtsp_transport tcp rtsp://127.0.0.1/live/test
3 # h265推流
4 ffmpeg -re -i "/path/to/test.mp4" -vcodec h265 -acodec aac -f rtsp
-rtsp_transport tcp rtsp://127.0.0.1/live/test ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test
如下的推流说明:
我们将D:/resource/zerenlian.mp4 这个文件推流到 ZLmediakit 服务器;
该文件的 视频格式为 -vcodec h264
该文件的 音频格式为 -acodec aac
推流的方式是rtsp -f rtsp
推流是用tcp 的传送的 -rtsp_transport tcp
服务器的地址写法如下:
rtsp://192.168.31.103/test/00000001zerenlian
rtsp:// 代表的固定格式,如果rtsp 格式 就必须这么写 。
192.168.31.103 是linux服务器的IP。
test/00000001zerenlian 是自己命名的,对于 D:/resource/zerenlian.mp4 文件的映射。
ffmpeg -re -i "D:/resource/zerenlian.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://192.168.31.103/test/00000001zerenlian
2.使⽤rtmp⽅式推流
1 #如果未安装FFmpeg,你也可以⽤obs推流
2 ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f flv
rtmp://127.0.0.1/live/test
3 # RTMP标准不⽀持H265,但是国内有⾃⾏扩展的,如果你想让FFmpeg⽀持RTMP-H265,请
按照此⽂章编译:https://github.com/ksvc/FFmpeg/wiki/hevcpush 3.使⽤rtp⽅式推流
1 # h264推流
2 ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f rtp_mpegts rtp://127.0.0.1:10000
3 # h265推流
4 ffmpeg -re -i "/path/to/test.mp4" -vcodec h265 -acodec aac -f rtp_mpegts rtp://127.0.0.1:10000 1 # h264推流
2 ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f rtp_mpegts rtp://127.0.0.1:10000
3 # h265推流
4 ffmpeg -re -i "/path/to/test.mp4" -vcodec h265 -acodec aac -f rtp_mpegts rtp://127.0.0.1:10000
先查看linux的ip,

5. ZLMediaKit 已经启动,使用ffplay 命令从该服务器上 拉流数据
使用 rtsp⽅式拉流
ffplay -rtsp_transport tcp rtsp://192.168.31.103/test/00000001zerenlian
ffplay -rtsp_transport tcp rtsp://192.168.31.103/test/00000001zerenlian 如果我们使用 udp的形式去拉呢?实际测试也是可以的
ffplay -rtsp_transport udp rtsp://192.168.31.103/test/00000001zerenlian
6 log 在这里
相关文章:
使用ZLMediaKit 开源项目搭建RTSP 服务器
ZLMediaKit 是啥? ZLMediaKit是国人开发的开源C流媒体服务器,同SRS一样是主流的流媒体服务器。 ZLToolKit是基于C11的高性能服务器框架,和ZLMediaKit是同一个作者,ZLMediaKit正是使用该框架开发的。 官网 ZLMediaKit开源地址&…...
数组晨考2day08
1.用一句话描述数组 在内存中 一块连续的空间 存储相同类型的数据 长度是固定的 2.数组各个类型的默认值 整数:0 浮点:0.0 布尔:false 字符:\u0000 其他:null 3.Arrays类toString,copyOf,sort&a…...
《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》简介
《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》已于近日上市,该书由北京大学出版社出版。距离第1版上市已经过去二年半多。本文希望与读者朋友们分享下这本书里面的大致内容。 封面部分 首先是介绍封面部分。 《鸿蒙HarmonyOS应用开发从入门…...
麒麟操作系统服务架构保姆级教程(二)sersync、lsync备份和NFS持久化存储
如果你想拥有你从未拥有过的东西,那么你必须去做你从未做过的事情 上篇文章我们说到rsync虽好,但是缺乏实时性,在实际应用中,咱们可以将rsync写进脚本,然后写进定时任务去备份,如果每天凌晨1:00…...
将OBJ或GLB文件转换为3DTiles
格式简介 GLB文件(.GLB)代表“GL传输格式二进制文件”,是用于共享3D数据的标准化文件格式。确切地说,它可以包含有关三维模型、场景、模型、光源、材质、节点层次和动画的信息。 OBJ文件是一种文本文件格式,这就意味…...
Flink DataStream API 编程指南
(对于Flink的开发,建议使用Java,Scala的支持未来会被移除) DataStream是什么 DataStream API得名于DataStream这个Java类,可以将它们视为可以包含重复项的不可变数据集合。该数据可以是有限的,也可以是无限的,用于处理它们的API是相同的。 DataStream在用法上和普通的…...
tryhackme-Pre Security-HTTP in Detail(HTTP的详细内容)
任务一:What is HTTP(S)?(什么是http(s)) 1.What is HTTP? (HyperText Transfer Protocol)(什么是 HTTP?(超文本传输协议)) http是你查看网站的时候遵循的…...
探索 Plotly:一个强大的交互式数据可视化库
探索 Plotly:一个强大的交互式数据可视化库 数据可视化是数据分析过程中不可或缺的一部分,它能帮助我们更直观地理解数据,发现数据中的趋势和规律。在众多可视化库中,Plotly 是一个非常强大的工具,它以其交互式、易用…...
Oracle 查询表占用空间(表大小)的方法
目录 概述方法一:使用 dbms_space 包方法二:查询 dba_extents 视图方法三:查询 dba_segments 视图总结 1. 概述 在Oracle数据库管理中,了解特定表或索引所占用的空间对于性能调优、存储规划以及资源分配至关重要。本文档介绍了三…...
机器人国际会议IROS论文latex模板
机器人国际会议IROS论文latex模板 文档 root.tex 可以配置为 US Letter 纸或 A4。请注意以下重要行:\documentclass[letterpaper, 10 pt, Conference]{ieeeconf} % 如果需要 a4paper,请注释掉此行%\documentclass[a4paper, 10pt, Conference]{ieeeconf} …...
雪泥鸿爪和屈指可数
paw这个单词,表示“爪或手”,是一个和hoof相对的单词: hoof n.(马等动物的)蹄paw n.爪子;(动物的)爪;(人的)手 v.挠,抓;动手动脚 所以,当你理解了 paw 和 hoof 是相对的概念时&…...
2024年度个人总结
一转眼已经2024年度最后一个月了,今年基本没有在CSDN发布内容,包括其他平台(B站),倒是在其他地方(我的个人网站和V2EX)发布一些零碎的东西,主要是因为今年换了工作后太累了ÿ…...
ChatGPT接口测试用例生成的流程
通常,使用ChatGPT生成接口测试用例的流程可以分为以下关键步骤。 收集接口信息 收集接口的相关文档和信息,如接口名称、请求方法、请求参数、返回结果等。这些是ChatGPT生成测试用例需要的输入信息。 这一步骤的重要性不可忽视,因为它为Chat…...
【读书笔记】《论语别裁》真人和假人
一、内容摘要 在《论语别裁》第01章中,作者探讨了“真人”与“假人”的概念,借鉴于庄子的思想,强调真正有道德修养且懂得人生真谛的人被称为“真人”,而那些未达到道德最高标准的人则称为“假人。孔子所提倡的“学”不仅仅是书本…...
JS字符串方法汇总
String.anchor //创建一个带有名称的 <a> 元素字符串 //已弃用 let str test str.anchor(name) //<a name"name">test</a>String.at let str 1234567 str.at(0) //1 str.at(1) //2 str.at(-1) //7 str.at(-2) //6String.big //已弃用 let …...
CentOs7使用yum安装docker
安装docker 一、安装docker依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm2二、添加软件源信息 sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sudo sed -i sdownload.docker.commirrors.…...
蓝桥杯刷题——day8
蓝桥杯刷题——day8 题目一题干解题思路代码 题目二题干解题思路代码 题目一 题干 N 架飞机准备降落到某个只有一条跑道的机场。其中第i架飞机在 Ti时刻到达机场上空,到达时它的剩余油料还可以继续盘旋 Di个单位时间,即它最早可以于 Ti时刻开始降落&am…...
如何使用 WebAssembly 扩展后端应用
1. WebAssembly 简介 随着互联网的发展,越来越多的应用借助 Javascript 转到了 Web 端,但人们也发现,随着移动互联网的兴起,需要把大量的应用迁移到手机端,随着手端的应用逻辑越来越复杂,Javascript 的解析…...
BaseCTF_web_week3
复读机 输入的东西会在下方显示出来,wp说是简单的SSTI,这里来学习一下SSTI SSTI模板注入 根据My4n师傅的《超详细SSTI模板注入漏洞原理讲解_ssti注入-CSDN博客》写的 用户的输入返回时会经过一个模板渲染,SSTI漏洞就是用户插入了可以破坏模板…...
模型数据算法概论
模型数据算法是一类使用数据来构建、优化或训练数学模型的算法,常用于数据科学、机器学习和人工智能领域。它们的核心目标是从数据中提取模式或关系,以便在预测、分类或优化任务中应用。以下是一个简要的概述: 1. 模型 模型是用来描述数据特…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
