别再折腾GB28181了!用RTSP+EasyDarwin搞定海康NVR的Web端直播(附每日自动清理TS脚本)

张开发
2026/4/21 9:57:30 15 分钟阅读

分享文章

别再折腾GB28181了!用RTSP+EasyDarwin搞定海康NVR的Web端直播(附每日自动清理TS脚本)
实战指南基于RTSP与EasyDarwin的NVR视频流Web端高效接入方案当企业安防系统需要将海康、大华等品牌的NVR/IPC视频流稳定接入Web页面时传统GB28181协议常因云平台冲突而失效。本文将分享一套经过实战验证的替代方案通过RTSP协议EasyDarwin流媒体服务器HLS转码技术链实现浏览器无插件播放监控视频的完整流程。1. 为什么选择RTSPEasyDarwin技术路线在客户现场部署中我们常遇到这样的困境设备已接入萤石云等平台导致GB28181协议失效或国标接入存在流中断、回调机制不完善等问题。RTSP协议作为监控设备普遍支持的标准具有以下不可替代的优势兼容性强海康、大华等主流设备默认开放554端口支持RTSP低延迟平均延迟控制在300-500ms优于HLS等协议双向通信支持点播、暂停等交互操作资源占用低单台服务器可承载更多视频流# 典型RTSP流地址格式海康设备 rtsp://admin:password192.168.1.100/Streaming/Channels/101注意实际部署时建议为每个NVR创建专属账号并限制权限避免使用默认admin账户EasyDarwin作为轻量级RTSP流媒体服务器相比SRS等方案具有以下特点特性EasyDarwinSRSZLMediaKit协议支持RTSP为主RTMP/HTTP-FLVGB28181/RTSP部署复杂度★☆☆★★☆★★★二次开发难度★★☆★★★★★☆HLS支持内置需额外配置内置适合场景快速部署大规模直播国标平台2. 从零搭建流媒体服务环境2.1 基础环境准备推荐使用Ubuntu 20.04 LTS作为服务器系统配置要求取决于视频路数和分辨率4路1080P流2核CPU/4GB内存/100Mbps带宽16路1080P流8核CPU/16GB内存/1Gbps带宽# 安装必备工具 sudo apt update sudo apt install -y ffmpeg git screen2.2 EasyDarwin部署与配置从GitHub获取最新release版本并安装wget https://github.com/EasyDarwin/EasyDarwin/releases/download/v8.1.0/EasyDarwin-linux-8.1.0-2001141157.tar.gz tar -zxvf EasyDarwin-linux-8.1.0-2001141157.tar.gz cd EasyDarwin ./start.sh关键配置文件easydarwin.xml需要调整以下参数rtsp port554/port authfalse/auth !-- 生产环境建议改为true启用认证 -- /rtsp hls segment_duration2/segment_duration !-- TS切片时长(秒) -- window_size3/window_size !-- 保留切片数量 -- /hls2.3 流地址管理与批量添加对于多通道NVR设备可通过脚本批量生成RTSP地址。创建add_streams.sh#!/bin/bash BASE_URLrtsp://${username}:${password}${nvr_ip}/Streaming/Channels for channel in {1..32}; do curl -X POST http://localhost:10008/api/v1/pushers \ -H Content-Type: application/json \ -d { url: ${BASE_URL}/${channel}, custom_path: channel_${channel} } done3. 浏览器播放方案实战3.1 HLS转码配置通过FFmpeg将RTSP流转为HLS格式ffmpeg -i rtsp://server_ip:554/channel_1 \ -c:v copy -c:a aac -hls_time 2 -hls_list_size 3 -f hls \ /var/Streaming/live/stream.m3u8关键参数说明-hls_time切片时长(秒)-hls_list_size播放列表保留切片数-c:v copy视频流直接复制避免重编码3.2 Web播放器集成推荐使用video.js配合hls.js插件实现浏览器播放link hrefhttps://vjs.zencdn.net/7.20.3/video-js.css relstylesheet video idvideo classvideo-js controls source srchttp://server_ip:10008/live/stream.m3u8 typeapplication/x-mpegURL /video script srchttps://vjs.zencdn.net/7.20.3/video.min.js/script script srchttps://cdn.jsdelivr.net/npm/hls.jslatest/script script const player videojs(video, { techOrder: [html5], autoplay: true }); /script3.3 H.265编码支持方案针对新型设备采用的H.265编码需要特殊处理转码为H.264ffmpeg -i rtsp://server_ip:554/channel_1 \ -c:v libx264 -preset ultrafast -c:a aac -f hls \ /var/Streaming/live/stream.m3u8使用支持H.265的播放器商业方案JW Player、Bitmovin开源方案修改后的EasyPlayer4. 生产环境运维技巧4.1 TS文件自动清理方案创建每日清理脚本/opt/clean_ts.sh#!/bin/bash LOG_FILE/var/log/ts_clean.log STORAGE_DIR/var/Streaming TODAY$(date %Y%m%d) find $STORAGE_DIR -type f -not -name *$TODAY* -delete systemctl restart EasyDarwin_Service echo $(date) - Cleaned old TS files $LOG_FILE设置cron定时任务0 3 * * * /bin/bash /opt/clean_ts.sh4.2 服务监控与告警使用Prometheus监控EasyDarwin状态启用内置metrics接口metrics enabletrue/enable port8888/port /metricsPrometheus配置示例scrape_configs: - job_name: easydarwin static_configs: - targets: [server_ip:8888]关键监控指标stream_count当前流数量cpu_usageCPU占用率memory_usage内存使用量4.3 性能优化参数在easydarwin.xml中调整以下参数可提升并发能力system max_connection1000/max_connection rtsp_threads8/rtsp_threads hls_threads4/hls_threads /system对于高并发场景建议使用Nginx做HLS分发负载均衡开启TCP BBR拥塞控制算法为每台服务器配置SSD存储5. 进阶应用场景5.1 多NVR级联方案当需要集中管理多个地点的NVR时可采用以下架构[Site1 NVR] --RTSP-- [Edge Server] --HLS-- [Site2 NVR] --RTSP-- [Edge Server] --HLS-- [Central EasyDarwin] [Site3 NVR] --RTSP-- [Edge Server] --HLS--边缘节点配置示例ffmpeg -i rtsp://site1_nvr/channel_1 -c copy -f rtsp rtsp://central_server:554/site1_ch15.2 录像存储与回放基于HLS切片实现简单录像功能修改FFmpeg参数ffmpeg -i rtsp://server_ip:554/channel_1 \ -c:v copy -c:a aac -hls_flags append_list \ -hls_segment_filename /var/recordings/%Y%m%d/stream_%03d.ts \ /var/recordings/playlist.m3u8回放接口实现from flask import Flask, send_file app Flask(__name__) app.route(/playback/date) def playback(date): return send_file(f/var/recordings/{date}/playlist.m3u8)5.3 移动端适配技巧针对移动设备优化播放体验自适应码率方案ffmpeg -i rtsp://input_stream \ -map 0:v:0 -c:v:0 libx264 -b:v:0 2000k -s:v:0 1280x720 \ -map 0:v:0 -c:v:1 libx264 -b:v:1 800k -s:v:1 640x360 \ -var_stream_map v:0 v:1 -f hls -master_pl_name master.m3u8 \ /var/Streaming/stream_%v.m3u8触摸控制优化videojs(video, { userActions: { doubleClick: true, hotkeys: true } });这套方案在某连锁便利店项目中成功接入超过200路摄像头稳定运行至今未出现大规模断流情况。关键点在于合理配置转码参数、实施有效的文件清理策略以及建立完善的监控告警机制。对于需要快速落地的项目建议先从单路测试开始逐步扩展规模。

更多文章