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

如何通过Nginx将RTSP IP摄像头流推送到网站并解决FFmpeg推流报错

解决方案

1. 修复FFmpeg推流报错

报错的核心原因是你错误指定了输出格式为mp4:MP4封装要求输出目标支持随机写入(补写头部元数据),而RTMP是流式传输协议不支持seek操作,因此触发报错。
将输出格式改为RTMP适配的flv即可,修正后命令如下:

ffmpeg -rtsp_transport tcp -i rtsp://user:password@ip-camera:554/h264Preview_01_main -vcodec copy -acodec aac -f flv rtmp://ip-address:1935/live/cam

注:如果摄像头原流音频格式为非AAC编码,不能直接用-acodec copy,浏览器不支持HLS流携带除AAC外的音频格式,必须转码为AAC。

2. 修复HTML视频源配置错误

你当前配置的type="application/x-mpegURL"对应HLS流媒体协议,浏览器原生不支持直接播放RTMP地址,需改为Nginx生成的HLS索引文件地址:

<source src="http://ip-address/hls/cam.m3u8" type="application/x-mpegURL" />

3. 补充Nginx必要配置

你需要先给Nginx编译安装nginx-rtmp-module模块,再添加如下配置实现RTMP流转HLS切片:

rtmp {
    server {
        listen 1935;
        application live {
            live on;
            # 开启HLS切片
            hls on;
            hls_path /usr/share/nginx/html/hls;
            hls_fragment 2s;
            hls_playlist_length 10s;
        }
    }
}
http {
    server {
        listen 80;
        # 配置HLS文件访问规则
        location /hls {
            root /usr/share/nginx/html;
            add_header Access-Control-Allow-Origin *;
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
        }
    }
}

4. 为什么写入MP4文件无法实时读取

MP4文件的元数据默认存储在文件尾部,FFmpeg未完成整个文件写入并关闭句柄前,元数据不完整,播放器无法正常解析文件内容。实时直播场景不要使用本地MP4文件中转的方案,HLS/WebRTC是更适配的技术方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:15:02