You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于现有rtsp2mjpg Docker配置实现H264/MJPEG转码为640x480分辨率RTSP MJPEG流的方案咨询

基于现有rtsp2mjpg Docker配置实现H264/MJPEG转码为640x480分辨率RTSP MJPEG流的方案咨询

Hey Martin,我完全get到你的需求:你已经用rtsp2mjpg把大华摄像头的流转成了HTTP协议的MJPEG,但2N Verso只认RTSP,所以得把转码后的640x480 MJPEG输出成RTSP流对吧?

首先得明确:你当前用的ffserver本身不支持RTSP输出,它只能处理HTTP流媒体,所以我们需要调整现有Docker配置,引入一个RTSP流媒体服务器来实现这个需求。下面给你两种可行的方案,都是基于你的现有配置扩展的:

方案一:新增RTSP流媒体服务器+FFmpeg转码(推荐)

这个方案不用改动你原有的HTTP MJPEG服务,同时新增RTSP输出能力,步骤如下:

1. 修改docker-compose.yaml

在你现有的配置里新增两个服务:一个轻量的RTSP服务器(rtsp-simple-server),一个专门用来转码推流的FFmpeg容器:

version: '3'

services:
  # 保留你原有的rtsp2mjpg服务(如果还需要HTTP流的话)
  rtsp2mjpg:
    image: eroji/rtsp2mjpg
    restart: always
    expose:
      - "8090"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      # - ./ffserver.conf:/etc/ffserver.conf:ro # 保留原配置
    environment:
      RTSP_URL: rtsp://2n:va22ad17.03@192.168.188.52:554/cam/realmonitor?channel=1&subtype=0
      FFSERVER_LOG_LEVEL: error
      FFMPEG_LOG_LEVEL: warning
      FFMPEG_INPUT_OPTS: -use_wallclock_as_timestamps 1
      FFMPEG_OUTPUT_OPTS: -async 1 -vsync 1
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:8090/still.jpg --max-time 1 --output /dev/null || exit 1"]
      interval: 15s
      timeout: 1s
      retries: 3
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

  # 保留原有的Nginx服务(如果需要HTTP流的话)
  nginx:
    image: nginx:alpine
    restart: always
    links:
      - rtsp2mjpg
    ports:
      - "80:80"
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro

  # 新增RTSP流媒体服务器
  rtsp-server:
    image: aler9/rtsp-simple-server
    restart: always
    ports:
      - "8554:8554" # RTSP默认端口
    command: ["--protocols", "tcp"] # 强制用TCP传输,避免丢包

  # 新增FFmpeg转码推流服务
  ffmpeg-transcode:
    image: jrottenberg/ffmpeg:4.4-alpine
    restart: always
    depends_on:
      - rtsp-server
    command: >
      -i rtsp://2n:va22ad17.03@192.168.188.52:554/cam/realmonitor?channel=1&subtype=0
      -vf scale=640:480 # 强制转成640x480分辨率
      -f mjpeg # 输出MJPEG格式
      -q:v 10 # 画质调整(1-31,数值越小画质越高)
      -r 15 # 帧率设置为15,匹配你原ffserver的配置
      rtsp://rtsp-server:8554/stream.mjpg # 推流到RTSP服务器的流地址
    environment:
      - TZ=Europe/Berlin # 根据你的本地时区调整

2. 测试与配置

  • 启动所有服务:docker-compose up -d
  • 先用VLC播放器测试RTSP流:输入rtsp://你的Docker主机IP:8554/stream.mjpg,确认能正常播放640x480的MJPEG流
  • 把这个地址配置到2N Verso的外部摄像头设置里即可

方案二:替换rtsp2mjpg为多功能流媒体容器(适合简化配置)

如果你不需要保留原有的HTTP MJPEG流,可以直接用一个支持同时输出HTTP和RTSP的容器,比如aler9/rtsp-simple-server配合内置的转码功能,或者用linuxserver/ffmpeg容器直接处理:

不过方案一更灵活,既能保留原有的HTTP服务,又能新增RTSP输出,更符合你的现有场景。

注意事项

  • 确保Docker主机的8554端口没有被其他服务占用,且2N Verso所在的网络能访问到这个端口
  • 可以根据2N Verso的具体参数调整FFmpeg的-q:v(画质)和-r(帧率)
  • 如果原摄像头的流有认证问题,确认RTSP_URL里的用户名和密码正确,必要时可以在VLC里先测试原RTSP流的可用性

备注:内容来源于stack exchange,提问作者Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 12:57:56