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服务器,配置零门槛:
- 安装服务器:
- 如果你是Ubuntu系统,可以直接用
snap install rtsp-simple-server,或者去官方仓库下载对应系统的预编译二进制包
- 如果你是Ubuntu系统,可以直接用
- 启动服务器:
打开终端直接运行rtsp-simple-server,默认它会监听rtsp://localhost:8554端口 - 修改FFmpeg推流命令,把目标地址指向服务器:
推流成功后,你就能用VLC或其他RTSP客户端连接ffmpeg -report -v verbose -re -stream_loop -1 -i store-aisle-detection.mp4 -c copy -f rtsp rtsp://localhost:8554/mystreamrtsp://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
相关产品推荐
相关产品推荐

