GStreamer-CRITICAL **: gst_object_ref_sink: assertion 'GST_IS_OBJECT (object)' failed
-
wrote on 6 Oct 2014, 05:43 last edited by
board : imx53(cortex-A8)
os : Linux ccwmx53js 2.6.35.14 #1 Thu May 29 17:42:48 JST 2014 armv7l GNU/LinuxQt-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
———————————————————————
これは、どのような意味のエラーでしょうか?以上、よろしくお願いします。
-
wrote on 5 Nov 2014, 04:41 last edited by
~# player -platform linuxfb
とオプションを追加したところ同じエラーメッセージがでますが、画面が表示されました。
タッチパネルやマウスが動作せず以降の確認はできていません。 -
wrote on 5 Nov 2014, 06:23 last edited by
オプションで、-plugin evdevmouse を追加する事でマウスが有効になりました。
*.mp3 が動作しました。
*.mp4 で、音は出ますが動画が出ない状況です。 -
wrote on 5 Nov 2014, 09:24 last edited by
videosinkを見つけられず動画が出力されないようです。(デコードはしている)
このエラーはそういう意味なのか調べて見ます。
(player:937): GStreamer-CRITICAL **: gst_object_ref_sink: assertion ‘GST_IS_OBJECT (object)’ failed -
wrote on 15 Dec 2014, 05:07 last edited by
調べましたが、原因がわかりません。音は出ますが映像表示しません。
以下、実行時のコンソールの内容です。
~ # /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 ! alsasinkQtアプリ がこのプラグインを見つけられないと思うのですが、
認識させる為に何か必要でしょうか?以上、よろしくお願いします。
-
wrote on 15 Dec 2014, 05:07 last edited by
調べましたが、原因がわかりません。音は出ますが映像表示しません。
以下、実行時のコンソールの内容です。
~ # /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 ! alsasinkQtアプリ がこのプラグインを見つけられないと思うのですが、
認識させる為に何か必要でしょうか?以上、よろしくお願いします。
-
wrote on 16 Dec 2014, 05:34 last edited by
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 を作り直すか、どちらかを試そうと思っております。
以上、よろしくお願いします。
-
wrote on 16 Dec 2014, 05:34 last edited by
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 を作り直すか、どちらかを試そうと思っております。
以上、よろしくお願いします。
-
wrote on 16 Dec 2014, 07:39 last edited by
playbin2 を使用して途中の経路を決定した上で、Qt 内で作成した videosink に繋ぎます。
@qgstreamerplayersession.cpp: m_playbin = gst_element_factory_make("playbin2", NULL);@この辺りは GStreamer 側の問題である可能性が大きいですが、デコーダが出力する画像の形式が Qt の videosink と合わない為に問題が出ることがあります。
videosink 周りは qtmultimedia/src/gsttools にあります。 -
wrote on 16 Dec 2014, 07:39 last edited by
playbin2 を使用して途中の経路を決定した上で、Qt 内で作成した videosink に繋ぎます。
@qgstreamerplayersession.cpp: m_playbin = gst_element_factory_make("playbin2", NULL);@この辺りは GStreamer 側の問題である可能性が大きいですが、デコーダが出力する画像の形式が Qt の videosink と合わない為に問題が出ることがあります。
videosink 周りは qtmultimedia/src/gsttools にあります。 -
wrote on 17 Dec 2014, 00:46 last edited by
①Qt 内で作成した videosink が正常にビルドできているか確認したいのですが、gst-inspect コマンドの実行で確認できますか?sink名を教えて下さい。
②playbin2 を使用して最後(videosink)まで経路を決定させる事は可能ですか?
以上、よろしくお願いします。
-
wrote on 17 Dec 2014, 00:46 last edited by
①Qt 内で作成した videosink が正常にビルドできているか確認したいのですが、gst-inspect コマンドの実行で確認できますか?sink名を教えて下さい。
②playbin2 を使用して最後(videosink)まで経路を決定させる事は可能ですか?
以上、よろしくお願いします。
-
wrote on 17 Dec 2014, 02:43 last edited by
Qt で fakesink に繋げられているようです。
Qt の videosink がビルドできていなかったり、形式が合わない場合、fakesink に繋げられるでしょうか?
形式は、NV12 です。以上、よろしくお願いします。
-
wrote on 17 Dec 2014, 02:43 last edited by
Qt で fakesink に繋げられているようです。
Qt の videosink がビルドできていなかったり、形式が合わない場合、fakesink に繋げられるでしょうか?
形式は、NV12 です。以上、よろしくお願いします。
-
wrote on 22 Dec 2014, 11:15 last edited by
- Qt内のvideosinkはQt Multimediaのプラグイン内で作成されるもので、GStreamerの環境にインストールされるものではありません。そのため gst-inspect 等の Qt Multimedia を使用しないコマンドからは確認できません。
GStreamer内のクラス名は "QVideoSurfaceGstSink" になるはずです。
- 質問の意図を正確に把握しているかは不明ですが、
GStreamerの各プラグインがその情報も含めて正しくインストールされている場合、playbin2は最後までその経路をちゃんと計算できるはずです。
これは通常 gst-launch で playbin2 だけを指定して確認できます。
Qtではplaybin2で計算した後にvideosinkを置き換えています。(入力系も置き合える場合もあり得ます)
この置き換えを行わないようにするには qtmultimedia の変更が必要です。- fakesink について
互いに形式のハンドシェークは行っていますが、それがうまくいかない場合は接続できずに映像が出力できないような場合があり得ます。
エラーメッセージが出たかなどは覚えていませんが GST_DEBUG 環境変数などを用いて確認することは出来たと思います。GStreamer のデバッグ方法を調べてみてください。
Qt 側で対応している形式については qtmultimedia/src/gsttools/qvideosurfacegstsink.cpp の QVideoSurfaceGstSink::get_caps() を見てみてください。
-
wrote on 22 Dec 2014, 11:15 last edited by
- Qt内のvideosinkはQt Multimediaのプラグイン内で作成されるもので、GStreamerの環境にインストールされるものではありません。そのため gst-inspect 等の Qt Multimedia を使用しないコマンドからは確認できません。
GStreamer内のクラス名は "QVideoSurfaceGstSink" になるはずです。
- 質問の意図を正確に把握しているかは不明ですが、
GStreamerの各プラグインがその情報も含めて正しくインストールされている場合、playbin2は最後までその経路をちゃんと計算できるはずです。
これは通常 gst-launch で playbin2 だけを指定して確認できます。
Qtではplaybin2で計算した後にvideosinkを置き換えています。(入力系も置き合える場合もあり得ます)
この置き換えを行わないようにするには qtmultimedia の変更が必要です。- fakesink について
互いに形式のハンドシェークは行っていますが、それがうまくいかない場合は接続できずに映像が出力できないような場合があり得ます。
エラーメッセージが出たかなどは覚えていませんが GST_DEBUG 環境変数などを用いて確認することは出来たと思います。GStreamer のデバッグ方法を調べてみてください。
Qt 側で対応している形式については qtmultimedia/src/gsttools/qvideosurfacegstsink.cpp の QVideoSurfaceGstSink::get_caps() を見てみてください。
-
wrote on 24 Dec 2014, 05:56 last edited by
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()は呼ばれていないようなのですが、
何か呼び出すコマンドのようなものがありますか?以上、よろしくお願いします。
-
wrote on 24 Dec 2014, 05:56 last edited by
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()は呼ばれていないようなのですが、
何か呼び出すコマンドのようなものがありますか?以上、よろしくお願いします。