我目前正在使用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的新手,但似乎无法解决此问题。有人可以帮我吗?
答案 0 :(得分:1)
一些帮助您的提示:
async=false
。dts-method=2
设置为mp4mux
,以查看是否有所不同。GST_DEBUG=2 gst-launch-1.0 ...
的输出。