ruby-gstreamer не отправляет сообщение EOS - PullRequest
0 голосов
/ 12 мая 2010

Мне удалось заставить его воспроизводить звук, но он никогда не получает сообщение 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

Ответы [ 2 ]

2 голосов
/ 19 мая 2010

Я нашел решение. Поделиться со всеми, кто может столкнуться с той же проблемой.

Настоящая проблема заключалась в том, что блок не возвращал true. Он должен вернуть true, чтобы быть под присмотром. Это задокументировано где-то глубоко в документах GStreamer, но не упомянуто в документах ruby-gnome2.

1 голос
/ 19 мая 2010
Gst::Message::Type::EOS

должно быть:

Gst::Message::EOS

То же самое относится и к ОШИБКЕ

...