按你的三模块拆分:
web:浏览器实时拉流预览(flv.js)src/encoder-pusher:C++ 推流模块(streamId 任务管理 + 帧级渲染)src/media-server:内置流媒体服务器(C++ 程序 + 静态链接 ZLMediaKit mk_api)
另外:
src/third-party/ZLMediaKit:你下载的 ZLMediaKit 源码src/third-party/build.sh:将 ZLMediaKit 编译并安装为静态库产物
.
├── web/
├── src/
│ ├── encoder-pusher/
│ │ ├── src/main.cpp
│ │ ├── CMakeLists.txt
│ │ ├── build.sh
│ │ ├── start_stream.sh
│ │ ├── stop_stream.sh
│ │ └── list_streams.sh
│ ├── media-server/
│ │ ├── src/main.cpp
│ │ ├── CMakeLists.txt
│ │ ├── build.sh
│ │ └── run_server.sh
└── scripts/
brew install ffmpeg cmake gitbash src/third-party/build.sh成功后生成:
src/third-party/install/zlm/lib/libmk_api.asrc/third-party/install/zlm/include/*.h
cmake -S . -B build
cmake --build build -j "$(sysctl -n hw.logicalcpu)"默认生成:
build/src/media-server/embedded_serverbuild/src/encoder-pusher/encoder_pusher
scripts/dev_up.sh默认会执行顶层构建流程。
仅在单模块调试时使用:
bash src/media-server/build.sh
bash src/encoder-pusher/build.shbash scripts/dev_up.sh顺序:
- 启动
embedded_server(静态链接 mk_api) - 启动
encoder_pusher(通过start_stream.sh启动stream1) - 启动 Web 页面(8080)
访问:
- 播放页:
http://127.0.0.1:8080 - FLV 流:
http://127.0.0.1:8081/live/stream1.live.flv
bash scripts/dev_down.sh单流和多流都使用同一套命令:
bash src/encoder-pusher/start_stream.sh stream2
bash src/encoder-pusher/start_stream.sh stream3 --input /path/to/demo.mp4
bash src/encoder-pusher/list_streams.sh
bash src/encoder-pusher/stop_stream.sh stream2
bash src/encoder-pusher/stop_stream.sh stream3拉流地址对应:
http://127.0.0.1:8081/live/stream2.live.flvhttp://127.0.0.1:8081/live/stream3.live.flv
说明:
start_stream.sh:启动指定streamId(单流=只启动一个 streamId)list_streams.sh:查看所有流状态stop_stream.sh:停止单个流
1935:RTMP 推流入口8081:HTTP-FLV 拉流5540:RTSP8080:本地 Web 页面
- 使用
src/third-party/build.sh固化第三方构建参数 - 通过
src/third-party/cmake/ZLMStatic.cmake导入ZLM::mk_api src/media-server/CMakeLists.txt直接链接该静态库src/media-server/src/main.cpp以 C API 启动内置 HTTP/RTMP/RTSP
src/encoder-pusher/src 内已实现:
TaskManager:按streamId管理任务对象- 文件输入模式:
decode -> frame render -> encode -> rtmp push- 解码:
libavcodec - 帧处理:逐帧修改 Y 平面亮带(可替换成你业务特效)
- 编码:H.264 (
libx264) - 推流:FLV/RTMP (
libavformat)
- 解码:
- 音频:当前对 AAC 轨做稳定透传
- 无输入文件模式:保留 testsrc/sine 命令行兜底,便于快速联调