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下部署只需三步:

  1. 从官网下载压缩包
  2. 解压到任意目录(建议路径不要有中文)
  3. 双击运行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 推流失败排查步骤

  1. 检查EasyDarwin是否运行
    确认控制台无报错,访问http://localhost:10008能打开管理界面

  2. 验证端口开放
    Windows下运行:

    netstat -ano | findstr "554"
    # 应有类似输出:
    # TCP    0.0.0.0:554           0.0.0.0:0              LISTENING
    
  3. 测试基础推流
    先用简单命令测试:

    ffmpeg -re -f lavfi -i testsrc -f rtsp rtsp://localhost/test
    

4.2 延迟优化方案

高延迟通常由以下原因导致:

  • 编码参数:使用-preset ultrafast -tune zerolatency
  • 传输协议:添加-rtsp_transport tcp参数
  • 缓存设置:在播放端(如VLC)调整缓存为300ms

4.3 音视频不同步处理

遇到音画不同步时,可以:

  1. 检查源文件信息:
    ffprobe input.mp4
    
  2. 强制统一时间基准:
    ffmpeg -re -i input.mp4 -vsync 1 -f rtsp rtsp://localhost/sync
    
  3. 单独处理音频流:
    -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传输,虽然牺牲了一点延迟,但保证了恶劣网络下的可靠性。

Logo

火山引擎视频云技术社区,是面向 AI 音视频开发者的技术交流平台。这里汇聚源自抖音、豆包等亿级 DAU 产品的 RTC、直播、点播、AI 媒体处理、音视频互动技术,提供接入指南、最佳实践、性能调优、场景案例、Demo 代码、开源项目、白皮书和 API 文档。社区汇聚官方工程师与一线开发者,为 AI 视频通话、数字人、AI 视频处理等应用的开发与落地提供技术支持。

更多推荐