我正在尝试设置上述来源之一来捕获 Windows 机器上的屏幕。除了一个重要细节外,一切都很好:当管道正在播放时,我无法更改任一 src 中捕获的窗口的坐标。我目前正在使用 C# + Gstreamer-Sharp,但我已经在考虑使用原生 C 包装器。
- 我应该能够在播放时使用上述插件更改窗口的位置吗?
- 如果是,这可能是与 Gstreamer-sharp 相关的问题吗?
- 或者它是否需要一个过程而不是简单地更改管道中元素的值?
这就是我所做的...
var pipeline = new Gst.Pipeline();
screenCapSource = Gst.ElementFactory.Make("gdiscreencapsrc", "ScreencapSource") as Gst.Base.PushSrc;
SetCapWindow(0,0,320,240); //<- works
//Capsfilter...
//X264 encoder
//udpsink
//link...
//launch pipleline
//working fine...
//When pipeline is playing, this doesn't work.
//I never change the dimensions, only the position of the window - to no effect.
public void SetCapWindow(Int32 x, Int32 y, Int32 width, Int32 height){
screenCapSource["x"] = x;
screenCapSource["y"] = y;
screenCapSource["width"] = width;
screenCapSource["height"] = height;
}
这个问题之前已经由我和其他人在 Gst 邮件列表上发布过,但没有回复。
顺便说一句:一种解决方法是使用 Appsink 将屏幕截图从托管代码推送到管道中,但是性能不是很好。