使用 Gstreamer 捕获屏幕并将其显示在 window 中?
Using Gstreamer to capture screen and show it in a window?
我需要捕获第二个显示器的屏幕并 "monitor" 它在主显示器中,在 window 内(按 x0.5 缩放并使用相邻插值,因为我更喜欢性能而不是质量).从这个 link,我得到了这个截屏命令:
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
...但它捕获到一个文件(不是 window),它缺少比例和插值类型,声音不是必需的,等等。
由于我熟悉 libav,所以我正在寻找与此类似的东西:
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 -
...我会用它,但它的帧率有一些问题(询问here)。所以,我正在 Gstreamer.
中寻找替代方案
这是 gst 启动命令:
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
= 从 "pixel column" 1280 开始记录 - 也就是说,如果您有两个 1280 宽度的显示器,它将从右侧的那个开始。
参数 use-damage
设置为 0 = 不使用 XDamage。损坏仅计算后续帧之间的差异,这显然要求 CPU。
元素 ximagesink
= X 服务器创建 window 作为输出 - 它比 glimagesink(opengl 加速 window)要求更少 CPU。
element videoscale
parameter method
to 0 meaning nearest neighbor 正如 Mario Mey 在评论中所建议的那样。这使我 CPU 节省了 17% 到 12%。
还有可配置的fps和height/width显示window(我觉得够清楚了)。
我需要捕获第二个显示器的屏幕并 "monitor" 它在主显示器中,在 window 内(按 x0.5 缩放并使用相邻插值,因为我更喜欢性能而不是质量).从这个 link,我得到了这个截屏命令:
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
...但它捕获到一个文件(不是 window),它缺少比例和插值类型,声音不是必需的,等等。
由于我熟悉 libav,所以我正在寻找与此类似的东西:
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 -
...我会用它,但它的帧率有一些问题(询问here)。所以,我正在 Gstreamer.
中寻找替代方案这是 gst 启动命令:
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
= 从 "pixel column" 1280 开始记录 - 也就是说,如果您有两个 1280 宽度的显示器,它将从右侧的那个开始。
参数 use-damage
设置为 0 = 不使用 XDamage。损坏仅计算后续帧之间的差异,这显然要求 CPU。
元素 ximagesink
= X 服务器创建 window 作为输出 - 它比 glimagesink(opengl 加速 window)要求更少 CPU。
element videoscale
parameter method
to 0 meaning nearest neighbor 正如 Mario Mey 在评论中所建议的那样。这使我 CPU 节省了 17% 到 12%。
还有可配置的fps和height/width显示window(我觉得够清楚了)。