0

我设法让它播放声音,但它从来没有收到 EOS 消息。因此脚本永远不会退出。

require 'gst'

main_loop = GLib::MainLoop.new

pipeline = Gst::Pipeline.new "audio-player"
source   = Gst::ElementFactory.make "filesrc",      "file-source"
source.location = "/usr/share/sounds/gnome/default/alerts/bark.ogg"
decoder  = Gst::ElementFactory.make "decodebin",    "decoder"
conv     = Gst::ElementFactory.make "audioconvert", "converter"
sink     = Gst::ElementFactory.make "alsasink",     "output"

pipeline.add source, decoder, conv, sink
source >> decoder
conv >> sink

decoder.signal_connect "pad-added" do |element, pad, data|
  pad >> conv['sink']
end

pipeline.bus.add_watch do |bus, message|
  puts "Message: #{message.inspect}"
  case message.type
  when Gst::Message::Type::ERROR
    puts message.structure["debug"]
    main_loop.quit
  when Gst::Message::Type::EOS
    puts 'End of stream'
    main_loop.quit
  end
end

pipeline.play

begin
  puts 'Running main loop'
  main_loop.run
ensure
  puts 'Shutting down main loop'
  pipeline.stop
end
4

2 回答 2

2

我找到了解决方案。与可能遇到相同问题的每个人分享。

真正的问题是该块没有返回true。它必须返回true以保持监视。这在 GStreamer 文档的深处有记录,但在 ruby​​-gnome2 文档中没有提到。

于 2010-05-19T10:44:22.727 回答
1
Gst::Message::Type::EOS

应该:

Gst::Message::EOS

错误也是如此

于 2010-05-19T00:04:09.633 回答