ZLMediaKit搭建直播平台

软件简介

  • 基于C++11开发,避免使用裸指针,代码稳定可靠,性能优越。
  • 支持多种协议(RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/GB28181/HTTP-TS/WebSocket-TS/HTTP-fMP4/WebSocket-fMP4/MP4/WebRTC),支持协议互转。
  • 使用多路复用/多线程/异步网络IO模式开发,并发性能优越,支持海量客户端连接。
  • 代码经过长期大量的稳定性、性能测试,已经在线上商用验证已久。
  • 支持linux、macos、ios、android、windows全平台。
  • 支持x86、arm、risc-v、mips、龙芯、申威等指令集平台。
  • 支持画面秒开、极低延时(500毫秒内,最低可达100毫秒)。
  • 提供完善的标准C API,可以作SDK用,或供其他语言调用。
  • 提供完整的MediaServer服务器,可以免开发直接部署为商用服务器。
  • 提供完善的restful api以及web hook,支持丰富的业务逻辑。
  • 打通了视频监控协议栈与直播协议栈,对RTSP/RTMP支持都很完善。
  • 功能完善,支持集群、按需转协议、按需推拉流、先播后推、断连续推等功能。
  • 极致性能,单机10W级别播放器,100Gb/s级别io带宽能力。
  • 全面支持ipv6网络
  • 支持多轨道模式(一个流中多个视频/音频)
  • 全协议支持H264/H265/AAC/G711/OPUS/MP3,部分支持VP8/VP9/AV1/JPEG/MP3/H266/ADPCM/SVAC/G722/G723/G729

项目地址

github.com/ZLMediaKit/...

编译

使用的系统

sh 复制代码
➜  ~ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 12 (bookworm)
Release:        12
Codename:       bookworm

克隆项目

sh 复制代码
git clone --depth 1 https://github.com/ZLMediaKit/ZLMediaKit.git

切换到项目目录

sh 复制代码
cd ZLMediaKit

更新源

sh 复制代码
git submodule update --init 

开始构建

项目使用的是cmake构建的,因此在构建之前需要提前安装下cmake构建工具和必备的软件工具包

sh 复制代码
apt install cmake

构建

sh 复制代码
mkdir build
cd build
cmake ..
make -j 4

查看运行的参数

构建成功以后我们查看一下运行的参数

切换到构建好的二进制程序目录

sh 复制代码
cd /root/ZLMediaKit/release/linux/Debug

查看命令参数

sh 复制代码
➜  Debug git:(master) ./MediaServer -h
2025-03-30 14:25:11.959 I [MediaServer] [3754-MediaServer] Factory.cpp:35 registerPlugin | Load codec: H264
2025-03-30 14:25:11.959 I [MediaServer] [3754-MediaServer] Factory.cpp:35 registerPlugin | Load codec: H265
2025-03-30 14:25:11.959 I [MediaServer] [3754-MediaServer] Factory.cpp:35 registerPlugin | Load codec: JPEG
2025-03-30 14:25:11.959 I [MediaServer] [3754-MediaServer] Factory.cpp:35 registerPlugin | Load codec: mpeg4-generic
2025-03-30 14:25:11.959 I [MediaServer] [3754-MediaServer] Factory.cpp:35 registerPlugin | Load codec: opus
2025-03-30 14:25:11.959 I [MediaServer] [3754-MediaServer] Factory.cpp:35 registerPlugin | Load codec: PCMA
2025-03-30 14:25:11.959 I [MediaServer] [3754-MediaServer] Factory.cpp:35 registerPlugin | Load codec: PCMU
2025-03-30 14:25:11.959 I [MediaServer] [3754-MediaServer] Factory.cpp:35 registerPlugin | Load codec: L16
2025-03-30 14:25:11.959 I [MediaServer] [3754-MediaServer] Factory.cpp:35 registerPlugin | Load codec: MP3
  -h  --help       无参  默认:null                                              选填  打印此信息
  -d  --daemon     无参  默认:null                                              选填  是否以Daemon方式启动
  -l  --level      有参  默认:1                                                 选填  日志等级,LTrace~LError(0~4)
  -m  --max_day    有参  默认:7                                                 选填  日志最多保存天数
  -c  --config     有参  默认:/root/ZLMediaKit/release/linux/Debug/config.ini   选填  配置文件路径
  -s  --ssl        有参  默认:/root/ZLMediaKit/release/linux/Debug/default.pem  选填  ssl证书文件或文件夹,支持p12/pem类型
  -t  --threads    有参  默认:4                                                 选填  启动事件触发线程数
      --affinity   有参  默认:1                                                 选填  是否启动cpu亲和性设置
  -v  --version    无参  默认:null                                              选填  显示版本号
      --log-slice  有参  默认:100                                               选填  最大保存日志切片个数
      --log-size   有参  默认:256                                               选填  单个日志切片最大容量,单位MB
      --log-dir    有参  默认:/root/ZLMediaKit/release/linux/Debug/log/         选填  日志保存文件夹路径

2025-03-30 14:25:11.960 I [MediaServer] [3754-MediaServer] logger.cpp:91 ~Logger | 

启动

以守护进程启动

sh 复制代码
 ./MediaServer -d &

查看下监听的端口

sh 复制代码
➜  Debug git:(master) ss -tunlp
Netid   State    Recv-Q   Send-Q     Local Address:Port       Peer Address:Port   Process                                                  
udp     UNCONN   0        0                0.0.0.0:68              0.0.0.0:*       users:(("dhclient",pid=602,fd=7))                       
udp     UNCONN   0        0                0.0.0.0:68              0.0.0.0:*       users:(("dhclient",pid=549,fd=7))                       
udp     UNCONN   0        0                      *:9000                  *:*       users:(("MediaServer",pid=3850,fd=21))                  
udp     UNCONN   0        0                      *:9000                  *:*       users:(("MediaServer",pid=3850,fd=26))                  
udp     UNCONN   0        0                      *:9000                  *:*       users:(("MediaServer",pid=3850,fd=27))                  
udp     UNCONN   0        0                      *:9000                  *:*       users:(("MediaServer",pid=3850,fd=28))                  
udp     UNCONN   0        0                      *:10000                 *:*       users:(("MediaServer",pid=3850,fd=22))                  
udp     UNCONN   0        0                      *:10000                 *:*       users:(("MediaServer",pid=3850,fd=23))                  
udp     UNCONN   0        0                      *:10000                 *:*       users:(("MediaServer",pid=3850,fd=24))                  
udp     UNCONN   0        0                      *:10000                 *:*       users:(("MediaServer",pid=3850,fd=25))                  
tcp     LISTEN   0        128              0.0.0.0:22              0.0.0.0:*       users:(("sshd",pid=672,fd=3))                           
tcp     LISTEN   0        511              0.0.0.0:6379            0.0.0.0:*       users:(("redis-server",pid=665,fd=6))                   
tcp     LISTEN   0        1024                   *:10000                 *:*       users:(("MediaServer",pid=3850,fd=20))                  
tcp     LISTEN   0        1024                   *:1935                  *:*       users:(("MediaServer",pid=3850,fd=17))                  
tcp     LISTEN   0        4096                   *:4369                  *:*       users:(("epmd",pid=664,fd=3),("systemd",pid=1,fd=57))   
tcp     LISTEN   0        1024                   *:443                   *:*       users:(("MediaServer",pid=3850,fd=19))                  
tcp     LISTEN   0        128                 [::]:22                 [::]:*       users:(("sshd",pid=672,fd=4))                           
tcp     LISTEN   0        1024                   *:80                    *:*       users:(("MediaServer",pid=3850,fd=18))                  
tcp     LISTEN   0        1024                   *:554                   *:*       users:(("MediaServer",pid=3850,fd=16))

测试

使用ffmpeg推流

sh 复制代码
# rtsp推流格式
ffmpeg.exe -re -i .\nana.mp4 -vcodec libx264 -bsf:v h264_mp4toannexb -acodec aac -f rtsp -rtsp_transport tcp rtsp://192.168.0.38/live/test1

# rtmp推流格式
ffmpeg.exe -re -i .\nana.mp4 -vcodec libx264 -bsf:v h264_mp4toannexb -acodec aac -f flv rtmp://192.168.0.38/live/test2

参数说明

  • -re:以原始帧率读取输入文件,适用于实时流媒体。
  • -i .\nana.mp4:指定输入文件为当前目录下的nana.mp4
  • -vcodec libx264:使用libx264编码器对视频进行编码。
  • -bsf:v h264_mp4toannexb:添加一个比特流过滤器(Bitstream Filter),将H.264编码转换为Annex B格式,这是RTSP流媒体常用的格式。
  • -acodec aac:使用AAC编码器对音频进行编码。
  • -f rtsp:指定输出格式为RTSP。
  • -rtsp_transport tcp:指定RTSP传输协议为TCP。
  • rtsp://192.168.0.38/live/test1:RTSP服务器的地址和流媒体路径。

使用vlc播放测试

相关推荐
在下木子生4 分钟前
SpringBoot条件装配注解
java·spring boot·后端
huan9926 分钟前
Obsidian 插件篇 - 插件汇总简介
后端
周Echo周29 分钟前
5、vim编辑和shell编程【超详细】
java·linux·c++·后端·编辑器·vim
AronTing34 分钟前
03-深入解析 Spring AOP 原理及源码
后端
逻辑重构鬼才36 分钟前
AES+RSA实现前后端加密通信:全方位安全解决方案
后端
卤蛋七号43 分钟前
JavaSE高级(一)
后端
Java中文社群1 小时前
SpringAI用嵌入模型操作向量数据库!
后端·aigc·openai
暴力袋鼠哥1 小时前
基于Flask的跨境电商头程预警分析系统
后端·python·flask
一只爱撸猫的程序猿2 小时前
防止外部API服务不可用拖垮系统的解决方案
spring boot·后端·程序员
白露与泡影2 小时前
SpringBoot 最大连接数及最大并发数是多少?
spring boot·后端·firefox