如何使用Vala将GStreamer视频输出到Gdk.Pixbuf?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Vala将GStreamer视频输出到Gdk.Pixbuf?相关的知识,希望对你有一定的参考价值。
我在我的程序中使用GStreamer 1.0来播放文件中的视频。我想将它输出到Gdk.Pixbuf,将其添加到Image以显示它。但我无法弄清楚如何正确使用它。
这是我试图做的,但它不会编译:
this.pipeline = new Pipeline ("mypipeline");
this.src = ElementFactory.make ("filesrc", "video");
src.set("location", downloadFileName);
this.sink = ElementFactory.make ("gdkpixbufsink", "sink");
this.pipeline.add_many (this.src, this.sink);
this.src.link (this.sink);
this.pipeline.set_state (State.PLAYING);
this.videoPixbuf = sink.get("last-pixbuf") as Gdk.Pixbuf;
如果可能的话,你能建议我如何正确地做到这一点吗?或者如何在不使用Gdk.Pixbuf的情况下以其他方式实现?我只是不知道该怎么做。
答案
我不知道vala,但你应该看看那里:
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideooverlay.html,寻找Cttk实现的videooverlay用法,这应该很容易翻译成Vala。
另一答案
编辑:Matthew Waters为您提供Gtk / Gst元素:https://github.com/ystreet/gtkgst
gtksink
元素为您的应用程序提供视频小部件
public static void main (string[] args) {
X.init_threads();
Gst.init (ref args);
Gtk.init (ref args);
var sink = Gst.ElementFactory.make ("gtksink", "sink");
var playbin = Gst.ElementFactory.make ("playbin", "bin");
playbin["video-sink"] = sink;
playbin["uri"] = "http://www.nicolas-hoffmann.net/animations/Cavernae_Terragen2.mp4";
Gtk.Widget area;
sink.get ("widget", out area);
var win = new Gtk.Window();
var bar = new Gtk.HeaderBar();
bar.title = "Test";
bar.show_close_button = true;
win.set_titlebar (bar);
win.add (area);
win.realize.connect (() => {
playbin.set_state (Gst.State.PLAYING);
});
win.set_size_request (400, 300);
win.show_all();
Gtk.main();
}
以上是关于如何使用Vala将GStreamer视频输出到Gdk.Pixbuf?的主要内容,如果未能解决你的问题,请参考以下文章
使用Gstreamer 作为数据源输出视频数据 VI 集成gstreamer
如何将 gstreamer 1.0 视频元素添加到 qt5 应用程序