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

FFmpeg接收UDP/RTP流需终止才写入文件,如何实现实时输出?

解决方案

一、解决HLS实时输出问题

你当前的命令无法实时生成TS片段和播放列表,核心原因是HLS参数配置未适配直播流场景。修改命令如下,添加关键参数实现实时写入:

ffmpeg -protocol_whitelist file,crypto,udp,rtp -analyzeduration 2147483647 -probesize 2147483647 -i a.sdp -c copy -an -f hls -hls_time 4 -hls_flags append_list+omit_endlist -hls_segment_filename stream_%03d.ts stream.m3u8

参数说明:

  • -hls_flags append_list:每生成一个TS片段就立即追加到m3u8播放列表,无需等待流终止
  • -hls_flags omit_endlist:不在播放列表末尾添加#EXT-X-ENDLIST标记,让播放器持续识别新片段
  • -hls_segment_filename:显式指定TS片段命名规则,确保FFmpeg能稳定生成片段文件

如果原摄像头流的关键帧间隔不固定或大于4秒,可能导致TS片段时长异常,可强制插入关键帧(仅轻量编码,不影响性能):

ffmpeg -protocol_whitelist file,crypto,udp,rtp -analyzeduration 2147483647 -probesize 2147483647 -i a.sdp -c copy -an -force_key_frames expr:gte(t,n_forced*4) -f hls -hls_time 4 -hls_flags append_list+omit_endlist -hls_segment_filename stream_%03d.ts stream.m3u8

二、RTSP输入指定本地监听端口

若要直接用RTSP URL作为输入并指定FFmpeg本地监听端口,可使用-rtsp_transport udp结合-rtsp_localport参数:

ffmpeg -rtsp_transport udp -rtsp_localport 5000 -i rtsp://摄像头IP/流路径 -c copy -an -f hls -hls_time 4 -hls_flags append_list+omit_endlist stream.m3u8

参数说明:

  • -rtsp_transport udp:强制使用UDP传输RTSP流
  • -rtsp_localport 5000:指定RTP数据的本地监听端口,RTCP端口自动使用5001;如需指定RTCP端口,可写成-rtsp_localport 5000:5002(前为RTP端口,后为RTCP端口)

额外建议

  • 去掉-v 9 -loglevel 99,过高日志级别会输出冗余信息、占用性能,调试完成后可改为-loglevel info或-loglevel warning
  • 若存在流丢包,添加-max_delay 500000(500毫秒缓冲),避免播放卡顿
  • 直播场景可设置-hls_list_size 10,仅保留最近10个TS片段,防止磁盘空间耗尽

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:01:14