使用EasyDarwin和FFmpeg实现RTSP直播推流实战
1. EasyDarwin与FFmpeg基础介绍
第一次接触流媒体服务时,我被各种协议和工具搞得晕头转向。直到发现了EasyDarwin这个开箱即用的RTSP流媒体服务器,配合FFmpeg这个瑞士军刀般的音视频工具,搭建直播推流系统突然变得简单起来。
EasyDarwin是用Golang编写的轻量级流媒体服务器,支持Windows/Linux/macOS全平台。它最吸引我的特点是零依赖安装——下载解压后直接运行可执行文件就能启动服务,不需要配置复杂的Nginx或SRS。实测在2核4G的云服务器上能稳定支持50路以上的720P视频流转发。
FFmpeg则是音视频领域的"万能转换器"。我常用它做三件事:
- 将本地视频文件转码推流
- 采集摄像头/麦克风实时流
- 对视频流添加水印等处理
这对组合的工作流程很直观:FFmpeg作为生产者将音视频流推送到EasyDarwin服务器,EasyDarwin作为中转站负责流的分发,最终用户通过VLC等播放器作为消费者拉取流。整个过程就像快递系统——FFmpeg是发货方,EasyDarwin是物流中心,播放器是收货方。
2. 环境搭建与配置
2.1 EasyDarwin安装
在Windows下部署只需三步:
- 从官网下载压缩包
- 解压到任意目录(建议路径不要有中文)
- 双击运行EasyDarwin.exe
启动成功后会出现黑色控制台窗口,看到如下日志表示服务正常:
EasyDarwin rtsp server listening on rtsp://0.0.0.0:554
EasyDarwin http server listening on http://0.0.0.0:10008
这时访问http://localhost:10008会看到Web管理界面(默认账号admin/admin)。我建议首次使用时修改配置文件easydarwin.ini中的几个关键参数:
[rtsp]
port=554 # RTSP服务端口
[http]
port=10008 # Web管理端口
auth=1 # 开启登录认证
2.2 FFmpeg安装
FFmpeg的Windows版推荐下载官方静态构建版本:
# 下载解压后添加环境变量
setx /M PATH "%PATH%;C:\ffmpeg\bin"
验证安装成功:
ffmpeg -version
# 应该显示类似输出:
# ffmpeg version 2024-03-21-git-5368f4a759-full_build
3. RTSP推流实战
3.1 本地文件推流
最基础的推流场景是将MP4文件推送到服务器。假设我们有个test.mp4文件:
ffmpeg -re -i test.mp4 -c copy -f rtsp rtsp://localhost/test
这个命令有几个关键参数:
-re:按视频原始帧率推送(不加此参数会全速发送)-c copy:直接复制流不重新编码-f rtsp:指定输出格式为RTSP
在EasyDarwin后台的"推流列表"中可以看到新增的流,用VLC播放rtsp://localhost/test即可观看。
3.2 摄像头实时推流
通过FFmpeg获取摄像头画面(Windows需先安装驱动):
# 先列出可用设备
ffmpeg -list_devices true -f dshow -i dummy
# 推流命令示例(设备名需替换)
ffmpeg -f dshow -i video="Integrated Camera" -vcodec libx264 -preset ultrafast -f rtsp rtsp://localhost/live
这里使用了ultrafast编码预设来降低延迟,实测延迟可控制在1秒内。如果画面卡顿,可以调整分辨率:
-vf "scale=640:480" # 限制分辨率
3.3 推流高级技巧
循环推流适合演示场景:
ffmpeg -re -stream_loop -1 -i test.mp4 -c copy -f rtsp rtsp://localhost/loop
添加时间水印:
ffmpeg -re -i test.mp4 -vf "drawtext=text='%{localtime}':x=10:y=10:fontsize=24:fontcolor=white" -f rtsp rtsp://localhost/watermark
多路流合成(画中画效果):
ffmpeg -re -i main.mp4 -i sub.mp4 -filter_complex "[1]scale=iw/4:ih/4 [pip];[0][pip] overlay=W-w-10:H-h-10" -f rtsp rtsp://localhost/pip
4. 常见问题排查
4.1 推流失败排查步骤
-
检查EasyDarwin是否运行
确认控制台无报错,访问http://localhost:10008能打开管理界面 -
验证端口开放
Windows下运行:netstat -ano | findstr "554" # 应有类似输出: # TCP 0.0.0.0:554 0.0.0.0:0 LISTENING -
测试基础推流
先用简单命令测试:ffmpeg -re -f lavfi -i testsrc -f rtsp rtsp://localhost/test
4.2 延迟优化方案
高延迟通常由以下原因导致:
- 编码参数:使用
-preset ultrafast -tune zerolatency - 传输协议:添加
-rtsp_transport tcp参数 - 缓存设置:在播放端(如VLC)调整缓存为300ms
4.3 音视频不同步处理
遇到音画不同步时,可以:
- 检查源文件信息:
ffprobe input.mp4 - 强制统一时间基准:
ffmpeg -re -i input.mp4 -vsync 1 -f rtsp rtsp://localhost/sync - 单独处理音频流:
-af "aresample=async=1000" # 音频重采样
5. 生产环境建议
在实际项目中部署时,我有几个经验分享:
性能调优方面:
- Linux下用
taskset绑定CPU核心:taskset -c 0,1 ./EasyDarwin - 调整Go运行时参数:
export GOMAXPROCS=4
安全加固措施:
- 修改默认端口避免扫描
- 开启HTTPS访问管理界面
- 定期备份
easydarwin.db数据库文件
监控方案:
- 用API获取服务器状态:
curl http://localhost:10008/api/v1/stat - 对接Prometheus监控推流数量
曾经有个监控项目,我们用树莓派+USB摄像头采集画面,通过4G网络推流到云端EasyDarwin,最终在NVR中存储。这套方案连续运行了8个月没有重启,稳定性超出预期。关键点在于选择了libx264编码和TCP传输,虽然牺牲了一点延迟,但保证了恶劣网络下的可靠性。
火山引擎视频云技术社区,是面向 AI 音视频开发者的技术交流平台。这里汇聚源自抖音、豆包等亿级 DAU 产品的 RTC、直播、点播、AI 媒体处理、音视频互动技术,提供接入指南、最佳实践、性能调优、场景案例、Demo 代码、开源项目、白皮书和 API 文档。社区汇聚官方工程师与一线开发者,为 AI 视频通话、数字人、AI 视频处理等应用的开发与落地提供技术支持。
更多推荐
所有评论(0)