Gstreamer 瓦拉·格斯特雷默·布斯芬克

Gstreamer 瓦拉·格斯特雷默·布斯芬克,gstreamer,vala,Gstreamer,Vala,我正试图将这段代码重写为Vala: 我被困在这条线上: watch_id = gst_bus_add_watch (bus, message_handler, NULL); 我的vala等价物: var watch_id = bus.add_watch (Priority.DEFAULT, message_handler); 我不知道如何格式化BusFunc和它的假定参数 到目前为止的完整代码: using Gst; bool Gst.BusFunc message_hand

我正试图将这段代码重写为Vala:

我被困在这条线上:

 watch_id = gst_bus_add_watch (bus, message_handler, NULL);
我的vala等价物:

    var watch_id = bus.add_watch (Priority.DEFAULT, message_handler);
我不知道如何格式化BusFunc和它的假定参数

到目前为止的完整代码:

using Gst;

bool Gst.BusFunc message_handler ()
{
  return false;
}

void main (string[] args) {
// Initializing GStreamer
Gst.init (ref args);

var caps = Caps.from_string("audio/x-raw,channels=2");

// Creating pipeline and elements
var pipeline = new Pipeline ("my_pipeline");
var bin = new Bin ("my_bin");
var bus = new Bus ();

var src = ElementFactory.make ("autoaudiosrc", "my_src");
var sink = ElementFactory.make ("autoaudiosink", "my_sink");

var convert = ElementFactory.make ("audioconvert", "my_convert");
var level = ElementFactory.make ("level", "my_level");
var fakesink = ElementFactory.make ("fakesink", "my_fakesink");

// Adding elements to pipeline
//pipeline.add_many (src, sink);

bin.add_many (pipeline, src, convert, level, fakesink);

src.link(convert);
convert.link_filtered (level, caps);
level.link(fakesink);

level.set ("post-messages", true);
fakesink.set ("sync", true);

bus = pipeline.get_bus ();

var watch_id = bus.add_watch (Priority.DEFAULT, message_handler);

// Linking source to sink
src.link (sink);


// Set pipeline state to PLAYING
pipeline.set_state (State.PLAYING);

提前谢谢

你就快到了。委托标识函数签名:其参数类型和返回类型。该类型具有签名:
公共委托bool BusFunc(总线,消息)
,因此您的处理程序类似于:

bool message\u处理程序(总线我的总线,消息我的消息)
{
打印(@“消息类型:$(my_Message.type.get_name())\n”);
返回true;
}
在本例中,它返回
true
,以保留处理程序

这个例子没有经过测试,但应该给你一个正确的想法来继续前进