我在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相关的问题(当然是我的实际文件名)。
你能告诉我我做错了什么吗?
答案 0 :(得分:1)
你应该在decodebin和接收器之间放一个视频转换器,同时确保你调用了gst_init(我猜你做了但是不能检查它)。
编辑:这里的实际问题是,一旦在内部构造了内部元素链,decodebin就会暴露其源极垫,这种情况发生在从READY到PAUSED的过渡中。这意味着你需要连接到它的&#34; pad-added&#34;信号,并在您提供的回调中进行连接。我确定谷歌搜索&#34; gstreamer pad-added&#34;将产生有趣的信息。