GStreamer管道在Vala崩溃

时间:2014-11-25 16:57:35

标签: video gstreamer vala

我在Vala的应用程序中使用GStreamer来播放.mp4视频。我正在尝试从教程中创建管道:filesrc - > decodebin - > pulseink,但我的应用程序总是崩溃。这是我的代码:

this.pipeline = new Pipeline ("mypipeline");
this.src = ElementFactory.make ("filesrc", "video");
src.set("location", downloadFileName);
this.decode = ElementFactory.make ("decodebin", "decode");
this.sink = ElementFactory.make ("autoaudiosink", "sink");
this.pipeline.add_many (this.src, this.decode,  this.sink);

if (this.src == null)
    error("Gstreamer element init error 1");
if (this.decode == null)
    error("Gstreamer element init error 2");
if (this.sink == null)
    error("Gstreamer element init error 3");

if (!this.src.link (this.decode))
    error("GStreamer linking problems.");
if (!this.decode.link (this.sink))
    error("GStreamer linking problems 2.");

this.pipeline.set_state (State.PLAYING);

我的应用程序总是与" GStreamer链接问题2崩溃。"

gst-launch-1.0 filesrc location=<filename> ! decodebin ! pulsesink

工作正常,所以我认为它与Vala相关的问题(当然是我的实际文件名)。

你能告诉我我做错了什么吗?

1 个答案:

答案 0 :(得分:1)

你应该在decodebin和接收器之间放一个视频转换器,同时确保你调用了gst_init(我猜你做了但是不能检查它)。

编辑:这里的实际问题是,一旦在内部构造了内部元素链,decodebin就会暴露其源极垫,这种情况发生在从READY到PAUSED的过渡中。这意味着你需要连接到它的&#34; pad-added&#34;信号,并在您提供的回调中进行连接。我确定谷歌搜索&#34; gstreamer pad-added&#34;将产生有趣的信息。