Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Japanese
  4. GStreamer-CRITICAL **: gst_object_ref_sink: assertion 'GST_IS_OBJECT (object)' failed
Forum Updated to NodeBB v4.3 + New Features

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

Scheduled Pinned Locked Moved Japanese
18 Posts 2 Posters 11.6k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C Offline
    C Offline
    chung.k
    wrote on 16 Dec 2014, 05:34 last edited by
    #8

    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 を作り直すか、どちらかを試そうと思っております。

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

    1 Reply Last reply
    0
    • T Offline
      T Offline
      takumiasaki
      wrote on 16 Dec 2014, 07:39 last edited by
      #9

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

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

      1 Reply Last reply
      0
      • T Offline
        T Offline
        takumiasaki
        wrote on 16 Dec 2014, 07:39 last edited by
        #10

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

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

        1 Reply Last reply
        0
        • C Offline
          C Offline
          chung.k
          wrote on 17 Dec 2014, 00:46 last edited by
          #11

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

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

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

          1 Reply Last reply
          0
          • C Offline
            C Offline
            chung.k
            wrote on 17 Dec 2014, 00:46 last edited by
            #12

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

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

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

            1 Reply Last reply
            0
            • C Offline
              C Offline
              chung.k
              wrote on 17 Dec 2014, 02:43 last edited by
              #13

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

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

              1 Reply Last reply
              0
              • C Offline
                C Offline
                chung.k
                wrote on 17 Dec 2014, 02:43 last edited by
                #14

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

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

                1 Reply Last reply
                0
                • T Offline
                  T Offline
                  takumiasaki
                  wrote on 22 Dec 2014, 11:15 last edited by
                  #15
                  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 Reply Last reply
                  0
                  • T Offline
                    T Offline
                    takumiasaki
                    wrote on 22 Dec 2014, 11:15 last edited by
                    #16
                    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 Reply Last reply
                    0
                    • C Offline
                      C Offline
                      chung.k
                      wrote on 24 Dec 2014, 05:56 last edited by
                      #17

                      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()は呼ばれていないようなのですが、
                      何か呼び出すコマンドのようなものがありますか?

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

                      1 Reply Last reply
                      0
                      • C Offline
                        C Offline
                        chung.k
                        wrote on 24 Dec 2014, 05:56 last edited by
                        #18

                        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()は呼ばれていないようなのですが、
                        何か呼び出すコマンドのようなものがありますか?

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

                        1 Reply Last reply
                        0

                        17/18

                        24 Dec 2014, 05:56

                        • Login

                        • Login or register to search.
                        17 out of 18
                        • First post
                          17/18
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • Users
                        • Groups
                        • Search
                        • Get Qt Extensions
                        • Unsolved