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

FFmpeg转码后AAC extradata及extradata_size未通过UDP传输问题

解决FFmpeg UDP传输TS流时接收端extradata_size为0的问题

我来帮你排查这个extradata丢失的问题,结合你给出的发送和接收命令,主要有几个可能的原因和对应的解决思路:

一、确保发送端正确生成并传递extradata

你的发送端命令中对音频转码为AAC,但可能没有强制FFmpeg将包含extradata的全局头写入输出流,导致TS流里没有携带关键的音频配置信息:

  1. 添加-flags +global_header参数,强制FFmpeg把包含extradata的全局头写入流的起始位置,修改后的发送命令:
    ./ffmpeg -re -y -loglevel verbose -err_detect careful -f mpegts -i <ts_file_path> -c:v copy -c:a aac -flags +global_header -f mpegts "udp://127.0.0.1:2567"
    
  2. 可以额外添加-mpegts_flags +resend_headers参数,让FFmpeg定期重发流的头部信息,避免接收端因丢包错过初始的extradata:
    ./ffmpeg -re -y -loglevel verbose -err_detect careful -f mpegts -i <ts_file_path> -c:v copy -c:a aac -flags +global_header -mpegts_flags +resend_headers -f mpegts "udp://127.0.0.1:2567"
    
  3. 先验证输入TS文件本身是否有音频extradata,用ffprobe <ts_file_path>查看输出,确认音频流的extradata_size不为0——如果输入本身就没有,发送端也无法生成有效extradata。

二、调整接收端的流探测配置

接收端的探测参数可能不足以捕获到extradata:

  1. 增大analyzeduration和probesize的值,给FFmpeg更多时间和数据量解析流头部:
    ./ffmpeg -re -y -loglevel error -err_detect careful -analyzeduration 16000000 -probesize 8000000 -rtbufsize 300000 -flush_packets 0 -fflags +genpts -max_delay 20000...
    
  2. 暂时去掉-fflags +discardcorrupt参数,确认是不是这个参数丢弃了包含extradata的初始损坏(或格式特殊)的包,排查后再决定是否加回。

三、排查FFmpeg版本兼容性

不同版本的FFmpeg对TS流中extradata的封装/解析逻辑可能存在差异,尝试升级到最新稳定版的FFmpeg,看看是否解决了这个兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:51:38