gpt4 book ai didi

opencv - 我可以使用opencv将Gstreamer输出存储到缓冲区吗?如果我在管道中添加appsink

转载 作者:行者123 更新时间:2023-12-02 16:58:50 26 4
gpt4 key购买 nike

您好,我是gstreamer的新手。到目前为止,我正在使用c++中的opencv中的gstreamer管道对帧进行编码。但是现在我不想转储每个帧。我想对所有帧进行编码并将其存储在大缓冲区中,每当我需要时,我都会转储该缓冲区。所以我该如何在gstreamer opencv中执行appsink。
在我的代码片段下面,我正在编码每个帧并转储

cv::VideoWriter out("appsrc !  videoconvert ! video/x-raw,width=1280,height=720 ! v4l2h264enc ! avimux ! filesink location=hellotest.avi",cv::CAP_GSTREAMER,0,30,cv::Size(1280,720),true);
out.write(Frame);
但是我希望appsink将所有编码的数据存储到缓冲区中,但我不想将其转储或写入。

最佳答案

最简洁的答案是不。
首先,您无法使用VideoWriter同时进行读写。您可以做的是创建两个使用ipcpipeline元素相互通信的管道。
例如

cv::VideoWriter out("appsrc !  videoconvert ! video/x-raw,width=1280,height=720 ! v4l2h264enc ! ipcpipelinesink",...);
cv::VideoCapture cap("ipcpipelinesrc ! ... ! appsink")
但这不会为您提供许多替代方案,因为如果您检查 souce codeVideoCapture支持的数据格式非常有限。
// we support 11 types of data:
// video/x-raw, format=BGR -> 8bit, 3 channels
// video/x-raw, format=GRAY8 -> 8bit, 1 channel
// video/x-raw, format=UYVY -> 8bit, 2 channel
// video/x-raw, format=YUY2 -> 8bit, 2 channel
// video/x-raw, format=YVYU -> 8bit, 2 channel
// video/x-raw, format=NV12 -> 8bit, 1 channel (height is 1.5x larger than true height)
// video/x-raw, format=NV21 -> 8bit, 1 channel (height is 1.5x larger than true height)
// video/x-raw, format=YV12 -> 8bit, 1 channel (height is 1.5x larger than true height)
// video/x-raw, format=I420 -> 8bit, 1 channel (height is 1.5x larger than true height)
// video/x-bayer -> 8bit, 1 channel
// image/jpeg -> 8bit, mjpeg: buffer_size x 1 x 1
// bayer data is never decoded, the user is responsible for that
// everything is 8 bit, so we just test the caps for bit depth

关于opencv - 我可以使用opencv将Gstreamer输出存储到缓冲区吗?如果我在管道中添加appsink,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63279220/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com