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

如何强制FFmpeg作为RTSP代理时仅输出TCP协议RTSP流而非默认UDP

强制FFmpeg输出TCP协议RTSP流的解决方法

命令行场景修复

你当前使用的命令存在3个核心问题,是导致未按预期监听TCP端口、自动开启UDP端口的原因:

  1. 输出RTSP地址拼写错误:你使用的rtsp:/192.168.0.100:50041/少了一个斜杠,标准RTSP地址格式为rtsp://IP:端口/路径
  2. 缺少RTSP服务端监听参数:原生FFmpeg的-f rtsp输出默认是推流客户端模式,会主动向指定地址发起推流请求,而非监听端口等待下游拉流。需要添加-rtsp_flags listen参数开启服务端监听模式
  3. 输入参数位置有误:-rtsp_transport tcp作为输入源的参数需要放在输入地址-i之前,才能作用于输入链路

修正后可正常输出TCP协议RTSP流的命令如下:

ffmpeg -re -rtsp_transport tcp -i rtsp://adminassord@rtsp.source:554/live.sdp -f rtsp -rtsp_transport tcp -rtsp_flags listen rtsp://192.168.0.100:50041/

输出侧参数说明:

  • -f rtsp:指定输出封装格式为RTSP
  • -rtsp_transport tcp:强制输出RTSP流的传输层使用TCP协议,替换默认的UDP协议
  • -rtsp_flags listen:开启RTSP服务端监听模式,会在指定的50041端口启动TCP监听,等待拉流客户端连接

如果你的使用场景是将流推给已部署的RTSP服务器(如SRS、ZLMediaKit),不需要添加-rtsp_flags listen参数,直接填写对应服务的推流地址即可,输出传输层仍会走TCP协议。

API调用场景实现

如果你是基于FFmpeg原生API二次开发,对应网友提到的avformat_write_header配置逻辑如下:

  1. 初始化输出格式上下文ofmt_ctx后,创建AVDictionary类型的配置参数集合
  2. 向配置集合中添加两个键值对:
    • 键为rtsp_transport,值为tcp
    • 键为rtsp_flags,值为listen(仅服务端监听场景需要,推流到第三方服务无需添加)
  3. 调用avformat_write_header(ofmt_ctx, &options)时传入配置好的参数集合即可,配置逻辑和命令行参数完全对应。

内容的提问来源于stack exchange,提问作者Barabba

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:57:02