Windows 编译 ZLMediaKit:3 条命令出 MediaServer,附 3 个高频坑位
【免费下载链接】ZLMediaKitWebRTC/RTSP/RTMP/HTTP/HLS/HTTP-FLV/WebSocket-FLV/HTTP-TS/HTTP-fMP4/WebSocket-TS/WebSocket-fMP4/GB28181/SRT/STUN/TURN server and client framework based on C++11项目地址: https://gitcode.com/GitHub_Trending/zl/ZLMediaKit
Windows 上第一次编译 ZLMediaKit(基于 C++11 的高性能流媒体服务框架),最容易卡住的往往不是 CMake 那一行命令,而是子模块没拉全、产物不在你以为的目录、编译完却不知道从哪个端口收流。这篇文章不追求覆盖所有平台,只带你走最短路径:在 Windows 上编译出一个能收流的 MediaServer,并用第一路推流验证它真的跑起来了。读完,你手里会有一个可直接运行的服务器,外加一套遇到报错时的排查顺序。
先定目标:MediaServer 跑通后要验收的东西
别一上来就闷头敲命令,先把"跑通"的标准定清楚,做完每一步才有据可查:
- 产物存在:
release/windows/Release/MediaServer.exe(不在 build 目录,后面会再强调一次); - 进程能起:启动后日志里能看到它在 80(HTTP)、1935(RTMP)、554(RTSP)这些端口上监听;
- 能收流:用 ffmpeg 推一路 RTMP,之后能通过 HTTP-FLV 或管理 API 查到这路流。
满足这三条,才算真正"编译并部署成功",而不是仅仅生成了一个 exe。
环境准备:装 VS 加 CMake,子模块才是隐形坑
工具层面只要两样:Visual Studio 2019 或更新版本(勾选"使用 C++ 的开发"工作负载),以及 CMake 3.10 以上并确保已加入 PATH。ZLToolKit、jsoncpp、media-server 这些第三方依赖已经放在 3rdpart/ 目录里,不用你单独去装。
⚠️ 但这里藏着一个最容易翻车的点:这些依赖是以 git 子模块形式提供的,普通git clone之后,3rdpart/ 下面大概率是空的。目录空着,配置阶段就会找不到 ZLToolKit 的头文件直接报错。clone 完先补这一句,再进入编译:
git clone https://gitcode.com/GitHub_Trending/zl/ZLMediaKit cd ZLMediaKit git submodule update --init --recursive做完你会看到:3rdpart/ZLToolKit/等目录里有了真实源码,不再是空文件夹。
三条命令出结果:配置、生成、构建
源码就绪后,配置和构建可以压成两步。先配置,让 CMake 生成解决方案;再构建出 Release 产物:
cmake -S . -B build -G "Visual Studio 16 2019" -A x64 cmake --build build --config Release说明两点。一是-G "Visual Studio 16 2019"里的 16 对应 VS2019,你如果装的是 2022,就改成Visual Studio 17 2022,-A x64表示 64 位。二是产物输出到release/windows/Release/,而不是常规的build/下——找不到 exe 时先来这里翻一遍。构建完成后,build/下会出现.sln,release/windows/Release/下会出现MediaServer.exe。
编译报错别慌:按顺序查这 3 个地方
真报错了也别急着重头再来,按这个顺序排查,九成的问题能定位:
- 子模块还是空的——报错表现为找不到
ZLToolKit相关头文件。回到上一节重跑一次git submodule update --init --recursive即可。 - 生成器对不上——CMake 提示
could not find the specified generator,基本是 VS 版本号和-G参数不匹配,或没装 C++ 工作负载,换成实际安装的版本即可。 - 产物目录找错——编译其实是成功的,只是你一直在
build/里找 exe。产物固定在release/windows/Release/。
⚠️ 另外别在编译中途乱改BUILD_SHARED_LIBS、ENABLE_*这些开关后只重跑一次--build:改了 CMake 选项要重新执行配置那一步,否则不会生效。
收第一路流,确认服务器真的活了
编译通过就等于能用了吗?还差最后一步——用真实数据验证。启动MediaServer.exe,配置默认从 conf/ 的模板生成,HTTP 走 80、RTMP 走 1935。用 ffmpeg 推一路:
ffmpeg -re -i your.mp4 -c copy -f flv rtmp://127.0.0.1:1935/live/test推上去之后,用浏览器打开http://127.0.0.1/index/api/getMediaList能看到live/test,或者直接用播放器打开http://127.0.0.1/index/live/test.flv看到画面,就说明整条链路通了。🎯 到这一步,你已经在 Windows 上拥有了一个能收流、能转发的流媒体服务器。
三句话记住这套流程
- 子模块没拉全,编译一定挂:clone 后先跑
git submodule update --init --recursive。 - 产物在
release/windows/Release/MediaServer.exe,不在 build 里:找不到就先来这里找。 - 验收看收流:推一路 RTMP,能通过 HTTP-FLV 或 API 查到流,服务器才算真跑通。
【免费下载链接】ZLMediaKitWebRTC/RTSP/RTMP/HTTP/HLS/HTTP-FLV/WebSocket-FLV/HTTP-TS/HTTP-fMP4/WebSocket-TS/WebSocket-fMP4/GB28181/SRT/STUN/TURN server and client framework based on C++11项目地址: https://gitcode.com/GitHub_Trending/zl/ZLMediaKit
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考