为何GStreamer使用动态RTP Type96而非静态PCMU/PCMA?如何修改?
解决方案:使用G.711(PCMU/PCMA)固定RTP负载类型
你的问题根源是用错了RTP打包器:rtpL8pay是用于未压缩的8位线性音频的,这类音频没有分配固定的RTP负载类型编号,所以会使用动态类型96。而PCMU(负载0)和PCMA(负载1)属于G.711压缩编码,需要用对应的编码元素+专属RTP打包器才能触发固定负载类型。
正确管道配置
1. 发送PCMU(负载类型0)
先将原始音频编码为G.711 u-law格式,再用rtppcmupay(专门为PCMU设计的RTP打包器,自动设置负载类型0):
gst-launch-1.0 audiotestsrc ! audioconvert ! audio/x-raw,channels=1,rate=8000 ! mulawenc ! rtppcmupay ! udpsink host=172.16.20.15 port=5200
2. 发送PCMA(负载类型1)
编码为G.711 a-law格式,用rtppcmapay(自动设置负载类型1):
gst-launch-1.0 audiotestsrc ! audioconvert ! audio/x-raw,channels=1,rate=8000 ! alawenc ! rtppcmapay ! udpsink host=172.16.20.15 port=5200
关键说明
- 去掉了原管道中的
audioresample和depth=8,width=8参数:G.711编码元素(mulawenc/alawenc)会自动处理音频格式适配,且G.711标准本身要求8kHz单声道,和你的参数完全匹配。 rtppcmupay/rtppcmapay会在RTP头中写入固定的负载类型编号(0或1),Wireshark抓包时会直接识别为PCMU/PCMA,而非动态类型96。
内容的提问来源于stack exchange,提问作者eleleus
相关产品推荐
相关产品推荐

