我正在使用运行arago linux的AM335x入门套件开发基于gstreamer的应用程序。 “gst-launch”(带有测试管道)提供正确的命令行输出(串行),但在屏幕上不显示任何内容。 BTW屏幕默认显示一个qt演示应用程序。杀死这个演示应用程序会导致gst-launch失败。
我编译了一个“hello world”gtk app,它给出了“Gtk-WARNING **:无法打开显示:”错误。顺便说一句,这里没有X.
但是当我运行Qt“hello world”应用程序时,演示应用程序顶部会显示一个弹出窗口。
有人可以解释原因。我们欢迎任何解决此问题的建议。
UPDATE1: 如果我错了,请纠正我。我在想也许使用qt-gstreamer API可能是最简单的方法。
UPDATE2: 我可以使用“fbdevsink”gstreamer插件来完成这项工作。 感谢所有指针。
答案 0 :(得分:5)
这听起来很奇怪。
GTK +依赖于GDK的绘图和输入需求,GDK在不同的平台和环境中使用不同的后端。
X11后端是一个,但还有其他。
您必须确保使用适合您环境的后端构建GDK。
答案 1 :(得分:1)
我对GTK没有经验,但我的理解是,GTK本身就是一个图形工具包。这是其中的一部分,需要图形后端才能工作。还有其他不需要的东西,它们放在GLib中。
Qt是更通用的工具包,它内置了许多功能,如果你有GTK GUI,你可以使用其他一些库。使用Qt,您可以构建不需要图形后端的应用程序,但您必须从QCoreApplication
类创建应用程序对象实例。如果您有一个使用QApplication
的Qt应用程序,并且您尝试在没有图形后端的情况下运行它,那么您也会收到错误。
原因是实用性和保持简单,也许还有一个次优的设计,这使得从图形后端分离一些东西变得困难。很多事情真的取决于拥有图形后端,并且在没有图形后端的情况下添加特殊情况可以被视为额外的复杂性(==工作和错误)而没什么好处。
关于你问题的第二部分,我不知道GTK的解决方法,除非你实际上并不想要绘制任何东西,否则不要使用它。但我认为通常情况下,您需要提供一个“虚拟”图形后端,它可以满足要求而无需实际拥有屏幕。
答案 2 :(得分:1)
至少有以下方法可以获得非X提供的gtk capplication:
您可以找到有关它的更多信息:http://www.gtk.org/api/2.6/gtk/gtk-framebuffer.html
这有点激烈,所以你需要坚持像glib等等。
答案 3 :(得分:1)
GTK +需要一个工作窗口系统 - 即X11,Windows,MacOS X或Wayland - 以显示内容和处理事件。
较旧版本的GTK +允许使用Linux帧缓冲设备或DirectFB作为窗口系统,但这两个后端已被弃用,要么在较新版本的GTK +库中删除,要么不受维护且可能已损坏。