简介:EasyDSS-windows-2.2.7-1912281435.zip 面向需要在 Windows 环境快速部署流媒体视频管理系统的开发者与运维人员,提供安装程序及配套运行文件,可用于视频上传、转码、直播发布、回放、嵌入分享与多屏播放等场景的本地搭建和功能验证。压缩包共207个文件,约55.93MB,包含js前端脚本、lua业务脚本、dll动态库、css/html界面资源及exe可执行程序等,兼顾服务端运行、管理后台展示与组件依赖,便于按目录了解系统组成。目前已有708人学习或下载。对于想研究流媒体服务落地、接口集成或搭建演示环境的读者,可从中获得可运行的Windows版本、较完整的依赖库与前端资源,并借助conf、pem、ini等配置与证书文件熟悉部署结构和参数调整;结合API/SDK扩展思路,还可用于企业视频管理与在线教学等项目的原型验证。
1. EasyDSS Windows 2.2.7 装之前,先接受它并非一个典型安装包
不止一次见过有人拿到 EasyDSS-windows-2.2.7-1912281435.zip,解压、双击 exe、窗口一闪就没了,然后卡在这里两三天。这个安装包 EasyDSS 视频管理的 Windows 版本属于绿色发布形态:没有安装向导、没有“下一步”、没有安装目录可选,配置全摊在文件夹里,改错了也没人拦你。省事的地方在这,容易出错的地方也在这。它适合要在内网起一套直播、点播、录像回放的人——推 RTMP 进来、浏览器看 HLS/FLV、录像按天落盘。装不好它不会报错,只会“页面打得开但没画面”“录像目录永远空的”。这一篇按我实际装这套版本的顺序写:先定系统和目录,再改配置,再拉起进程,最后用三条命令确认它真的活了。
2. 装前准备:Windows 版本、运行库和目录怎么定
绿色包最容易被跳过的就是准备阶段。很多人觉得“解压就能跑”,于是直接扔到桌面上双击,出了问题再回头查,成本比一开始花二十分钟做规划高得多。这一章的三件事——系统版本、端口、包内结构——必须在解压之前定下来。
2.1 系统与硬件:先看这张对照表
2.2.7 这个版本是 2019 年底的构建,配套的是当时的运行库和 ffmpeg 版本,装在新系统上要留意兼容性。下表是我给这套包定的底线,低于“最低”那一列的机器不要硬上,转码会直接把 CPU 占满。
| 项目 | 最低 | 推荐 | 说明 |
|---|---|---|---|
| 操作系统 | Windows Server 2012 R2 x64 | Windows Server 2016 / 2019 x64 | 家用版也能跑,但并发连接数和计划任务限制多 |
| 位数 | 64 位 | 64 位 | 32 位系统不要尝试,包内组件是 x64 |
| CPU | 4 核 | 8 核以上 | 每路转码大约吃 1~2 核,纯转发不吃 |
| 内存 | 8 GB | 16 GB | 录像索引和并发拉流会吃内存 |
| 系统盘 | 60 GB 可用 | — | 只放程序,录像必须另挂数据盘 |
| 数据盘 | — | 按“单路码率 × 路数 × 天数”估算 | 4 Mbps 单路一天约 40 GB |
| 运行库 | VC++ 2015-2019 x64 | 同上 | 缺它 exe 直接闪退,日志都不给你留 |
几个取舍说明。第一,不要用 Windows 7 或者精简版系统,这类系统常被删掉了部分网络组件和证书链,服务能起但推流握手阶段会莫名失败,排查起来极其费时。第二,程序目录和数据目录必须分开:程序放 D 盘一个固定路径,录像放另一块盘或者另一个分区,否则录像写满会把程序盘一起拖死,配置都改不动。第三,内存不要按“能开机就行”配,视频管理这类服务的内存占用是随并发拉流数线性涨的,8 GB 在十路以上就会开始频繁换页。
运行库的检查方式很简单,在命令行里跑一下:
# 查看系统已安装的 VC++ 运行库(按名称过滤) wmic product where "name like '%%Visual C++ 2015%%'" get name,versionwmic在部分新系统上已被弃用,替代写法是 PowerShell 的Get-ItemProperty查注册表,但对 2012 R2 到 2019 这一代服务器,wmic仍然是最快的。输出为空或者只有 x86 版本,就说明缺 x64 运行库,去装一个 vc_redist.x64.exe 再继续。这一步别省,闪退问题里有相当一部分是它引起的。
2.2 端口先查清楚,别等起了服务才发现冲突
EasyDSS 这类流媒体服务不是一个端口,而是一组端口同时工作:Web 管理端口、RTMP 推流端口、HTTP-FLV 播放端口,有些场景还要 RTSP。这套包默认大概率是 10080 / 1935 / 8081 这一组,但以你解压后 conf 目录里的实际值为准,我下面给的命令是拿这三个当例子。
先查占用,一条命令看三个端口:
# Windows 下同时查三个端口的监听状态和占用进程 netstat -ano | findstr ":10080 :1935 :8081"输出里每一行末尾那个数字是 PID,拿去tasklist | findstr <PID>就能看到是哪个程序占着。netstat -ano的-a是显示所有连接和监听,-n是以数字形式显示地址和端口(不解析域名,快很多),-o是附带进程 PID。findstr后面用空格分隔多个关键词表示“或”的关系,一次查完三个端口。
在 PowerShell 里更直观,能直接看到进程名:
# 查端口占用,直接带出进程名 Get-NetTCPConnection -LocalPort 10080,1935,8081 -ErrorAction SilentlyContinue | Select-Object LocalAddress,LocalPort,State,OwningProcess, @{n='Process';e={(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).ProcessName}}-ErrorAction SilentlyContinue是必须的,端口没被占用时 cmdlet 会抛错,不加这一句屏幕上全是红字。最后那个哈希表是给结果加一列进程名,省得再去tasklist对 PID。
常见的冲突源有两个:IIS 占了 8081 之类的端口,或者机器上已经跑着另一套流媒体服务。1935 被占的概率其实不高,10080 和 8081 反而经常出问题,因为很多管理后台喜欢用 80 系列。真撞上了不要急着停别人的服务,先在 conf 里把端口改掉,改端口比停服务安全得多。
2.3 解压前先确认包里有什么、缺什么
拿到 zip 之后先别急着解压到最终位置,解压到一个临时目录看一眼结构。这类绿色包常见的内容大致是这几类:主程序 exe、conf 配置目录、logs 日志目录、www 或者 web 前端静态资源目录、ffmpeg 目录(转码和拉流都靠它)、data 或 db 目录(存配置和索引)。不同构建之间目录名会有出入,但功能划分基本一致。
看结构用 PowerShell 就够了,不用装解压软件:
# 列出 zip 内的一级目录和文件,不实际解压 Add-Type -AssemblyName System.IO.Compression.FileSystem $zip = [System.IO.Compression.ZipFile]::OpenRead("D:\download\EasyDSS-windows-2.2.7-1912281435.zip") $zip.Entries | ForEach-Object { ($_.FullName -split '/')[0] } | Sort-Object -Unique $zip.Dispose()OpenRead是只读打开,不会改动原包;Entries拿到全部条目;后面的-split '/'只取路径第一段,再用Sort-Object -Unique去重,就能看到顶层有几个文件夹。最后一定要Dispose(),不然文件句柄不释放,后面解压会提示文件被占用。
同时确认三件事:包是不是完整下载的(对比一下文件大小,或者用Get-FileHash算 MD5 和发布方给的值对一下)、包里有没有 ffmpeg 目录、conf 目录里到底有哪几个文件。少了 ffmpeg 的服务照样能起,页面也正常,但一开转码就失败,日志里只有一行找不到可执行文件,很容易被当成“软件 bug”。
还有一件事是杀毒软件。Windows Defender 对绿色包里的 nginx.exe、ffmpeg.exe 这类可执行文件相当敏感,实测中出现过解压完 dll 少一个的情况——不是解压失败,是被实时防护直接隔离了。解压前把目标目录加进排除项,比事后去隔离区恢复省事。
# 把程序目录加入 Defender 排除项(需管理员权限) Add-MpPreference -ExclusionPath "D:\EasyDSS", "D:\EasyDSSData"-ExclusionPath接受多个路径,用逗号分隔。程序目录和录像目录都要加,录像目录不加会有性能损耗——每写一个文件扫一遍,几十路并发录像时磁盘 I/O 会明显变差。
3. 从 zip 到服务跑起来:解压、改 conf、拉进程
准备工作做完,正式动手。这一章的顺序不能颠倒:先解压到最终路径,再授权,再改配置,最后才启动。很多人习惯先双击试一下,试完发现问题再回头改路径,结果配置里的绝对路径全对不上,等于重来一遍。
3.1 解压路径与权限:别放进 Program Files
目标路径有三条硬性要求:纯英文、无空格、不在一级系统目录下。C:\Program Files\EasyDSS这种路径看着规范,实际上会踩两个坑:一是路径里有空格,某些老版本组件在拼命令行时不做转义,直接把参数截断;二是 UAC 会拦写入,服务账户对这个目录默认只有读权限,录像和日志写不进去。
我一般用D:\EasyDSS作为程序目录、D:\EasyDSSData作为数据目录,两个分开。解压:
# 解压到临时目录,再整体移动到目标路径,避免解压中途失败留下半成品 Expand-Archive -Path "D:\download\EasyDSS-windows-2.2.7-1912281435.zip" ` -DestinationPath "D:\tmp_easydss" -Force Move-Item -Path "D:\tmp_easydss\*" -Destination "D:\EasyDSS" -Force-Force在Expand-Archive里表示覆盖同名文件,在Move-Item里表示覆盖目标。先解压到临时目录再整体移动,是为了防止解压一半断电或者磁盘满,留下一个残缺目录却以为是完整的。反引号是 PowerShell 的续行符,后面不能有空格,这个细节坑过不少人。
接下来授权。服务要用哪个账户跑,就给哪个账户对这个目录的修改权限。用NETWORK SERVICE是最省事的,它是内置账户,不用管密码过期:
# 给内置账户授程序目录的读写权限,(OI)(CI) 表示子对象继承 icacls "D:\EasyDSS" /grant "NETWORK SERVICE:(OI)(CI)M" /T icacls "D:\EasyDSSData" /grant "NETWORK SERVICE:(OI)(CI)M" /TM是 Modify(修改),够用了,不用给F(完全控制)。(OI)是对象继承,(CI)是容器继承,两个一起加才能让新建的子目录和文件自动继承权限,不加的话录像按天新建的日期目录会是拒绝访问。/T是递归应用到所有已存在的子项。
提示:如果打算用独立服务账户跑,账户必须先加进“作为服务登录”的权限,否则注册服务时会报“登录失败”。这一步在本地安全策略里改,或者用
secpol.msc找。
3.2 逐项改 conf:端口、路径、账号
配置是这类绿色包最需要人工干预的部分。conf 目录下的文件名各版本有差异,可能是 ini、也可能是 json,下面用 ini 结构举例,键名以你包内实际文件为准,不要照抄。改之前先把原文件复制一份easyDss.ini.bak,这是唯一能快速恢复的备份。
[server] ; 绑定地址,0.0.0.0 表示监听所有网卡,只在内网用可以改成具体网卡 IP bind_ip = 0.0.0.0 ; Web 管理端口,防火墙要同步放行 http_port = 10080 ; RTMP 推流端口 rtmp_port = 1935 ; HTTP-FLV / HLS 播放端口 httpflv_port = 8081 [storage] ; 录像根目录,必须是绝对路径,正斜杠反斜杠都行但不要混用 record_path = D:/EasyDSSData/record ; 录像保留天数,超过的由清理任务删除 record_days = 15 ; 磁盘剩余空间低于这个值(GB)停止录像,防止写满系统 disk_min_free_gb = 50 [media] ; ffmpeg 路径,相对路径容易出错,直接用绝对路径 ffmpeg_path = D:/EasyDSS/ffmpeg/ffmpeg.exe ; 是否开启转码,纯转发可以关掉省 CPU transcode = on video_codec = libx264 audio_codec = aac参数取舍说几个关键点。bind_ip写成0.0.0.0是最省事的,但如果你这台机器有多张网卡(一张内网一张对外),建议绑定到具体的一张,避免管理后台意外暴露。record_days不要拍脑袋写 90,先按“单路码率 × 路数 × 86400 秒 ÷ 8”估一下一天多少 GB,再乘天数看数据盘够不够,容量不够就缩短天数或者降低码率,靠清理任务硬撑只会让清理和写入互相抢 I/O。
disk_min_free_gb这个参数很多人不设,结果数据盘写满之后整个服务卡死,连 Web 后台都打不开,只能重启。设一个 50 GB 的保底,低于这个值就停止录像,虽然丢录像但服务活着,运维还有时间去扩盘。
transcode要不要开,取决于前端播放器。现在浏览器对 H.264 + AAC 的支持最稳,如果推上来的是 H.265 或者 G.711 音频,不开转码就只能黑屏。开了转码 CPU 占用会明显上去,所以纯 H.264 源 + 纯转发场景,关掉它。
3.3 前台启动看日志,确认正常再注册服务
这是我最想强调的一步:第一次启动一定要在命令行前台跑,不要双击,也不要一上来就注册成服务。前台跑的时候崩溃会直接把错误打在屏幕上,双击的话窗口一闪就没了,什么线索都没有。
# 切到程序目录,前台启动,观察输出 cd /d D:\EasyDSS EasyDSS.exe -c conf\easyDss.ini-c指定配置文件路径,如果程序支持默认路径也可以省略。注意这是在 cmd 里跑,路径分隔符用反斜杠;在 PowerShell 里跑要把路径加上.\前缀,否则它不认当前目录。
前台跑起来后不要关窗口,另开一个终端看日志:
# 实时跟踪日志最后 50 行,Ctrl+C 退出 Get-Content -Path "D:\EasyDSS\logs\easyDss.log" -Tail 50 -Wait-Tail 50是先显示最后 50 行(历史部分),-Wait是持续追加输出。这两个参数组合起来就是 Windows 上的tail -f,排查启动问题时比翻文件快得多。日志里要确认的是三件事:配置有没有被正确解析、各个端口有没有监听成功、有没有模型或资源加载失败的报错。
确认没问题之后,按Ctrl+C停掉前台进程,再注册成服务。这类绿色包本身不带服务安装程序,常见做法是用第三方包装器,或者用系统自带的sc:
# 注册为系统服务,start= auto 表示开机自启 sc create EasyDSS binPath= "D:\EasyDSS\EasyDSS.exe -c D:\EasyDSS\conf\easyDss.ini" start= auto sc description EasyDSS "EasyDSS 视频管理服务 2.2.7" sc start EasyDSS注意binPath=和start=后面那个等号必须跟一个空格,写成binPath="..."会报“参数错误”,这是sc命令最经典的坑。start= auto是自动启动,demand是手动启动。sc description只是加个描述方便以后辨认,可加可不加。用sc注册的服务有一个限制:它不能设置工作目录,所以配置文件路径和 ffmpeg 路径都必须写绝对路径,这就是前面配置里强调绝对路径的原因。
4. 视频管理侧配置:访问、存储和推拉流参数
服务能起来只是第一步,真正要跑通的是“能访问、能推、能看、能存”。这一章把这三块拆开说,每一块都对应一组具体的配置项和验证方式。
4.1 Web 访问与防火墙放行
服务起在本机,http://127.0.0.1:10080能打开,不代表局域网里其他机器能打开。Windows 防火墙默认拦截入站,端口不放行的话,从别的机器访问就是“连接超时”,很容易被误判为服务没起来。
# 放行 Web、RTMP、HTTP-FLV 三个端口,只对 TCP 生效 netsh advfirewall firewall add rule name="EasyDSS-Web-10080" dir=in action=allow protocol=TCP localport=10080 netsh advfirewall firewall add rule name="EasyDSS-RTMP-1935" dir=in action=allow protocol=TCP localport=1935 netsh advfirewall firewall add rule name="EasyDSS-FLV-8081" dir=in action=allow protocol=TCP localport=8081dir=in是入站方向,action=allow是放行,protocol=TCP指定协议,localport是本地端口。这里没写remoteip限制来源,如果这套服务只给内网某个网段用,加上remoteip=192.168.1.0/24会安全一些,改动也更可控。
RTMP 用的是 TCP 1935,这一点要确认清楚:不要给 RTMP 也放 UDP,也别指望 1935 的 UDP 能推流,推不上去的。HTTP-FLV 和 HLS 都走 TCP。如果还开了 RTSP,那才需要另外放行 554 的 TCP 和 UDP。
放行完立刻从另一台机器验证,不要只在本机 127.0.0.1 上点:
# 从客户端机器测试 Web 端口连通性 curl -I --connect-timeout 5 http://192.168.1.20:10080/-I是只取响应头(HEAD 请求),--connect-timeout 5是连接超时设 5 秒,不加的话默认可能卡很久。返回 200 或者 302 都算通,返回空且报“连接被拒绝”就是防火墙或者bind_ip的问题。
4.2 录像存储:路径、配额与清理
录像出问题基本都是三个原因:权限、磁盘、路径。权限前面用icacls给了,这里说磁盘和路径。
录像目录必须放在独立的数据盘上,不要跟程序目录同一个分区。原因不在于“占空间”,而在于写入模式:录像持续顺序写,写满时如果跟系统盘同分区,Windows 会因为空间不足开始报各种莫名其妙的错误,注册表写不进去、日志写不进去,表现上完全看不出是磁盘问题。这种故障最难查,因为现象和原因之间毫无逻辑关系。
按天分目录是这类服务的默认行为,目录名一般是日期。清理任务要跟保留天数对齐:
# 手动清理脚本示例:删除超过 15 天的录像目录(先在测试目录验证再上生产) $root = "D:\EasyDSSData\record" $keepDays = 15 $limit = (Get-Date).AddDays(-$keepDays) Get-ChildItem -Path $root -Directory | Where-Object { $_.CreationTime -lt $limit } | ForEach-Object { Write-Host "删除: $($_.FullName)" Remove-Item -Path $_.FullName -Recurse -Force }-Directory只取目录,Where-Object按创建时间过滤,Remove-Item -Recurse -Force递归删除。这个脚本上生产前一定要先去掉Remove-Item那一行跑一遍,看它打算删什么——我第一次写的时候把-lt写成了-gt,差点把当天正在写的录像目录删掉。清理任务用计划任务每天凌晨跑一次,别跟录像写入高峰撞。
配额方面,除了配置里的disk_min_free_gb,还建议给数据盘设置 NTFS 配额或者用磁盘配额策略做兜底。两个保险比一个好,配置里那个是软限制,随时能改;磁盘配额是硬的,真出问题能保护系统。
4.3 推流与转码参数:码率、帧率、GOP 怎么取舍
这一节说怎么确认推拉流链路通。服务端的推流地址一般在控制台里能看到,路径段以实际生成的那一串为准,格式大致是rtmp://服务IP:1935/应用名/流名。不清楚就不要猜,直接看控制台给的。
测试推流用 ffmpeg,把本地文件循环推上去:
# 循环推一个本地 mp4 到服务端,-re 表示按实时速率推,不加会瞬间推完 ffmpeg -re -stream_loop -1 -i .\test.mp4 -c copy -f flv rtmp://192.168.1.20:1935/live/test-re是按文件原始帧率读取,模拟真实推流节奏,不加这个参数 ffmpeg 会用最快速度读完文件,服务端收到的是一堆突发数据。-stream_loop -1是无限循环,方便长时间观察。-c copy是不重新编码,直接复制音频和视频流,这样推流端不占 CPU,能把问题定位在服务端而不是编码端。-f flv是封装格式,RTMP 推流必须是 flv。
拉流验证用 ffmpeg 反向拉一次,能拉下来就说明整条链路通:
# 从服务端拉流 10 秒再丢弃,用于验证推上去的流能被正常分发 ffmpeg -i rtmp://192.168.1.20:1935/live/test -t 10 -f null --t 10是只处理 10 秒,-f null -是输出到空设备不做实际写盘。屏幕上的frame=计数在涨就说明拿到数据了;如果卡在Opening 'rtmp://...' for reading不动,问题在服务端的分发或者端口没放行。
转码参数上,我的判断标准是:分辨率不要超过源,码率不要超过带宽的 70%,GOP 跟帧率对齐(25 fps 就设 50 或 75)。GOP 太大会导致首帧显示慢,播放器要等一个关键帧才能出画面,用户看到的就是转圈十几秒;GOP 太小码率浪费。音频统一转 AAC,采样率 44100 或 48000,源是什么就用什么,强行改采样率对音质没好处,只是多花 CPU。
5. 排查:装完之后起不来的五种情况
下面五条是我在这套版本上实际遇到或者帮别人定位过的,每条按现象、原因、解决写。顺序按排查优先级排,前面几条概率最高。
5.1 双击 exe 窗口一闪就没,日志目录是空的
现象:解压完双击主程序,黑窗口闪一下就消失,logs目录里没有任何文件。
原因:最常见是缺 VC++ x64 运行库,进程在加载阶段就崩了,还没走到初始化日志的那一步,所以什么都不会写。其次是路径里有中文或者空格,程序加载配置时路径被截断。第三种可能是 exe 被 Defender 隔离了,你双击的时候其实已经不在那个位置了。
解决:先在 cmd 里前台跑一遍,让错误打在屏幕上;再确认 vc_redist.x64 装没装;再把程序挪到纯英文无空格路径。三件事按这个顺序做,基本能覆盖九成。如果 cmd 里跑起来只报一句“系统找不到指定的路径”,那是配置里某个绝对路径写错了,逐项对一遍。
5.2 服务显示已启动,但 10080 打不开
现象:sc query EasyDSS显示RUNNING,但浏览器访问超时,本机 127.0.0.1 也打不开。
原因:两种可能。一是配置文件里bind_ip写成了具体某个网卡 IP,而那个 IP 已经变了(比如换了网段),进程在监听但监听的地址不存在;二是端口被别的进程抢了,进程起来了但绑定失败,日志里有一行bind failed但你只看了最后几行没注意。
解决:先用netstat -ano | findstr :10080看这个端口到底有没有进程在听、听在哪个地址。如果没有监听记录,翻日志找bind或者listen关键字。如果监听的地址是127.0.0.1而不是0.0.0.0,说明bind_ip配错了。
5.3 页面能开,播放器一直转圈黑屏
现象:后台管理页面正常,能看到通道列表,点播放就是黑屏转圈,F12 里能看到请求发出去了但没数据返回。
原因:按概率排,第一是源流编码是 H.265 或者音频是 G.711,浏览器不吃,而转码没开;第二是 HTTP-FLV 或 HLS 的端口没在防火墙上放行,播放器连的是那几个端口而不是 10080;第三是推流地址写错了应用名或者流名,服务端根本没收到流。
解决:先用 ffmpeg 从服务端拉一次流(见 4.3 那条命令),能拉到说明流在、分发也通,问题在前端解码;拉不到说明推流那一端或者分发端口有问题。确认编码格式用ffprobe看一眼源,不是 H.264 + AAC 就把transcode打开。
5.4 录像目录一直是空的,磁盘空间没变
现象:推流正常、播放正常,但record_path指向的目录里什么都没有,或者只有空文件夹。
原因:单路排查下来,八成是权限。服务用NETWORK SERVICE跑起来,你给目录授权的是当前登录账户,两者不是一回事。其次是磁盘剩余空间低于disk_min_free_gb,录像被主动停了,这个通常在日志里有一行提示但没人看。第三种是ffmpeg_path指错了,录像要调用 ffmpeg 落盘,找不到就直接失败。
解决:以服务账户身份验证权限——最简单的方式是看服务日志有没有permission denied;或者临时把服务改成用当前账户跑,如果录像出来了就确认是权限问题。磁盘剩余空间和 ffmpeg 路径都对着配置逐项核一遍。
5.5 重启服务器之后再也没起来
现象:手动能跑,重启机器后服务列表里是停止状态,手动启动还能起来。
原因:sc create注册的服务默认工作目录是C:\Windows\System32,配置里的相对路径全部失效。另一种是服务账户密码改了或者过期了,服务登录失败。第三种是自启顺序问题,服务比网络栈先起来,绑定端口失败后直接退出,没有重试。
解决:配置里所有路径改成绝对路径(这也是 3.2 里反复强调的原因);服务账户用内置账户避开密码过期;在服务属性里设置“恢复”选项,第一次失败后延迟 60 秒重启,给网络栈留出初始化时间。
6. 装完怎么验证:三条命令加一张检查表
装完不等于通。我见过太多“服务起来了、页面能打开”就被判定为完成的情况,结果一推流全是问题。这套环境真正跑通的标准是四条链路同时成立:Web 能访问、RTMP 能推、分发能拉、录像能落盘。前三条用命令就能验,第四条看一眼目录。
第一条命令看端口监听,三个端口必须都在LISTENING状态,而且监听地址是0.0.0.0或者具体网卡 IP,不能是空的:
# 三个端口必须同时存在监听记录 netstat -ano | findstr "LISTENING" | findstr ":10080 :1935 :8081"第二条命令验证 Web 服务本身是否健康,注意要从另一台机器上执行,不要在本机自测,本机通不代表防火墙放行了:
# 从客户端机器验证,期望返回 200/302,响应时间应在 1 秒内 curl -I --connect-timeout 5 http://192.168.1.20:10080/第三条命令验证媒体链路,先推一个本地文件上去,再从服务端拉回来,两头都通才算通:
# 推流 30 秒后停止,观察有无 dropped frame 异常 ffmpeg -re -i .\test.mp4 -t 30 -c copy -f flv rtmp://192.168.1.20:1935/live/check # 另开终端拉流 10 秒,帧计数持续增长说明链路通 ffmpeg -i rtmp://192.168.1.20:1935/live/check -t 10 -f null -最后列一张检查表,装完逐项打勾,比凭感觉判断靠谱:
| 检查项 | 验证方式 | 期望结果 |
|---|---|---|
| 进程状态 | sc query EasyDSS | RUNNING |
| 端口监听 | netstat -ano | findstr ":10080" | 0.0.0.0:10080 LISTENING |
| Web 可达 | 客户端curl -I | 200 或 302,1 秒内返回 |
| 防火墙 | 客户端访问非本机 IP | 不超时 |
| 推流 | ffmpeg 推 30 秒 | 无 error,无大量 dropped |
| 分发 | ffmpeg 拉 10 秒 | 帧计数持续增长 |
| 录像 | 看record_path下当天目录 | 有 flv/mp4 文件且大小在涨 |
| 磁盘余量 | 看数据盘可用空间 | 高于disk_min_free_gb |
| 重启自愈 | 重启服务器后重跑前两行 | 服务自动起来,端口正常 |
这张表我一般会存成文本放在程序目录旁边,版本升级之后照着再走一遍。因为升级最容易丢的就是配置——新版包的 conf 会覆盖旧文件,端口、录像路径、清理策略全被重置回默认值,装的时候一切正常,跑一周发现磁盘满了才发现录像天数回到了 90 天。
从那以后我每次装这类绿色包,都会在解压后第一件事把 conf 原文件复制一份到程序目录外面,改完再对比 diff 一遍;服务起来后不急着交付,先把上面这张表从头跑一次,尤其是重启那一行——不重启验证过一遍的服务,等于没装完。这套 EasyDSS-windows-2.2.7-1912281435 的包本身不复杂,难的是那些不报错的静默失败,希望帮到你。
本文还有配套的精品资源,点击获取