Android平台GStreamer连接omxgoogleh264encoder与mp4mux失败求助
Android平台GStreamer amc编码器链接mp4mux失败解决方案
错误原因
could not link amcvidenc-omxgoogleh264encoder0 to mp4mux0 报错的核心是编解码器输出的媒体协商参数(Caps)不匹配:
- amcvidenc系列OMX/C2编码器默认输出Annex-B格式(带起始码)的H.264裸流
- mp4mux封装组件默认要求输入AVCC(长度前缀)格式的H.264流,缺少格式转换或显式caps声明时会协商失败
修复方案
1. 流水线修改
在H.264编码器和mp4mux之间插入h264parse组件,自动完成码流格式转换和caps补全,修改后流水线如下:
udpsrc port=9005 ! application/x-rtp-stream,encoding-name=H265 ! queue ! rtpstreamdepay ! rtph265depay ! h265parse ! amcviddec-omxgooglehevcdecoder ! queue ! amcvidenc-omxgoogleh264encoder ! h264parse ! mp4mux ! filesink name=fileSink location=test.mp4
2. 额外适配方案
如果添加h264parse后仍然报错,可通过以下步骤排查:
- 执行
gst-inspect-1.0 amcvidenc-omxgoogleh264encoder查看编码器输出pad支持的所有caps参数 - 在编码器后添加capsfilter手动指定适配mp4mux的格式,示例如下:
amcvidenc-omxgoogleh264encoder ! video/x-h264,stream-format=avcC,alignment=au ! h264parse ! mp4mux
amc编解码器相关说明
amc系列编解码器是GStreamer针对Android平台开发的封装插件,属于gst-plugins-bad插件集的子模块,底层直接调用Android原生的MediaCodec框架(包含OMX、Codec2两种实现的适配),所有编码控制参数和Android官方MediaCodec公开参数完全对齐。
内容的提问来源于stack exchange,提问作者Keivan
相关产品推荐
相关产品推荐

