如何使用Vala将GStreamer视频输出到Gdk.Pixbuf?

问题描述 投票:0回答:2

我在我的程序中使用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的情况下以其他方式实现?我只是不知道该怎么做。

video gstreamer vala
2个回答
3
投票

我不知道vala,但你应该看看那里:

http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideooverlay.html,寻找Cttk实现的videooverlay用法,这应该很容易翻译成Vala。


3
投票

编辑: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();
}
© www.soinside.com 2019 - 2024. All rights reserved.