我正在尝试创建一个 GStreamer 管道,该管道使用
vpudec和
tee元素解码 H264 视频,如下所示:
v4l2src ! vpudec ! tee name=t
t. ! queue ! videorate ! imxvideoconvert_g2d ! vpuenc_h264 ! h264parse ! rtph264pay ! rtpbin ! udpsink
t. ! queue ! videorate ! imxvideoconvert_g2d ! vpuenc_h264 ! appsink
如果我使用此配置运行管道,同时仅将一个分支附加到 t 形元素,则它可以正常工作。一旦我将第二个分支添加到 tee 元素(顺序无关紧要),我的程序就会崩溃。我已经尝试将具有
max-size-time=0属性的队列元素添加到第一个管道(在 vpudec 之前或之后,或两者),但它什么也没做。
我设法通过向第一个管道添加更多元素来防止崩溃,因此它看起来像这样:
v4l2src ! vpudec ! queue ! videorate ! imxvideoconvert_g2d ! tee
这样做会出现一个新问题——添加视频分辨率较低的第二个分支会影响第一个分支上的视频分辨率。
重现步骤:
- 在 1080p 添加分支 1
- 在 240p 添加分支 2
结果:分支 1 分辨率显着下降。看起来像240p。
这是即时发生的,无需重新启动管道。
注意:在同一台设备上使用 RAW 相机运行类似配置(无需解码)时,没有任何问题。
v4l2src ! tee
编辑:我已将日志添加为附件。
使用的管道:
GST_DEBUG=4 gst-launch-1.0 v4l2src device=/dev/video2 ! video/x-h264 ! vpudec ! tee name=t
t. ! queue ! videorate ! imxvideoconvert_g2d ! videoconvert ! vpuenc_h264 ! appsink
t. ! queue ! videorate ! imxvideoconvert_g2d ! vpuenc_h264 ! h264parse ! rtph264pay ! udpsink
两个分支单独工作正常,添加第二个分支时程序崩溃。