尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

从一条视频流说起,看懂ZLMediaKit流媒体服务器怎么用

从一条视频流说起,看懂ZLMediaKit流媒体服务器怎么用 从一条视频流说起看懂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假设你刚买到第一台能推流的相机或者公司刚装好一排监控摄像头又或者你只是想给社团群里的人直播一次活动。画面明明在一台设备上可怎么让几十上百人同时在线观看把视频文件直接发到群里太大、太慢、还不实时。这时候你需要一个中转站——一个负责接收视频、再把它分发给所有观众的服务程序。ZLMediaKit 就是这样一个基于 C11 的流媒体服务器框架你只要推一路流进来它就能同时以 RTSP、RTMP、HLS、HTTP-FLV、WebRTC、GB28181 等多种形式分发出去让不同设备、不同播放器各取所需。十分钟跑通第一条视频流先别急着研究原理我们把视频流从设备传到观众这条链路先走通一遍找找手感。第一步拿到代码并编译git clone https://gitcode.com/GitHub_Trending/zl/ZLMediaKit cd ZLMediaKit git submodule update --init --recursive mkdir build cd build cmake .. make -j$(nproc)依赖的第三方库以子模块形式放在3rdpart/目录所以编译前记得先更新子模块。编译完成后可执行程序MediaServer会出现在release/linux/Debug/下。第二步启动服务器./release/linux/Debug/MediaServer它默认会加载自己同目录下的config.ini把 HTTP、RTMP、RTSP 等服务的端口都开好看到启动成功之类的日志就说明中转站营业了。第三步推一路流进去ffmpeg -re -i demo.mp4 -c copy -f flv rtmp://127.0.0.1/live/demo这句话的意思是把本地的demo.mp4当作实时视频源用 RTMP 协议推送到服务器流名叫demo挂在live这个应用名下。第四步在另一端把它放出来电脑上装个 VLC打开rtmp://127.0.0.1/live/demo或rtsp://127.0.0.1/live/demo浏览器里直接访问http://127.0.0.1/live/demo.flvHTTP-FLV或者访问http://127.0.0.1/live/demo/hls.m3u8HLS到这里你就完成了流媒体世界的第一推同一路视频多种协议同时可看。三个必须懂的概念用生活常识讲透流Stream一条水管把视频想象成自来水。摄像头是水源服务器是总水塔每个观众是一根接到水塔上的水管。水源只要开一条管子供水水塔却能接出几百根管子分发——这就是一路流、多人看的本质。服务器替你做了复制和分发观众彼此互不影响。协议Protocol不同的语言RTMP、RTSP、HLS、WebRTC……这些不是功能而是语言。手机里的 App 说 RTMP网页播放器说 HLS监控设备说 GB28181。如果大家都只会自己的方言就聊不到一起。ZLMediaKit 的本事就是这些语言它全会谁的请求来了都能应答。转协议Transcoding/Conversion同声传译最妙的一步水塔不仅能供水还能翻译。推流端用 RTMP 说话服务器转头就能用 HLS 跟网页播放器沟通用 WebRTC 跟浏览器聊天。你推一路 RTMP 进来服务器自动把它变成 FLV、HLS、RTSP、WebRTC 同时输出观众根本不需要知道自己看的是哪种格式。一句话协议是语言流是水ZLMediaKit 是一个精通多国语言的供水站。实战一给活动做一次带截图的小型直播流程就是上一节的四步但我们加两个真实业务里常用的动作。推流成功后先看看服务器里现在有哪些流http://127.0.0.1/index/api/getMediaList这是它的 HTTP 查询接口会返回当前所有在线流的信息。接着给活动画面拍一张工作照http://127.0.0.1/index/api/getSnap?urlrtmp://127.0.0.1/live/demotimeout_sec5服务器会调用 FFmpeg 抓取当前画面生成截图。这个能力很实用——直播封面上传、审核留档、无人值守监控都靠它。一次直播 推流 多协议分发 截图留档三条命令全部搞定。实战二当一回二传手把别人的流搬进来再分发假设你要聚合好几路来源一台摄像头、一段网络视频、一个别人的 RTMP 流然后统一给自家平台分发。不用自己写推流端用拉流代理接口就行http://127.0.0.1/index/api/addStreamProxy?appproxystreamrelay1urlrtmp://192.168.1.50/live/cam1服务器会主动去url指定的地址拉流拉回来后按你自己的app和stream名字对外提供。返回的key留着以后用delStreamProxy接口按 key 关掉这条代理。想停就停、想换源就换源全程不需要碰推流端。拉流代理让你从必须自己推流里解放出来别人推、你来管聚流分发两不误。新手最容易踩的四个坑坑一改了 conf/config.ini重启却没生效这是最经典的困惑。conf/config.ini是范例配置执行cmake时会被复制到release/linux/Debug/目录而MediaServer启动时默认加载的是可执行程序旁边那份配置文件。想改配置直接改release/linux/Debug/config.ini或者启动时用-c参数明确指定路径。坑二推流失败第一反应查端口和防火墙推流报错时先确认 1935RTMP、554RTSP、80HTTP这些端口有没有被占用或被防火墙拦住。云服务器还要检查安全组。很多推不上去的问题其实卡在门口。坑三调用敏感接口被拒绝像增删流代理这类敏感接口默认需要secret才能调用。本机127.0.0.1访问可以免密一旦换成别的机器访问就得在请求里带上config.ini中[api]段的secret参数否则会被拒之门外。坑四编译报错先检查子模块3rdpart/下的依赖是子模块管理的。如果你 clone 后忘了执行git submodule update --init --recursive编译会缺头文件报一堆莫名其妙的错。把子模块补齐九成问题都能消掉。值得继续探索的三个方向WebRTC让浏览器也拥有毫秒级低延迟项目webrtc/目录实现了一整套 WebRTC 方案自带测试播放页www/webrtc/index.html。推流后浏览器页面里填上播放地址就能直接看不用装任何插件延迟比 HLS 低一个数量级适合连麦、互动这类场景。GB28181安防监控的国标接入家里的 NVR、海康大华等摄像头很多走国标 GB28181 协议。ZLMediaKit 打通了监控协议栈和直播协议栈国标设备推上来的流可以继续转成 RTSP/RTMP/HLS 供平台使用安防和直播在同一个服务里和解。API 与 WebHook让流媒体变成你的业务/index/api/下还有一整套管理接口配合on_publish、on_play、on_stream_changed等 WebHook 事件你可以做推拉流鉴权、播放统计、自动录制这些定制逻辑甚至可以用api/include里的 C API 把整个框架当 SDK 嵌进自己的程序里。现在打开你的编辑器吧看完这篇你其实已经摸到了流媒体服务器的门槛会推流、会分发、会查流、会抓图还知道坑在哪。剩下的无非是多推几路流、多试几种协议让手感自然长出来。把release/linux/Debug/config.ini翻一遍每行注释都写得很直白那就是最好的下一步教材。动手推你的第一条流等观众在另一端看到画面时你会觉得这一切都值得。【免费下载链接】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),仅供参考
返回列表