找回密码
 立即注册
首页 业界区 业界 ZLMediaKit: 快速入门

ZLMediaKit: 快速入门

皆炳 2025-6-4 22:21:42
目录

  • ZLMediaKit是什么
  • 编译

    • 安装依赖库
    • 构建项目

      • 问题处理

        • 问题1: srtp 未找到, WebRTC 相关功能打开失败
        • 问题2:依赖库问题



  • 安装
  • 配置和运行

    • 问题处理



        • 问题1: 无权限监听554端口
        • 问题2: 80端口已经被使用



  • 推流测试

    • RTSP推流

      • 准备

        • 准备视频文件
        • 安装VLC

      • 推流
      • 拉流验证

        • 问题:拉流失败

      • ZLMediaKit 在 RTSP 推流测试中的作用

        • 接收推流数据
        • 协议处理
        • 流管理
        • 存储和转发

      • 流的流转过程

        • 推流阶段
        • 拉流阶段




ZLMediaKit是什么

ZLMediaKit一个基于C++11的高性能运营级流媒体服务框架,支持多种协议,支持协议互转,打通了视频监控协议栈与直播协议栈, 支持集群、按需转协议、按需推拉流、先播后推、断连续推等功能,支持多轨道模式(一个流中多个视频/音频)。
它的Gitee地址:https://gitee.com/xia-chu/ZLMediaKit
编译

拉取ZLMediaKit。
  1. git clone git@gitee.com:xia-chu/ZLMediaKit.git
复制代码
安装依赖库


  • 安装FFmpeg:用于处理多媒体数据,Ubuntu下执行sudo apt-get install ffmpeg。
构建项目

在ZLMediaKit目录下创建build目录并进入,执行cmake..,然后执行make -j4进行编译。
  1. cd ZLMediaKit
  2. mkdir build
  3. cd build
  4. cmake ..
  5. make -j4
复制代码
问题处理

问题1: srtp 未找到, WebRTC 相关功能打开失败

cmake时遇到下面的错误
错误1:
  1. -- srt 功能已开启
  2. CMake Warning at webrtc/CMakeLists.txt:28 (message):
  3. srtp 未找到, WebRTC 相关功能打开失败
复制代码
解决方法:安装 SRTP 库
  1. sudo apt-get install libsrtp2-dev
复制代码
问题2:依赖库问题
  1. -- Configuring done (2.7s)
  2. CMake Error at 3rdpart/CMakeLists.txt:32 (add_library):
  3. No SOURCES given to target: jsoncpp
  4. CMake Error at 3rdpart/CMakeLists.txt:55 (add_library):
  5. No SOURCES given to target: mov
  6. CMake Error at 3rdpart/CMakeLists.txt:68 (add_library):
  7. No SOURCES given to target: flv
  8. CMake Error at 3rdpart/CMakeLists.txt:91 (add_library):
  9. No SOURCES given to target: mpeg
  10. CMake Error at 3rdpart/CMakeLists.txt:201 (add_library):
  11. No SOURCES given to target: zltoolkit
复制代码
ZLMediaKit 项目里有一些依赖库是通过 Git 子模块来管理的。你需要保证所有子模块都已正确初始化并且更新。在项目根目录下执行以下命令:
  1. git submodule update --init --recursive
复制代码
安装

如果需要安装到系统中,执行sudo make install。
配置和运行


  • 修改配置文件:配置文件位于conf目录下,可按需修改。如修改config.ini中的apiDebug等参数。
  • 启动ZLMediaKit:在ZLMediaKit/release/linux/Debug目录下,可执行./MediaServer -h查看启动参数,
  1. ./MediaServer -h
  2. 2025-03-03 21:15:10.198 I [MediaServer] [5747-MediaServer] Factory.cpp:35 registerPlugin | Load codec: H264
  3. 2025-03-03 21:15:10.219 I [MediaServer] [5747-MediaServer] Factory.cpp:35 registerPlugin | Load codec: H265
  4. 2025-03-03 21:15:10.223 I [MediaServer] [5747-MediaServer] Factory.cpp:35 registerPlugin | Load codec: JPEG
  5. 2025-03-03 21:15:10.228 I [MediaServer] [5747-MediaServer] Factory.cpp:35 registerPlugin | Load codec: mpeg4-generic
  6. 2025-03-03 21:15:10.228 I [MediaServer] [5747-MediaServer] Factory.cpp:35 registerPlugin | Load codec: opus
  7. 2025-03-03 21:15:10.228 I [MediaServer] [5747-MediaServer] Factory.cpp:35 registerPlugin | Load codec: PCMA
  8. 2025-03-03 21:15:10.228 I [MediaServer] [5747-MediaServer] Factory.cpp:35 registerPlugin | Load codec: PCMU
  9. 2025-03-03 21:15:10.228 I [MediaServer] [5747-MediaServer] Factory.cpp:35 registerPlugin | Load codec: L16
  10. 2025-03-03 21:15:10.236 I [MediaServer] [5747-MediaServer] Factory.cpp:35 registerPlugin | Load codec: MP3
  11. -h --help 无参 默认:null 选填 打印此信息
  12. -d --daemon 无参 默认:null 选填 是否以Daemon方式启动
  13. -l --level 有参 默认:1 选填 日志等级,LTrace~LError(0~4)
  14. -m --max_day 有参 默认:7 选填 日志最多保 存天数
  15. -c --config 有参 默认:/mnt/d/ubunt/xmr/program/cpp/ZLMediaKit/release/linux/Debug/config.ini 选填 配置文件路 径
  16. -s --ssl 有参 默认:/mnt/d/ubunt/xmr/program/cpp/ZLMediaKit/release/linux/Debug/default.pem 选填 ssl证书文件或文件夹,支持p12/pem类型
  17. -t --threads 有参 默认:16 选填 启动事件触 发线程数
  18. --affinity 有参 默认:1 选填 是否启动cpu亲和性设置
  19. -v --version 无参 默认:null 选填 显示版本号
  20. --log-slice 有参 默认:100 选填 最大保存日 志切片个数
  21. --log-size 有参 默认:256 选填 单个日志切 片最大容量,单位MB
  22. --log-dir 有参 默认:/mnt/d/ubunt/xmr/program/cpp/ZLMediaKit/release/linux/Debug/log/ 选填 日志保存文 件夹路径
  23. 2025-03-03 21:15:10.441 I [MediaServer] [5747-MediaServer] logger.cpp:91 ~Logger |
复制代码
或./MediaServer -d &以守护进程模式启动。
  1. sudo ./MediaServer -d &
复制代码
问题处理

问题1: 无权限监听554端口

启动./MediaServer -d时显示无权限监听554端口
  1. 2025-03-03 21:41:18.193 W [MediaServer] [5879-MediaServer] sockutil.cpp:433 bind_sock6 | Bind socket failed: permission denied
  2. 2025-03-03 21:41:18.227 E [MediaServer] [5879-MediaServer] main.cpp:448 start_main | Start server failed: Listen on :: 554 failed: permission denied
  3. 2025-03-03 21:41:19.241 W [MediaServer] [5876-MediaServer] System.cpp:153 operator() | 收到主动退出信号,关闭父进程与子进程
  4. 2025-03-03 21:41:19.249 I [MediaServer] [5876-MediaServer] logger.cpp:91 ~Logger |
复制代码
使用sudo执行。
问题2: 80端口已经被使用
  1. 2025-03-03 21:41:28.908 W [MediaServer] [5906-MediaServer] sockutil.cpp:433 bind_sock6 | Bind socket failed: address already in use
  2. 2025-03-03 21:41:28.967 E [MediaServer] [5906-MediaServer] main.cpp:448 start_main | Start server failed: Listen on :: 80 failed: address already in use
  3. 2025-03-03 21:41:29.973 W [MediaServer] [5903-MediaServer] System.cpp:153 operator() | 收到主动退出信号,关闭父进程与子进程
  4. 2025-03-03 21:41:29.985 I [MediaServer] [5903-MediaServer] logger.cpp:91 ~Logger |
复制代码

  • 处理
    80端口被占用,是因为MediaServer处理http时,使用80端口,我采用不处理http的解决方式。
    打开MediaServer的connf.ini(和MediaServer在同一个目录下), 关闭http功能。
    将http下的port由80修改为-1
  1. [http]
  2. port=-1
复制代码
重新启动MediaServer,查看是否启动成功(554是否监听)
  1. sudo ./MediaServer -d &
  2. netstat -ant | grep 554
  3. tcp6 0 0 :::554 :::* LISTEN
复制代码
推流测试

RTSP推流

准备

准备视频文件

找一段mp4视频,放到特定目录下,例如:/path/to/test.mp4, 稍后使用ffmpeg将视频推送的ZLMediaKit
安装VLC

安装VL用来拉取ZLMediaKit转发的数据流
推流

执行下面的推流命令,将test.mp4推送到 rtsp://127.0.0.1/live/test
  1. ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test
复制代码

  • -re:以本地帧率读取输入文件,模拟实时流。
  • -i "/path/to/test.mp4":指定输入的视频文件路径。
  • -vcodec h264:设置视频编码格式为 H.264。
  • -acodec aac:设置音频编码格式为 AAC。
  • -f rtsp:指定输出格式为 RTSP。
  • -rtsp_transport tcp:使用 TCP 作为 RTSP 传输协议。
  • rtsp://127.0.0.1/live/test:推流的目标地址,127.0.0.1 是 ZLMediaKit 服务器的 IP 地址,live 是应用名,test 是流名称。


  • 建议添加 -stream_loop -1参数,实现循环推流,否则,如果test.mp4比较小,很快会推流结束
  1. ffmpeg -stream_loop -1 -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test
复制代码
拉流验证

使用 VLC 等播放器进行拉流验证。在 VLC 中选择“媒体” -> “打开网络串流”,输入推流地址 rtsp://127.0.0.1/live/test 即可观看视频。
问题:拉流失败

如果是在windows下,使用wsl+ubuntu,在ubunut环境下启动MediaServer和推流, 则不能使用rtsp://127.0.0.1/live/test地址进行拉流。
在 WSL(Windows Subsystem for Linux)的 Ubuntu 中启动 MediaServer 并通过 FFmpeg 推 RTSP 流到 rtsp://127.0.0.1/live/test ,在 Windows 下使用 VLC 播放时,需要注意 WSL 和 Windows 之间的网络通信情况。

  • 获取 WSL 的 IP 地址
    在 WSL 的 Ubuntu 终端中,使用以下命令获取 WSL 的 IP 地址:
[code]ip addr show eth0 | grep -oP '(?

相关推荐

您需要登录后才可以回帖 登录 | 立即注册