软件简介
- 基于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
项目地址
编译
使用的系统
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服务器的地址和流媒体路径。