多个大华摄像头Web播放完整方案(Docker+SRS+FFmpeg)

多个大华摄像头Web播放完整方案(Docker+SRS+FFmpeg)

一、系统架构设计
  1. 前端采集:多路大华摄像头输出RTSP视频流
  2. 中间转换:每路摄像头独立FFmpeg进程将RTSP转为RTMP推送到SRS
  3. 后端分发:SRS服务器统一管理多路流,提供HLS/DASH/WebRTC等Web播放格式
  4. 终端播放:浏览器/VLC等客户端通过不同URL访问各摄像头视频
二、详细实施步骤
1. 获取多路大华摄像头RTSP地址
  • 典型RTSP地址格式
    rtsp://用户名:密码@摄像头IP:554/Streaming/Channels/101
    
  • 示例
    摄像头1:rtsp://admin:12345@192.168.1.100:554/Streaming/Channels/101
    摄像头2:rtsp://admin:12345@192.168.1.101:554/Streaming/Channels/101
    
  • 获取方法
    1. 登录每个大华摄像头Web管理界面
    2. 进入"网络设置"或"RTSP设置"页面
    3. 复制RTSP地址(注意区分不同摄像头的IP和通道号)
2. Docker部署SRS服务器
docker run -d \
  --name srs \
  -p 1935:1935 \       # RTMP服务端口
  -p 8080:8080 \      # SRS管理页面
  -p 1985:1985 \      # SRS管理API
  -p 8000:8000 \      # Web播放服务端口
  ossrs/srs:5
  • 验证
    • 访问管理页面:http://服务器IP:8080(默认账号admin/admin)
    • 查看日志:docker logs srs
3. 多路FFmpeg推流配置

为每个摄像头创建独立的推流命令:

摄像头1推流

ffmpeg -re \
  -i "rtsp://admin:12345@192.168.1.100:554/Streaming/Channels/101" \
  -c:v libx264 -preset veryfast -tune zerolatency \
  -c:a aac \
  -f flv \
  rtmp://服务器IP/live/camera1  # 推流到SRS的RTMP地址(应用名为live,流名为camera1)

摄像头2推流

ffmpeg -re \
  -i "rtsp://admin:12345@192.168.1.101:554/Streaming/Channels/101" \
  -c:v libx264 -preset veryfast -tune zerolatency \
  -c:a aac \
  -f flv \
  rtmp://服务器IP/live/camera2  # 推流到SRS的RTMP地址(流名为camera2)
  • 关键点
    • 每个摄像头使用独立的RTMP流名(如camera1、camera2)
    • 可以使用脚本批量启动多个FFmpeg进程
4. Web播放配置
  • HLS播放(推荐):

    摄像头1:http://服务器IP:8000/live/camera1.m3u8
    摄像头2:http://服务器IP:8000/live/camera2.m3u8
    
    • 直接在浏览器打开对应地址即可播放
    • 或使用VLC播放器访问
  • DASH/WebRTC

    摄像头1:http://服务器IP:8000/live/camera1.mpd  # DASH
    摄像头2:http://服务器IP:8000/live/camera2      # WebRTC
    
三、多路管理优化方案
1. 使用脚本批量管理FFmpeg进程

创建start_streams.sh脚本:

#!/bin/bash
# 启动摄像头1推流
ffmpeg -re -i "rtsp://admin:12345@192.168.1.100:554/Streaming/Channels/101" \
  -c:v libx264 -preset veryfast -tune zerolatency \
  -c:a aac \
  -f flv \
  rtmp://服务器IP/live/camera1 &

# 启动摄像头2推流
ffmpeg -re -i "rtsp://admin:12345@192.168.1.101:554/Streaming/Channels/101" \
  -c:v libx264 -preset veryfast -tune zerolatency \
  -c:a aac \
  -f flv \
  rtmp://服务器IP/live/camera2 &

echo "所有摄像头推流已启动"

运行脚本:

chmod +x start_streams.sh
./start_streams.sh
2. SRS配置优化(支持多路流)
docker exec -it srs bash
vi conf/srs.conf

关键配置示例:

http_remux {
    enabled on;
    mount [vhost]/[app]/[stream].flv;
}

hls {
    enabled on;
    hls_path ./objs/nginx/html;
    hls_fragment 2;  # 切片时长(秒)
    hls_window 60;   # 窗口大小(秒)
}

# 可以添加更多摄像头配置

重启SRS:

docker restart srs
四、常见问题排查
问题现象可能原因解决方法
某路推流失败对应摄像头RTSP地址错误检查该摄像头的用户名/密码/IP/端口
某路Web无画面对应流未成功推送到SRS检查SRS管理页面对应流状态
多路延迟大编码参数未优化统一使用-preset veryfast -tune zerolatency
网络拥塞多路视频带宽不足调整视频码率(如-b:v 1024k
五、生产环境建议
  1. 流命名规范

    • 使用有意义的流名(如camera1camera2
    • 可以按区域/功能分组(如east/camera1
  2. 带宽管理

    • 控制每路视频码率(示例:-b:v 1024k -b:a 128k
    • 使用QoS策略限制总带宽
  3. 监控方案

    • 监控SRS日志:docker logs -f srs
    • 监控FFmpeg进程:ps aux | grep ffmpeg
  4. 安全措施

    • 修改SRS默认密码
    • 限制RTMP推流地址的访问(可通过防火墙或SRS配置)
六、完整命令示例
  1. 启动多路推流
# 摄像头1
ffmpeg -re -i "rtsp://admin:12345@192.168.1.100:554/Streaming/Channels/101" \
  -c:v libx264 -preset veryfast -tune zerolatency \
  -c:a aac -b:a 128k \
  -b:v 1024k \
  -f flv \
  rtmp://服务器IP/live/camera1

# 摄像头2
ffmpeg -re -i "rtsp://admin:12345@192.168.1.101:554/Streaming/Channels/101" \
  -c:v libx264 -preset veryfast -tune zerolatency \
  -c:a aac -b:a 128k \
  -b:v 1024k \
  -f flv \
  rtmp://服务器IP/live/camera2
  1. Web播放地址
摄像头1:http://服务器IP:8000/live/camera1.m3u8
摄像头2:http://服务器IP:8000/live/camera2.m3u8
七、验证步骤
  1. 推流验证

    • 在SRS管理页面(http://服务器IP:8080)查看各流状态是否为active
  2. 播放验证

    • 浏览器分别访问各摄像头的HLS地址
    • 或使用VLC播放器测试

按此方案实施后,即可实现多个大华摄像头的稳定Web实时播放!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值