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播放测试

相关推荐
全栈派森1 小时前
云存储最佳实践
后端·python·程序人生·flask
CircleMouse2 小时前
基于 RedisTemplate 的分页缓存设计
java·开发语言·后端·spring·缓存
獨枭3 小时前
使用 163 邮箱实现 Spring Boot 邮箱验证码登录
java·spring boot·后端
维基框架3 小时前
Spring Boot 封装 MinIO 工具
java·spring boot·后端
秋野酱3 小时前
基于javaweb的SpringBoot酒店管理系统设计与实现(源码+文档+部署讲解)
java·spring boot·后端
☞无能盖世♛逞何英雄☜3 小时前
Flask框架搭建
后端·python·flask
进击的雷神3 小时前
Perl语言深度考查:从文本处理到正则表达式的全面掌握
开发语言·后端·scala
进击的雷神3 小时前
Perl测试起步:从零到精通的完整指南
开发语言·后端·scala
豌豆花下猫4 小时前
Python 潮流周刊#102:微软裁员 Faster CPython 团队(摘要)
后端·python·ai
秋野酱5 小时前
基于javaweb的SpringBoot驾校预约学习系统设计与实现(源码+文档+部署讲解)
spring boot·后端·学习