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

ERROR も同様

于 2010-05-19T00:04:09.633 に答える