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

FFmpeg搭建RTSP无限循环流媒体服务器报错:Could not write header for output file #0 求助排查

FFmpeg搭建RTSP无限循环流媒体服务器报错:Could not write header for output file #0 求助排查

嘿,我来帮你捋捋问题根源!你碰到的这个报错核心点其实很明确:FFmpeg本身不带RTSP服务器功能,你直接用-f rtsp把流推到rtsp://localhost:8888/mystream,但这个端口上根本没有RTSP服务器在监听接收你的流——虽然TCP连接成功了,但RTSP协议层面的握手、头信息写入完全没法完成,所以才抛出了"Could not write header"的错误。

下面给你两个可行的解决方案,都能实现你无限循环视频推RTSP流的需求:

方案一:用轻量RTSP服务器(推荐,稳定支持多客户端)

目前最常用的是rtsp-simple-server,这是个开源轻量的RTSP服务器,配置零门槛:

  1. 安装服务器:
    • 如果你是Ubuntu系统,可以直接用snap install rtsp-simple-server,或者去官方仓库下载对应系统的预编译二进制包
  2. 启动服务器:
    打开终端直接运行rtsp-simple-server,默认它会监听rtsp://localhost:8554端口
  3. 修改FFmpeg推流命令,把目标地址指向服务器:
    ffmpeg -report -v verbose -re -stream_loop -1 -i store-aisle-detection.mp4 -c copy -f rtsp rtsp://localhost:8554/mystream
    
    推流成功后,你就能用VLC或其他RTSP客户端连接rtsp://localhost:8554/mystream,观看无限循环的视频了。

方案二:让FFmpeg自身作为RTSP服务器监听(无需额外软件)

FFmpeg支持通过listen参数,让自己变成一个被动的RTSP服务器,等客户端连接后再开始推流:
修改你的命令如下:

ffmpeg -report -v verbose -re -stream_loop -1 -i store-aisle-detection.mp4 -c copy -f rtsp rtsp://localhost:8888/mystream?listen=1

这里的?listen=1是关键,它告诉FFmpeg在指定端口监听客户端的RTSP连接请求,当有客户端(比如VLC)连上来后,FFmpeg才会开始发送循环的视频流。

最后补充两个小提示:

  • 你之前换MP4/TS格式没用,因为问题根本不在输入文件格式,而是缺少接收流的RTSP服务器
  • 方案二的FFmpeg监听模式是单客户端的,多个客户端同时连接可能会出问题,要是需要多设备访问,优先选方案一

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 13:19:32