Gstreamer中encodebin与concat流水线搭配mp4mux运行异常问题
问题原因
你遇到的协商失败问题核心是mp4mux的输入约束比mpegtsmux严格得多,结合你的流水线结构,具体有两个触发点:
concat元件要求所有输入流的caps完全一致才能正常输出,而你当前流水线里两路输入到concat的H264流格式不匹配:从input.mp4解析出来的H264是MP4标准的AVCC格式(长度前缀NALU),而encodebin直接输出的H264默认是AnnexB格式(起始码前缀NALU),两路格式不一致导致concat输出的流caps混乱。mp4mux的视频sink pad强制要求输入H264流必须是AU对齐、且格式为AVCC,同时流的SPS/PPS参数必须连续稳定,不能出现中途突变;而mpegtsmux默认适配AnnexB格式,且自带格式容错逻辑,能自动处理不同输入的格式转换,所以能正常运行。
解决方法
你只需要统一两路concat输入的H264格式,并且补充h264parse做格式对齐即可,修改后的流水线如下:
GST_DEBUG=3 gst-launch-1.0.exe concat name=c ! h264parse ! mp4mux name=m ! filesink location=out.mp4 filesrc location=input.mp4 ! parsebin ! h264parse ! "video/x-h264,stream-format=avc,alignment=au,profile=baseline" ! c. videotestsrc num-buffers=100 ! encodebin profile="video/x-h264,tune=zerolatency,profile=baseline" ! h264parse ! "video/x-h264,stream-format=avc,alignment=au,profile=baseline" ! c.
如果仍出现协商失败,可检查input.mp4的H264 level参数,在caps中补充对应的level值,保证两路流的编码参数完全匹配。
内容的提问来源于stack exchange,提问作者rafauu
相关产品推荐
相关产品推荐

