如何使用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 源插件的输出速率

如何将 gstreamer 1.0 视频元素添加到 qt5 应用程序

如何通过动态链接在 GStreamer 合成器中正确播放视频?

如何使用 Gstreamer 通过 RTMP 流式传输?

如何通过gstreamer将pcap转换为带有视频和音频的avi文件?