GStreamer-CRITICAL **: gst_object_ref_sink: assertion 'GST_IS_OBJECT (object)' failed



  • board : imx53(cortex-A8)
    os : Linux ccwmx53js 2.6.35.14 #1 Thu May 29 17:42:48 JST 2014 armv7l GNU/Linux

    Qt-5.3.2 の下記の4つの環境をボード上に構築しました。
    ・qtbase
    ・qtxmlpatterns
    ・qtdeclarative
    ・qtmultimedia
    Qt Creator-3.2.1 でサンプルアプリの player をビルドして実行させましたが、
    下記のエラーが出て止まります。
    ————————————————————————
    (player:937): GStreamer-CRITICAL **: gst_object_ref_sink: assertion 'GST_IS_OBJECT (object)' failed
    This plugin does not support setParent!
    This plugin does not support setParent!
    This plugin does not support setParent!
    This plugin does not support setParent!
    Panning swap enabled
    ———————————————————————
    これは、どのような意味のエラーでしょうか?

    以上、よろしくお願いします。



  • ~# player -platform linuxfb
    とオプションを追加したところ同じエラーメッセージがでますが、画面が表示されました。
    タッチパネルやマウスが動作せず以降の確認はできていません。



  • オプションで、-plugin evdevmouse を追加する事でマウスが有効になりました。
    *.mp3 が動作しました。
    *.mp4 で、音は出ますが動画が出ない状況です。



  • videosinkを見つけられず動画が出力されないようです。(デコードはしている)

    このエラーはそういう意味なのか調べて見ます。
    (player:937): GStreamer-CRITICAL **: gst_object_ref_sink: assertion ‘GST_IS_OBJECT (object)’ failed



  • 調べましたが、原因がわかりません。音は出ますが映像表示しません。
    以下、実行時のコンソールの内容です。


    ~ # /usr/local/Qt-5.3.2/examples/multimediawidgets/player/player
    QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed
    QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open failed

    (player:897): GStreamer-CRITICAL **: gst_object_ref_sink: assertion 'GST_IS_OBJECT (object)' failed
    This plugin does not support setParent!
    This plugin does not support setParent!
    This plugin does not support setParent!
    This plugin does not support setParent!
    [INFO] Product Info: i.MX53
    VPU Version: firmware 1.4.48; libvpu: 5.3.2
    MFW_GST_VPU_DECODER_PLUGIN 2.0.3 build on Dec 12 2014 15:46:44.
    BLN_MAD-MMCODECS_AACD_ARM_03.06.00 buildUnhandled fault: external abort on non-linefetch (0x1018) at 0x31f0e054
    on May 9 2011 17:11:11.
    MFW_GST_AAC_PLUGIN 2.0.3 build on Dec 12 2014 15:46:55.

    VPU_DEC: State: Ready to Null
    [--->FINALIZE vpu_dec


    gst-launch でパイプラインを組んで動作させた場合、下記のプラグインが表示されて正常に動作します。
    MFW_GST_V4LSINK_PLUGIN

    ~ # gst-launch filesrc location=720p_30sec.mp4 ! qtdemux name=demuxer demuxer. !
    queue ! mfw_vpudecoder ! mfw_v4lsink demuxer. ! queue ! mfw_aacdecoder ! alsasink

    Qtアプリ がこのプラグインを見つけられないと思うのですが、
    認識させる為に何か必要でしょうか?

    以上、よろしくお願いします。



  • 調べましたが、原因がわかりません。音は出ますが映像表示しません。
    以下、実行時のコンソールの内容です。


    ~ # /usr/local/Qt-5.3.2/examples/multimediawidgets/player/player
    QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed
    QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open failed

    (player:897): GStreamer-CRITICAL **: gst_object_ref_sink: assertion 'GST_IS_OBJECT (object)' failed
    This plugin does not support setParent!
    This plugin does not support setParent!
    This plugin does not support setParent!
    This plugin does not support setParent!
    [INFO] Product Info: i.MX53
    VPU Version: firmware 1.4.48; libvpu: 5.3.2
    MFW_GST_VPU_DECODER_PLUGIN 2.0.3 build on Dec 12 2014 15:46:44.
    BLN_MAD-MMCODECS_AACD_ARM_03.06.00 buildUnhandled fault: external abort on non-linefetch (0x1018) at 0x31f0e054
    on May 9 2011 17:11:11.
    MFW_GST_AAC_PLUGIN 2.0.3 build on Dec 12 2014 15:46:55.

    VPU_DEC: State: Ready to Null
    [--->FINALIZE vpu_dec


    gst-launch でパイプラインを組んで動作させた場合、下記のプラグインが表示されて正常に動作します。
    MFW_GST_V4LSINK_PLUGIN

    ~ # gst-launch filesrc location=720p_30sec.mp4 ! qtdemux name=demuxer demuxer. !
    queue ! mfw_vpudecoder ! mfw_v4lsink demuxer. ! queue ! mfw_aacdecoder ! alsasink

    Qtアプリ がこのプラグインを見つけられないと思うのですが、
    認識させる為に何か必要でしょうか?

    以上、よろしくお願いします。



  • mediaplayer について調べて見たのですが、
    mediaplayer は、最終的に Gstreamer の playbin を呼び出しているのでしょうか?

    現状、下記のようにパイプラインを組んで実行させた場合、正常に動作するのですが、
    $ gst-launch filesrc location=xxx.mp4 ! qtdemux name=demuxer demuxer. ! queue ! mfw_vpudecoder ! autovideosink demuxer. ! queue ! mfw_aacdecoder ! autoaudiosink

    $ gst-launch playbin uri="file:xxx.mp4" を実行させた場合、パフォーマンスが悪い状況です。(sinkは選択されている)
    videowidget や player と少し状況は違いますが、このあたりに何か原因がないかと考えております。

    playbin を呼び出しているのであれば、ソースを確認したいのですが、どのソースになるでしょうか? qgstreamerplayersession.cpp でしょうか?

    ソース確認後、ソースを変更するか、playbin を作り直すか、どちらかを試そうと思っております。

    以上、よろしくお願いします。



  • mediaplayer について調べて見たのですが、
    mediaplayer は、最終的に Gstreamer の playbin を呼び出しているのでしょうか?

    現状、下記のようにパイプラインを組んで実行させた場合、正常に動作するのですが、
    $ gst-launch filesrc location=xxx.mp4 ! qtdemux name=demuxer demuxer. ! queue ! mfw_vpudecoder ! autovideosink demuxer. ! queue ! mfw_aacdecoder ! autoaudiosink

    $ gst-launch playbin uri="file:xxx.mp4" を実行させた場合、パフォーマンスが悪い状況です。(sinkは選択されている)
    videowidget や player と少し状況は違いますが、このあたりに何か原因がないかと考えております。

    playbin を呼び出しているのであれば、ソースを確認したいのですが、どのソースになるでしょうか? qgstreamerplayersession.cpp でしょうか?

    ソース確認後、ソースを変更するか、playbin を作り直すか、どちらかを試そうと思っております。

    以上、よろしくお願いします。



  • playbin2 を使用して途中の経路を決定した上で、Qt 内で作成した videosink に繋ぎます。
    @qgstreamerplayersession.cpp: m_playbin = gst_element_factory_make("playbin2", NULL);@

    この辺りは GStreamer 側の問題である可能性が大きいですが、デコーダが出力する画像の形式が Qt の videosink と合わない為に問題が出ることがあります。
    videosink 周りは qtmultimedia/src/gsttools にあります。



  • playbin2 を使用して途中の経路を決定した上で、Qt 内で作成した videosink に繋ぎます。
    @qgstreamerplayersession.cpp: m_playbin = gst_element_factory_make("playbin2", NULL);@

    この辺りは GStreamer 側の問題である可能性が大きいですが、デコーダが出力する画像の形式が Qt の videosink と合わない為に問題が出ることがあります。
    videosink 周りは qtmultimedia/src/gsttools にあります。



  • ①Qt 内で作成した videosink が正常にビルドできているか確認したいのですが、gst-inspect コマンドの実行で確認できますか?sink名を教えて下さい。

    ②playbin2 を使用して最後(videosink)まで経路を決定させる事は可能ですか?

    以上、よろしくお願いします。



  • ①Qt 内で作成した videosink が正常にビルドできているか確認したいのですが、gst-inspect コマンドの実行で確認できますか?sink名を教えて下さい。

    ②playbin2 を使用して最後(videosink)まで経路を決定させる事は可能ですか?

    以上、よろしくお願いします。



  • Qt で fakesink に繋げられているようです。
    Qt の videosink がビルドできていなかったり、形式が合わない場合、fakesink に繋げられるでしょうか?
    形式は、NV12 です。

    以上、よろしくお願いします。



  • Qt で fakesink に繋げられているようです。
    Qt の videosink がビルドできていなかったり、形式が合わない場合、fakesink に繋げられるでしょうか?
    形式は、NV12 です。

    以上、よろしくお願いします。



    1. Qt内のvideosinkはQt Multimediaのプラグイン内で作成されるもので、GStreamerの環境にインストールされるものではありません。そのため gst-inspect 等の Qt Multimedia を使用しないコマンドからは確認できません。

    GStreamer内のクラス名は "QVideoSurfaceGstSink" になるはずです。

    1. 質問の意図を正確に把握しているかは不明ですが、
      GStreamerの各プラグインがその情報も含めて正しくインストールされている場合、playbin2は最後までその経路をちゃんと計算できるはずです。
      これは通常 gst-launch で playbin2 だけを指定して確認できます。

    Qtではplaybin2で計算した後にvideosinkを置き換えています。(入力系も置き合える場合もあり得ます)
    この置き換えを行わないようにするには qtmultimedia の変更が必要です。

    1. fakesink について
      互いに形式のハンドシェークは行っていますが、それがうまくいかない場合は接続できずに映像が出力できないような場合があり得ます。
      エラーメッセージが出たかなどは覚えていませんが GST_DEBUG 環境変数などを用いて確認することは出来たと思います。GStreamer のデバッグ方法を調べてみてください。

    Qt 側で対応している形式については qtmultimedia/src/gsttools/qvideosurfacegstsink.cpp の QVideoSurfaceGstSink::get_caps() を見てみてください。



    1. Qt内のvideosinkはQt Multimediaのプラグイン内で作成されるもので、GStreamerの環境にインストールされるものではありません。そのため gst-inspect 等の Qt Multimedia を使用しないコマンドからは確認できません。

    GStreamer内のクラス名は "QVideoSurfaceGstSink" になるはずです。

    1. 質問の意図を正確に把握しているかは不明ですが、
      GStreamerの各プラグインがその情報も含めて正しくインストールされている場合、playbin2は最後までその経路をちゃんと計算できるはずです。
      これは通常 gst-launch で playbin2 だけを指定して確認できます。

    Qtではplaybin2で計算した後にvideosinkを置き換えています。(入力系も置き合える場合もあり得ます)
    この置き換えを行わないようにするには qtmultimedia の変更が必要です。

    1. fakesink について
      互いに形式のハンドシェークは行っていますが、それがうまくいかない場合は接続できずに映像が出力できないような場合があり得ます。
      エラーメッセージが出たかなどは覚えていませんが GST_DEBUG 環境変数などを用いて確認することは出来たと思います。GStreamer のデバッグ方法を調べてみてください。

    Qt 側で対応している形式については qtmultimedia/src/gsttools/qvideosurfacegstsink.cpp の QVideoSurfaceGstSink::get_caps() を見てみてください。



  • Qtではplaybin2で計算した後にvideosinkを置き換えています。

    正しく置換えられず?fakesink が繋がれているようなのですが、
    置換え処理は、QGstreamerPlayerSession::setVideoRenderer でしょうか?

    サンプルのvideowidget起動時の出力です。再生後もfakesinkのままです。

    ~ # /usr/local/Qt-5.3.2/examples/multimediawidgets/videowidget/videowidget
    QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed
    QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open failed
    void QGstreamerPlayerSession::setVideoRenderer(QObject*)

    (videowidget:985): GStreamer-CRITICAL **: gst_object_ref_sink: assertion 'GST_IS_OBJECT (object)' failed
    Set video output: QGstreamerVideoWidgetControl(0xd2668)
    Current sink: fakesink0 0xba568 pending: 0x0 new sink: fakesink0 0xba568
    Video sink has not changed, skip video output reconfiguration
    This plugin does not support setParent!
    This plugin does not support setParent!
     :

    Qt sink側で対応している形式はこのテーブルでしょうか?

    static const YuvFormat qt_yuvColorLookup[] =
    {
    { QVideoFrame::Format_YUV420P, GST_MAKE_FOURCC('I','4','2','0'), 8 },
    { QVideoFrame::Format_YV12, GST_MAKE_FOURCC('Y','V','1','2'), 8 },
    { QVideoFrame::Format_UYVY, GST_MAKE_FOURCC('U','Y','V','Y'), 16 },
    { QVideoFrame::Format_YUYV, GST_MAKE_FOURCC('Y','U','Y','2'), 16 },
    { QVideoFrame::Format_NV12, GST_MAKE_FOURCC('N','V','1','2'), 8 },
    { QVideoFrame::Format_NV21, GST_MAKE_FOURCC('N','V','2','1'), 8 },
    { QVideoFrame::Format_AYUV444, GST_MAKE_FOURCC('A','Y','U','V'), 32 }
    };

    videowidget を起動/再生させても、get_caps()は呼ばれていないようなのですが、
    何か呼び出すコマンドのようなものがありますか?

    以上、よろしくお願いします。



  • Qtではplaybin2で計算した後にvideosinkを置き換えています。

    正しく置換えられず?fakesink が繋がれているようなのですが、
    置換え処理は、QGstreamerPlayerSession::setVideoRenderer でしょうか?

    サンプルのvideowidget起動時の出力です。再生後もfakesinkのままです。

    ~ # /usr/local/Qt-5.3.2/examples/multimediawidgets/videowidget/videowidget
    QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed
    QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open failed
    void QGstreamerPlayerSession::setVideoRenderer(QObject*)

    (videowidget:985): GStreamer-CRITICAL **: gst_object_ref_sink: assertion 'GST_IS_OBJECT (object)' failed
    Set video output: QGstreamerVideoWidgetControl(0xd2668)
    Current sink: fakesink0 0xba568 pending: 0x0 new sink: fakesink0 0xba568
    Video sink has not changed, skip video output reconfiguration
    This plugin does not support setParent!
    This plugin does not support setParent!
     :

    Qt sink側で対応している形式はこのテーブルでしょうか?

    static const YuvFormat qt_yuvColorLookup[] =
    {
    { QVideoFrame::Format_YUV420P, GST_MAKE_FOURCC('I','4','2','0'), 8 },
    { QVideoFrame::Format_YV12, GST_MAKE_FOURCC('Y','V','1','2'), 8 },
    { QVideoFrame::Format_UYVY, GST_MAKE_FOURCC('U','Y','V','Y'), 16 },
    { QVideoFrame::Format_YUYV, GST_MAKE_FOURCC('Y','U','Y','2'), 16 },
    { QVideoFrame::Format_NV12, GST_MAKE_FOURCC('N','V','1','2'), 8 },
    { QVideoFrame::Format_NV21, GST_MAKE_FOURCC('N','V','2','1'), 8 },
    { QVideoFrame::Format_AYUV444, GST_MAKE_FOURCC('A','Y','U','V'), 32 }
    };

    videowidget を起動/再生させても、get_caps()は呼ばれていないようなのですが、
    何か呼び出すコマンドのようなものがありますか?

    以上、よろしくお願いします。


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.