You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过FFmpeg将RTSP流转换为固定包大小的MPEG-TS UDP流?

如何通过FFmpeg将RTSP流转换为固定包大小的MPEG-TS UDP流?

我完全懂你的困扰——好不容易找到能输出固定大小包的命令,却多了个没必要的RTP头,不想额外写代码处理太麻烦对吧?咱们直接用FFmpeg自带的参数就能搞定这个问题。

你之前用-f rtp_mpegts得到的1328字节固定包,其实是7个188字节的MPEG-TS包加上12字节的RTP头。而用-f mpegtspkt_size参数时包大小波动,核心原因是FFmpeg的mpegts复用器默认有缓存延迟,不会严格按你指定的大小打包。

这里有个精准的解决方案,只需要给命令加两个关键参数,强制复用器输出固定大小的UDP包:

ffmpeg -i rtsp://localhost:123 -f mpegts -muxdelay 0 -muxpreload 0 udp://localhost:456?pkt_size=1316

参数说明:

  • -muxdelay 0-muxpreload 0:这两个参数会关闭复用器的缓存机制,让它一凑够你指定的pkt_size就立刻发送UDP包,不会因为缓存等待而拆分或合并包。
  • pkt_size=1316:这个值刚好是7个MPEG-TS包的总大小(188×7=1316),和你之前用rtp_mpegts时的TS内容大小一致,只是去掉了多余的RTP头。

如果需要其他数量的TS包聚合,只需要把pkt_size改成对应的值就行——比如要4个TS包,就设为188×4=752,以此类推。

用这个命令后,你就能得到每个UDP包大小固定为1316字节的纯MPEG-TS流,完全符合你的需求。

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

火山引擎 最新活动