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/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
———————————————————————
これは、どのような意味のエラーでしょうか?以上、よろしくお願いします。
-
調べましたが、原因がわかりません。音は出ますが映像表示しません。
以下、実行時のコンソールの内容です。
~ # /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アプリ がこのプラグインを見つけられないと思うのですが、
認識させる為に何か必要でしょうか?以上、よろしくお願いします。
-
調べましたが、原因がわかりません。音は出ますが映像表示しません。
以下、実行時のコンソールの内容です。
~ # /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アプリ がこのプラグインを見つけられないと思うのですが、
認識させる為に何か必要でしょうか?以上、よろしくお願いします。
-
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は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() を見てみてください。
-
- 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() を見てみてください。
-
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()は呼ばれていないようなのですが、
何か呼び出すコマンドのようなものがありますか?以上、よろしくお願いします。