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

咨询:传输AAC音频需选用哪个GStreamer RTP打包器元素?

合适的GStreamer元素用于RTP传输AAC音频

刚好你遇到的是ADTS格式的AAC流(也就是你从tsdemux拿到的audio/mpeg,mpegversion:2,stream-format:adts caps),专门用来把这种AAC封装到RTP包的GStreamer元素是**rtpmp4apay**。

为什么选它?

rtpmp4apay是专门为MPEG-4 AAC设计的RTP负载封装器,它能自动解析ADTS头部里的音频参数(比如采样率、声道数),生成符合RFC 3640标准的RTP包,完美适配你当前的输入流格式。

示例发送端管道

你可以试试这条管道,把tsdemux输出的ADTS-AAC封装成RTP并通过UDP发送:

gst-launch-1.0 filesrc location=your_input_file.ts ! tsdemux ! audio/mpeg,mpegversion=2,stream-format=adts ! rtpmp4apay ! udpsink host=127.0.0.1 port=5000

如果元素协商出问题,你可以加个capsfilter明确锁定caps,避免自动协商出错:

gst-launch-1.0 filesrc location=your_input_file.ts ! tsdemux ! capsfilter caps="audio/mpeg,mpegversion=2,stream-format=adts" ! rtpmp4apay ! udpsink host=127.0.0.1 port=5000

对应的接收端测试管道

要验证传输是否正常,用这条接收端管道来解码播放:

gst-launch-1.0 udpsrc port=5000 ! application/x-rtp,media=audio,encoding-name=MP4A-LATM ! rtpmp4adepay ! aacparse ! faad ! autoaudiosink

注意点

如果你的AAC是不带ADTS头的原始裸流,那会用到rtpmp4gpay,但你的情况明确是ADTS格式,所以rtpmp4apay才是正确选择。要是之前的管道失败,大概率是caps匹配没做好,用capsfilter强制指定就能解决大部分协商问题。

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

火山引擎 最新活动