【发布时间】:2021-11-01 14:51:32
【问题描述】:
硬件: Apalis IMX8 CPU(SOM) 和 Sensoray model-1012 视频抓帧器
我正在尝试使用 h264 编码保存模拟视频并播放它。 代码有 3 个部分。读取摄像头,编码保存视频,解码播放视频。
我面临的问题是解码部分。当我解码并显示视频时,它会损坏。
我如何阅读模拟视频(工作正常):
cap = cv::VideoCapture(" v4l2src device=/dev/video4 ! video/x-raw, format=(string)YUY2, width=(int)720, height=(int)480, framerate=30/1, interlace-mode=interleaved ! deinterlace fields=1 method=2 ! videoconvert ! appsink ",cv::CAP_GSTREAMER);
我如何压缩和保存视频(工作正常):
cv::VideoWriter fixedVideo;
QString pipeTmp = "appsrc ! videoconvert ! v4l2h264enc ! h264parse ! qtmux ! filesink location="+ FixedIMG_recordName +" sync=false ";
std::string pipe = pipeTmp.toUtf8().constData();
isOpen = fixedVideo.open(pipe , cv::CAP_GSTREAMER, (double)30, cv::Size(720,480), true);
我如何解码和打开视频(不能正常工作):
cv::VideoCapture cap_reader;
QString pipeTmp = " filesrc location=" + device + " ! qtdemux ! h264parse ! video/x-h264, width=720, height=480 ! v4l2h264dec ! videoconvert ! appsink ";
std::string pipe = pipeTmp.toUtf8().constData();
cap_reader.open(pipe , cv::CAP_GSTREAMER);
当我打开 cap_read 管道以从 gstreamer 命令行 管道播放相同的视频时,它可以正常工作并出现一些警告。我把 GST_DEBUG 输出放在log.txt 管道中:
GST_DEBUG=3 gst-launch-1.0 -v filesrc location=test.mp4 ! qtdemux ! h264parse ! 'video/x-h264, width=720, height=480, framerate=30/1' ! v4l2h264dec ! videoconvert ! autovideosink
当我从 VLC 打开视频时,它也可以正常工作。但是当我从 VideoCapture 打开视频时,我在上面给出的管道损坏了。损坏的image example。
【问题讨论】:
标签: opencv video gstreamer h.264 v4l2