工具/软件:Linux
我在 AM5728 EVM 上使用的是最新的 TI Process SDK 05.00.00.15以及 Linux 内核4.14.40和 GStreamer 1.12.2版。 我正在使用 GStreamer 创建3条管线。 这3条管道中的2条从2个 V4L2摄像机捕获、并将摄像机数据文件链接到2个 Linux 命名管道。 第3个管道从这2个命名管道中的每个管道读取并将流编码为 Matrosska 文件。 2个流中的1个采用 Huffman 编码、1个采用 H264编码。
这些管道使用以下脚本构建:
#!/bin/sh
killall gst-launch-1.0 2>/dev/null
rm -rf /tmp/test-h264-test.mkv /tmp/vl-gstreamer-pipe /tmp/ir-gstreamer-pipe
gst-launch-1.0 -v -e v4l2src device=/dev/video2 io-mode=4! 'video/x-raw、format=(string) UYVY、width=(int) 160、height=(int) 120、framerate=9/1'! 视频转换! 'video/x-raw、format=(string) NV12、width=(int) 160、height=(int) 120'! filesink buffer-mode=nbuffer buffer-size=0 location=/tmp/ir-gstreamer-pipe sync-true &
gs-launch-1.0 -v -e v4l2src device=/dev/video1! 'video/x-raw、format=(string) YUY2、width=(int) 640、height=(int) 480、framerate=30/1'! 视频转换! 'video/x-raw、format=(string) NV12、width=(int) 640、height=(int) 480'! filesink buffer-mode=nbuffered buffer-size=0 location=/tmp/vl-gstreamer-pipe sync-true &
for I in {1..15}
请
执行回显“正在等待... $I"
睡眠1
完成睡眠3
GST-LAUNCH-1.0 -v -e 文件 rc 位置=/tmp/ir-gstreamer-pipe do-timestime=true blocksize=28800! 视频粗宽度=160高度=120帧速率=9格式=nv12! 'video/x-raw、format=(string) NV12、width=(int) 160、height=(int) 120、framerate=9/1'! 视频转换! 'video/x-raw、format=(string) BGRA、width=(int) 160、height=(int) 120、framerate=9/1'! 天堂! 排队! 多路复用。 filesrc location=/tmp/vl-gstreamer-pipe blocksize=460800 DO 时间戳=true! 视频粗宽度=640高度=480帧速率=30格式=nv12! 排队! 'video/x-raw、format=(string) NV12、width=(int) 640、height=(int) 480、framerate=30/1'! ducatih264enc! 排队! 'VIDEO/x-h264、宽=640、高=480'! h264parse! 排队! 多路复用。 matroskamux name=mux Min-index-interval=1000000000! 排队! filesink buffer-mode=nbuffer buffer-size=0 location=/tmp/test-h264-test.mkv sync-true
for I in {1..20}
do
ls -lRT /tmp | egrep "gstream|264"
sleep 1
done
pgrep -f gst-launch | xargs kill -2
多路复用器会在短时间内(仅几秒钟)读取命名管道,然后立即失败。 短文件中包含的数据可以成功地解复用并使用以下命令回放。 多路信号分离流看起来不错、大小不同:
gst-launch-1.0文件 rc location=test-h264-test.mkv! 排队! matroskademux 名称=d d.video_0! 排队! 很棒! 视频转换! 视频装饰! 视频/x-raw、帧速率=9/1! waylandsink sync-false gst-launch-1.0文件 rc location=test-h264-test.mkv! 排队! matroskademux name=d d.video_1! 排队! h264parse! ducatih264dec! 视频装饰! 视频/x-raw、帧速率=30/1! landwaysink 同步=错误
以下消息以红色突出显示 EOS:
/GstPipeline0/GstFileSink:filesink0.GstPad:sink:cap = video/x-matroska、streambheader=(buffer)< 1a45dfa3000000000001442896d6174726f736b610042878102458108000000ffffff60080670100538000036bffffffffffffffff100410053800004510046100ffffffffffffffffffffffffffffffffffff100410053800001853100ffffffffffffffffffffffffffffffff100410053100f800001853100ffffffffffffffffffffffffffffffffffffffffffffff1004100410041005310053100ff100f800001853100f8000036b53100ffffffffffffffffffffffffffffffffffffffffffffffffffff100531005310053100f8000036b5310053100ff10053100 在0:00:02.604358548 将管道设置为暂停后结束执行... 正在将管道设置为就绪... 正在将管道设置为 NULL ... 正在释放管道...
为什么多路复用器管道几乎立即裸片? 我如何才能使它可靠地记录、直到我故意将其杀死?
感谢您的帮助、
Phil
