Gstreamer + OpenCV h264编解码图像变形问题

Gstreamer + OpenCV h264 Encoding&Decoding İmage Deformation Problem

硬件: 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

压缩没有问题。当你解码mp4文件时,你应该使用“imxvideoconvert_g2d”。

解码管道应该是 filesrc location=" + device + " ! qt解复用器! h264解析! video/x-h264,宽度=720,高度=480! v4l2h264dec ! imxvideoconverter_g2d! video/x-raw,格式=UYVY,宽度=720,高度=480!视频转换!应用接收器