资讯动态

ZLMediaKit:支持 12 种协议互转的 C++11 流媒体服务框架

发布时间:2026/9/9 14:39:21 来源:尧图企业网站定制
ZLMediaKit支持 12 种协议互转的 C11 流媒体服务框架【免费下载链接】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 C11项目地址: https://gitcode.com/GitHub_Trending/zl/ZLMediaKitZLMediaKit 是一个基于 C11 的高性能流媒体框架原生支持 WebRTC、RTSP、RTMP、HLS、SRT、GB28181 等协议的接收、分发与互转。它解决的是多协议流媒体服务需要维护多套组件、协议转换链路复杂的问题适合构建直播分发、视频监控接入和协议网关的开发团队。ZLMediaKit 项目全景速览ZLMediaKit 既是一个可直接部署的商用级流媒体服务器MediaServer也是一个可二次开发的网络编程 SDK底层基于 ZLToolKit 的多路复用异步 IO 模型实现。项目已覆盖 x86、ARM、RISC-V、MIPS 等指令集并经过长期线上环境的稳定性验证。核心指标如下指标说明协议支持RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/HTTP-TS/HTTP-fMP4/WebSocket-TS/WebSocket-fMP4/WebRTC/GB28181/SRT 共 12 种支持协议互转端到端延迟500 毫秒内最低可达 100 毫秒并发能力单机 10 万级播放器连接100Gb/s 级别 IO 带宽编码支持H264/H265/AAC/OPUS/MP3/VP8/VP9/AV1 全协议支持部分支持 JPEG/H266/SVAC平台覆盖Linux/macOS/Windows/iOS/Android全平台含嵌入式许可证MIT 类协议需保留版权声明ZLMediaKit 流媒体框架的架构与数据流所有协议在框架内部统一收敛为帧数据Frame再按需分发到各输出协议这是 ZLMediaKit 能实现任意协议互转的基础协议解析层负责把各协议的私有封装拆解为带时间戳的音视频帧媒体处理核心以 MediaSource 为抽象管理流的生命周期、鉴权与多路分发封装层按目标协议重新打包输出。各协议会话运行在 src/ 对应的子模块中通过事件线程池共享同一套网络 IO。5 分钟从零搭建全协议流媒体服务以下是最短的部署路径在 Linux 环境约 5 分钟可完成克隆到启动git clone https://gitcode.com/GitHub_Trending/zl/ZLMediaKit # 克隆仓库 cd ZLMediaKit # 进入项目目录 git submodule update --init # 拉取 ZLToolKit 等第三方依赖 mkdir build cd build # 创建构建目录 cmake .. -DCMAKE_BUILD_TYPERelease # 配置 Release 构建 make -j4 # 编译依赖 cmake 与编译器 ./release/linux/Release/MediaServer # 启动流媒体服务进程关键配置只需确认端口与协议开关完整配置见release/linux/Release/config.ini编译时由 conf/config.ini 模板拷贝生成[rtmp] port1935 ; RTMP 服务端口 [rtsp] port554 ; RTSP 服务端口 [http] port80 ; HTTP/HTTP-FLV/API 端口 rootPath./www ; HLS/静态文件根目录 [rtc] port8000 ; WebRTC 媒体端口 [rtp_proxy] port10000 ; GB28181 RTP 接收端口如果以 SDK 方式集成而非直接运行 MediaServer最小启动代码如 api/tests/server.c 所示mk_env_init(config); // 初始化环境加载 ini 配置 mk_rtsp_server_start(554, 0); // 启动 RTSP 服务 mk_rtmp_server_start(1935, 0); // 启动 RTMP 服务 mk_http_server_start(80, 0); // 启动 HTTP 服务 mk_rtc_server_start(8000); // 启动 WebRTC 服务 getchar(); // 保持进程驻留 mk_stop_all_server(); // 退出时统一停止启动后执行验证curl http://127.0.0.1/index/api/getServerConfig预期返回code: 0的 JSON内容为当前生效的全部配置项curl http://127.0.0.1/index/api/getMediaList返回code: 0且data为空数组说明服务就绪。逐项解析WebRTC、协议互转与流媒体核心能力WebRTC 实时通信与低延迟播放WebRTC 是 ZLMediaKit 中完成度最高的实时通道实现信令、媒体传输、重传机制均在单端口多线程模型内完成。✅ 单端口同时承载多路连接按连接迁移事件线程✅ ICE/DTLS/SRTP 全栈内置客户端网络切换后连接可迁移✅ NACK 丢包重传与 TWCC 拥塞反馈动态调整码率✅ 支持 Simulcast 分层编码与 SVC✅ DataChannel 通道可承载自定义信令实现入口在 webrtc/ 模块包含 IceSession、DtlsTransport、SrtpSession、TwccContext 等完整组件。多协议透明互转与按需拉流任意输入协议RTMP/RTSP/HLS/HTTP-TS/SRT/WebRTC自动转换为所有已启用的输出协议转换开关在[protocol]段逐协议控制。✅ 推一路 RTMP即可同时以 HTTP-FLV、HLS、RTSP、WebRTC 播放✅ 按需转协议无人观看的协议不产生转换开销✅ 先播后推流不存在时播放器最多等待maxStreamWaitMS毫秒✅ 断连续推推流短暂断开后在窗口期内重连播放端无感✅ 时间戳覆盖与平滑处理规避源流时间戳跳跃导致的卡顿通过 API 拉取外部流作为输入框架同样完成全协议分发auto player std::make_sharedMediaPlayer(); player-setOnPlayResult([](int err) {}); player-play(rtsp://192.168.1.64:554/BigBuckBunny); // 成功后可用 http://ip/app/stream.flv 或 /app/stream/hls.m3u8 播放GB28181 与视频监控系统接入面向监控场景ZLMediaKit 打通了 RTP/PS 协议栈与直播协议栈无需额外转码服务器。✅ RTP 代理接收 UDP/TCP 两种方式的 PS 流✅ PS 解封装为 H264/H265 帧后进入统一媒体管道✅ 支持设备拉流、点播、实时预览类业务编排✅ 配合on_play等 WebHook 实现设备级鉴权集群溯源与断点续播集群模式下边缘节点收到播放请求时先检查本地流未命中则按模板向源站溯源拉流多个源站用分号分隔依次尝试。✅origin_url支持 RTMP/RTSP/HLS/HTTP-TS 四种溯源方式✅ 溯源失败自动重试retry_count控制次数✅ 单节点无状态可水平扩展播放能力生产环境部署与调优参考多节点直播分发的典型拓扑如下边缘节点只承担播放分发拉流压力由源站集中承担关键调优参数对应[general]、[protocol]、[hls]、[cluster]段参数推荐值作用mergeWriteMS0合并写缓存毫秒数0 为关闭0 提升吞吐但增加延迟maxStreamWaitMS15000流不存在时播放器最大等待时间支撑先播后推streamNoneReaderDelayMS20000无人观看多久后触发断流钩子用于停止溯源拉流hls.segDur/hls.segNum2 / 3HLS 切片时长与保留切片数影响起播速度与存储cluster.timeout_sec15溯源总超时秒按源站数量均摊为单次超时常见注意事项cluster.timeout_sec除以源站数后不应超过maxStreamWaitMS否则播放器会先于溯源完成而超时。修改配置应直接编辑 release 目录下的config.ini或用-c参数指定改conf/config.ini模板只在重新 cmake 时生效。使用默认secret启动会被拒绝首次运行框架会自动生成随机 secret 并写回配置文件API 调用需携带该值。资源导航与选型建议官方文档与功能清单README.md、README_en.md核心源码模块src/协议与媒体管道、server/MediaServer 服务器与 Web API配置文件模板conf/config.iniHTTP API 与 WebHook 定义见 server/WebApi.cpp、server/WebHook.cppC API 头文件api/include/示例程序见 api/tests/社区渠道通过项目仓库的 Issue 区提交问题与讨论PR 同样在该渠道合入选型上ZLMediaKit 与 SRS 同属 C 全协议流媒体服务器路线区别在于 ZLMediaKit 更强调帧级统一管道和 WebRTC 全栈内置且 C API 设计为可嵌入其他语言的 SDK若只需转封装能力而非完整服务器ffmpeg 自建链路仍是更轻的选择。协议接入需求越杂、WebRTC 占比越高ZLMediaKit 的相对优势越明显。【免费下载链接】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 C11项目地址: https://gitcode.com/GitHub_Trending/zl/ZLMediaKit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价