GStreamer-CRITICAL **: gst_object_ref_sink: assertion 'GST_IS_OBJECT (object)' failed
-
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()は呼ばれていないようなのですが、
何か呼び出すコマンドのようなものがありますか?以上、よろしくお願いします。
18/18