From: NAKAJIMA T. <nak...@ni...> - 2013-02-10 12:04:25
|
中島です。 (2013年02月10日 12:23), Kouhei Sutou wrote: > 確認させてほしいのですが、gstreamer-giを使ったサンプルは > gstreamer-gi/の下にsampleディレクトリを作って置いた方が > よろしいでしょうか。それとも、元のgstreamer/sampleで > よかったでしょうか。 > gstreamer-gi/の方でおねがいします! > GI関連は全部そっちでやりましょう! 了解しました。ではgstreamer-gi/sampleということで。 >> あと、元のCコードにならって、再生ループ中に飛んでくる >> Gst::Messageを以下のようなコードで捕捉しようとしているのですが、 >> MessageType::ERRORを起こさせる方法がわからず、parse_error部分の >> テストができなくて困っています。 >> どなたかご存知でしたら、教えていただければ助かります。 > 音楽や動画のファイルではなくテキストファイルを渡すと発生する > ようです! やってみたのですが、例外GLib::Errorが発生しているため、Busにattachした ハンドラでメッセージを捕捉する前に、下記のメインループ部loop.runを 飛び出して、例外ハンドラに行ってしまうようです。 # start play back and listed to events playbin.state = Gst::State::PLAYING begin loop.run rescue Interrupt puts "Interrupt" rescue => error puts "Error: #{error.message}" ensure playbin.state = Gst::State::NULL end 実行結果: Error: これはテキストファイルのようです 扱いとしては再生停止なのでこれでもOKとは思いますが、元のGst::Messageが 取れないため、parse_errorからデバッグ情報が取れないのが惜しい気がします。 たとえばGLib::ErrorをGst::Messageに入れたままraiseしないようなオプション とか、 またはGLib::Errorなど他からGst::Messageを取得する方法はないでしょうか? >> when Gst::MessageType::ERROR >> err = nil >> debug = nil >> message.parse_error(err, debug) >> puts "Debugging info: #{(debug) ? debug : 'none'}" >> puts "Error: #{err.message}" > たぶん、こう書くことになるんじゃないかなぁと思います! > > error, debug = message.parse_error > puts "Debugging info: #{debug || 'none'}" > puts "Error: #{error.message}" おお、ご指導ありがとうございます! このへんのしくみを理解できて いないのですが、GIの定義でdirection="out"なパラメータがあったら 複数の場合も含めて、すべて戻り値で返す、と考えておけばいいでしょうか。 (どこかに書いてあったらすみません) |