首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Gstreamer来捕捉屏幕并在窗口中显示它?

使用Gstreamer来捕捉屏幕并在窗口中显示它?
EN

Stack Overflow用户
提问于 2015-11-17 01:09:16
回答 1查看 23.5K关注 0票数 9

我需要捕获第二个显示器的屏幕,并在主显示器中“监视”它,在一个窗口内(缩放为x0.5,并使用邻居插值,因为我更喜欢与质量相比的性能)。从这个链接中,我得到了一个屏幕广播命令:

代码语言:javascript
运行
复制
gst-launch ximagesrc ! ffmpegcolorspace ! queue \
! vp8enc quality=10 speed=2 ! mux. alsasrc ! audio/x-raw-int ! queue \
! audioconvert ! vorbisenc ! mux. webmmux name=mux \
! filesink location=screencast.webm

..。但是它捕获到一个文件(不是一个窗口),它缺少缩放和插值类型,声音是不必要的,等等。

由于我熟悉libav,所以我要寻找的是类似于以下内容的内容:

代码语言:javascript
运行
复制
avconv -f x11grab -r 30 -s 1280x1024 -i :0.1 -c:v mpeg4 -b:v 1000k \
-vf "hflip" -vf "scale=640:480" -sws_flags "neighbor" -f avi - | avplay -i -

..。我会使用它,但它与框架有一些问题(问这里)。因此,我在Gstreamer中寻找一种替代方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-20 08:24:38

以下是gst启动命令:

代码语言:javascript
运行
复制
gst-launch-1.0 ximagesrc startx=1280 use-damage=0 ! video/x-raw,framerate=30/1 ! videoscale method=0 ! video/x-raw,width=640,height=480  ! ximagesink

解释:

参数startx =从“像素列”1280开始记录-也就是说,如果您有两个1280宽度监视器,它将从右边的一个开始。

参数use-damage设置为0=不使用XDamage。损坏只计算后续帧之间的差异,这显然是相当高的CPU要求。

元素ximagesink =X服务器创建窗口作为输出-它的CPU需求比闪烁链接(opengl加速窗口)少。

元素videoscale参数method到0,意思是最近的邻居,正如Mario在注释中所建议的。这使得我的CPU节省了17%到12%。

还有可配置的fps和显示窗口的高度/宽度(我认为它足够清晰)。

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

https://stackoverflow.com/questions/33747500

复制
相关文章

相似问题

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