Android端GStreamer音频UDP传输报错:not-negotiated(-4)求助
排查GStreamer管道协商失败问题
可能原因及修复方案
明确约束音频源输出并添加采样率转换
Android平台的autoaudiosrc默认输出格式可能与目标格式不匹配,且缺少采样率转换环节会导致协商失败。调整管道,加入audioresample处理采样率,并优先约束输出格式:autoaudiosrc ! audioconvert ! audioresample ! audio/x-raw,channels=1,rate=8000,format=S16LE ! mulawenc ! udpsink host=xxxx port=xxxx使用Android专用音频源
替换通用autoaudiosrc为GStreamer针对Android优化的androidaudiosrc,提升系统兼容性:androidaudiosrc ! audioconvert ! audioresample ! audio/x-raw,channels=1,rate=8000,format=S16LE ! mulawenc ! udpsink host=xxxx port=xxxx添加capsfilter强制格式约束
在mulawenc前加入capsfilter,明确强制输入格式,避免中间环节格式漂移:autoaudiosrc ! audioconvert ! audioresample ! capsfilter caps="audio/x-raw,channels=1,rate=8000,format=S16LE" ! mulawenc ! udpsink host=xxxx port=xxxx启用调试日志定位问题
在JNI代码中开启GStreamer调试日志,查看具体哪个环节的Caps协商失败:gst_debug_set_default_threshold(GST_LEVEL_DEBUG);运行后重点关注日志中
caps negotiation相关输出,定位不匹配的元素输入输出格式。优化UDP sink配置
给udpsink添加sync=false参数,避免时钟同步问题导致的流中断:... ! mulawenc ! udpsink host=xxxx port=xxxx sync=false
内容的提问来源于stack exchange,提问作者Kai Pham
相关产品推荐
相关产品推荐

