硬件: Apalis IMX8 CPU和Sensoray模式-1012视频帧抓取器
我试图保存模拟视频与h264编码,并播放它。代码由三部分组成。读取摄像机,用编码保存视频,用解码播放视频。
我面临的问题是解码部分。当我解码并播放视频时,它就会腐烂。
我如何读模拟视频(工作很好):
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的视频和上面我给它的管道时,它就会腐烂。损坏的图像示例。

发布于 2021-11-02 13:57:31
压缩没有问题。当您解码mp4文件时,应该使用"imxvideoconvert_g2d“。
解码管道应该是文件be location=“+ device +”!qtdemuxh264parse!视频/x-H 264,width=720,height=480!v4l2h264dec!imxvideoconverter_g2d!视频/x-生,format=UYVY,width=720,height=480!视频转换!应用汇
https://stackoverflow.com/questions/69041938
复制相似问题