首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gstreamer + OpenCV h264编解码İ图像变形问题

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

Stack Overflow用户
提问于 2021-09-03 08:39:31
回答 1查看 632关注 0票数 1

硬件: Apalis IMX8 CPU和Sensoray模式-1012视频帧抓取器

我试图保存模拟视频与h264编码,并播放它。代码由三部分组成。读取摄像机,用编码保存视频,用解码播放视频。

我面临的问题是解码部分。当我解码并播放视频时,它就会腐烂。

我如何读模拟视频(工作很好):

代码语言:javascript
复制
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);

如何压缩和保存视频(工作正常):

代码语言:javascript
复制
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);

我如何解码和打开视频(不工作很好):

代码语言:javascript
复制
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管道中:

代码语言:javascript
复制
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的视频和上面我给它的管道时,它就会腐烂。损坏的图像示例

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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!视频转换!应用汇

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69041938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档