gstreamer-imx视频流和编码

时间:2020-07-08 23:54:02

标签: gstreamer-1.0 imx6

我目前正在使用Nitrogen 6 Max开发板。我正在尝试通过v4l2src从网络摄像头检索视频,以便对反馈进行流式处理并将其编码为保存。

这是管道,它有效:

  v4l2src device="/dev/video2" ! tee name=t
      t. ! queue ! x264enc ! mp4mux ! filesink location=test.mp4
      t. ! queue ! videoconvert ! autovideosink

然后,我尝试使用imx-gstreamer库。我花时间环顾四周,发现这可行:

   gst-launch-1.0 -e videotestsrc num-buffers=1000 ! \
       video/x-raw,width=640,height=480,framerate=30/1 ! imxvpuenc_h264 ! \
       h264parse !  avdec_h264 ! filesink location=cx1.mp4

但是,当我尝试使用“ Tee”分割视频源时,它只是冻结并且终端会话被锁定。

   gst-launch-1.0 -e videotestsrc num-buffers=1000 ! autovideoconvert ! tee name=t \
       t. ! video/x-raw,width=640,height=480,framerate=30/1 ! imxvpuenc_h264 ! h264parse ! avdec_h264 ! filesink location=cx1.mp4 \
       t. ! video/x-raw,width=640,height=480,framerate=30/1 ! autovideosink

我尝试通过tee编码来隔离问题,并意识到它可以运行,但是它生成的视频文件已损坏:

   gst-launch-1.0 -e videotestsrc num-buffers=1000 ! tee name=t \
       t. ! video/x-raw,width=640,height=480,framerate=30/1 ! imxvpuenc_h264 ! \
       h264parse !  avdec_h264 ! filesink location=cx1.mp4

我尝试使用队列,视频转换,但似乎不起作用。

另外,这里还有另一个问题。我是GstElement功能的新手,它决定了可以链接哪个元素(即 v4l2src video / x-raw功能包括I420,这就是为什么我可以将此元素链接到 imxvpuenc_h264 < / em>)。但是,对于元素tee,它是否会拆分并复制src的功能?

我是gstreamer的新手,但似乎无法解决此问题。有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

一些帮助您的提示:

  • 通常,您始终在发球区域的输出端使用队列,以免阻塞管道。
  • 避免阻塞的另一种方法是在接收器元素中设置async=false
  • 尝试将dts-method=2设置为mp4mux,以查看是否有所不同。
  • 使用gstreamer进行调试时,第一条故障排除行。请检查并共享GST_DEBUG=2 gst-launch-1.0 ...的输出。