[Solved] Qt5 media service について
-
glib関連のパスが通ってなかったようです。
必要なファイルをrootfsにおいてqmake したところ
gstreamer... yes になりました。Info: creating cache file /home/chung/qt-everywhere-opensource-src-5.3.1/qtmultimedia/.qmake.cache
Checking for openal... no
Checking for alsa... yes
Checking for pulseaudio... no
Checking for gstreamer... yes
Checking for gstreamer_photography... no
Checking for gstreamer_encodingprofiles... no
Checking for gstreamer_appsrc... yes
Checking for resourcepolicy... no
Checking for gpu_vivante... noこれでビルドしなおしてみます。
ありがとうございました。 -
gstreamer関連は全て yes になりました。
Info: creating cache file /home/chung/qt-everywhere-opensource-src-5.3.1/qtmultimedia/.qmake.cache
Checking for openal... no
Checking for alsa... yes
Checking for pulseaudio... no
Checking for gstreamer... yes
Checking for gstreamer_photography... yes
Checking for gstreamer_encodingprofiles... yes
Checking for gstreamer_appsrc... yes
Checking for resourcepolicy... no
Checking for gpu_vivante... noビルドすると多くのエラーがでますが、これはライブラリが無いというエラーでしょうか?
qtmultimedia$ rm .qmake.cache
qtmultimedia$ ../qtbase/bin/qmake -r
qtmultimedia$ make
:
rm -f libgstaudiodecoder.so
/usr/local/DigiEL-5.9/x-tools/arm-cortex_a8-linux-gnueabi/bin/arm-cortex_a8-linux-gnueabi-g++ -Wl,-rpath-link,/home/chung/workspace/rootfs/build/rootfs/usr/lib -Wl,--no-undefined -Wl,-O1 -Wl,-rpath,/usr/local/QtEmbedded-5.3.1/lib -Wl,-rpath-link,/home/chung/qt-everywhere-opensource-src-5.3.1/qtbase/lib -shared -o libgstaudiodecoder.so .obj/qgstreameraudiodecodercontrol.o .obj/qgstreameraudiodecoderservice.o .obj/qgstreameraudiodecodersession.o .obj/qgstreameraudiodecoderserviceplugin.o .obj/moc_qgstreameraudiodecodercontrol.o .obj/moc_qgstreameraudiodecoderservice.o .obj/moc_qgstreameraudiodecodersession.o .obj/moc_qgstreameraudiodecoderserviceplugin.o -L/home/chung/workspace/rootfs/build/rootfs/usr/lib -lqgsttools_p -lgstapp-0.10 -L/home/chung/qt-everywhere-opensource-src-5.3.1/qtmultimedia/lib -lQt5MultimediaWidgets -L/home/chung/qt-everywhere-opensource-src-5.3.1/qtbase/lib -lQt5Multimedia -lQt5Widgets -lQt5Network -lQt5Gui -lQt5Core -lGLESv2 -lEGL -lpthread
.obj/qgstreameraudiodecodersession.o: In functionQGstreamerAudioDecoderSession::updateDuration()': qgstreameraudiodecodersession.cpp:(.text+0xc8): undefined reference to
gst_element_query_duration'
.obj/qgstreameraudiodecodersession.o: In functionQGstreamerAudioDecoderSession::removeAppSink()': qgstreameraudiodecodersession.cpp:(.text+0x1c0): undefined reference to
gst_element_get_type'
qgstreameraudiodecodersession.cpp:(.text+0x1cc): undefined reference tog_type_check_instance_cast' : qgstreameraudiodecoderserviceplugin.cpp:(.text+0xe54): undefined reference to
gst_type_find_factory_get_type'
collect2: ld returned 1 exit status
make[4]: *** [../../../../plugins/mediaservice/libgstaudiodecoder.so] エラー 1
make[4]: ディレクトリ/home/chung/qt-everywhere-opensource-src-5.3.1/qtmultimedia/src/plugins/gstreamer/audiodecoder' から出ます make[3]: *** [sub-audiodecoder-make_first] エラー 2 make[3]: ディレクトリ
/home/chung/qt-everywhere-opensource-src-5.3.1/qtmultimedia/src/plugins/gstreamer' から出ます
make[2]: *** [sub-gstreamer-make_first] エラー 2
make[2]: ディレクトリ/home/chung/qt-everywhere-opensource-src-5.3.1/qtmultimedia/src/plugins' から出ます make[1]: *** [sub-plugins-make_first] エラー 2 make[1]: ディレクトリ
/home/chung/qt-everywhere-opensource-src-5.3.1/qtmultimedia/src' から出ます
make: *** [sub-src-make_first] エラー 2 -
リンクするライブラリが少ないようです。
デスクトップ用のビルド時のログですが、gstreamer関連で他にも多くのライブラリをリンクしています。
@g++ -Wl,--no-undefined -Wl,-O1 -Wl,-rpath,/opt/qt/5.3/lib -Wl,-rpath-link,/home/asaki/qt-project/build/qt5-build-5.3/qtbase/lib -shared -o libgstaudiodecoder.so .obj/qgstreameraudiodecodercontrol.o .obj/qgstreameraudiodecoderservice.o .obj/qgstreameraudiodecodersession.o .obj/qgstreameraudiodecoderserviceplugin.o .obj/moc_qgstreameraudiodecodercontrol.o .obj/moc_qgstreameraudiodecoderservice.o .obj/moc_qgstreameraudiodecodersession.o .obj/moc_qgstreameraudiodecoderserviceplugin.o -lqgsttools_p -lgstaudio-0.10 -lgstinterfaces-0.10 -lgstvideo-0.10 -lgstpbutils-0.10 -pthread -lgstapp-0.10 -lgstbase-0.10 -lgstreamer-0.10 -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lxml2 -lglib-2.0 -L/home/asaki/qt-project/build/qt5-build-5.3/qtmultimedia/lib -lQt5MultimediaWidgets -L/home/asaki/qt-project/build/qt5-build-5.3/qtbase/lib -lQt5Multimedia -lQt5Widgets -lQt5Network -lQt5Gui -lQt5Core -lGL -lpthread@
qmake 時にこれらのライブラリが決定されると思いますので、一度 qtmultimedia 以下の Makefile をすべて削除して qmake からやり直してみてはどうでしょうか。
-
ありがとうございます。
qmake 時にこれらのライブラリが決定されると思いますので、一度 qtmultimedia 以下の Makefile をすべて削除して qmake からやり直してみてはどうでしょうか。
やってみましたが、下記のライブラリーは追加されませんでした。
-lqgsttools_p -lgstaudio-0.10 -lgstinterfaces-0.10 -lgstvideo-0.10 -lgstpbutils-0.10 -pthread -lgstapp-0.10 -lgstbase-0.10 -lgstreamer-0.10 -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lxml2 -lglib-2.0これらは、環境が整っていればqmake時にMakefileに自動生成されるものでしょうか?
それとも手動でオプションとして追加するのもでしょうか?自動生成されなかったので、手動で追加したところ
下記の3つは、エラーにならずビルドできました。
audiodecoder mediacapture mediaplayer最後の camerabin で、"gst_date_time_new_local_time"でエラーになりました。
/usr/local/DigiEL-5.9/x-tools/arm-cortex_a8-linux-gnueabi/bin/arm-cortex_a8-linux-gnueabi-g++ -c -pipe -mfloat-abi=softfp -O2 -O2 -march=armv7-a -mfpu=neon -DLINUX=1 -DEGL_API_FB=1 -Wno-psabi -fvisibility=hidden -fvisibility-inlines-hidden -std=c++0x -fno-exceptions -Wall -W -D_REENTRANT -fPIC -DQT_NO_MTDEV -DQT_NO_LIBUDEV -DHAVE_WIDGETS -DHAVE_GST_APPSRC -DHAVE_GST_PHOTOGRAPHY -DGST_USE_UNSTABLE_API -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_PLUGIN -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_WIDGETS_LIB -DQT_NETWORK_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/home/chung/qt-everywhere-opensource-src-5.3.1/qtbase/mkspecs/devices/linux-imx53qsb-g++ -I. -I. -I/src/multimedia -Icamerabin -I../../../../include/QtMultimediaWidgets/5.3.1 -I../../../../include/QtMultimediaWidgets/5.3.1/QtMultimediaWidgets -I../../../../include -I../../../../include/QtMultimediaWidgets -I../../../../include/QtMultimedia/5.3.1 -I../../../../include/QtMultimedia/5.3.1/QtMultimedia -I../../../../include/QtMultimedia -I/home/chung/qt-everywhere-opensource-src-5.3.1/qtbase/include -I/home/chung/qt-everywhere-opensource-src-5.3.1/qtbase/include/QtWidgets -I/home/chung/qt-everywhere-opensource-src-5.3.1/qtbase/include/QtCore/5.3.1 -I/home/chung/qt-everywhere-opensource-src-5.3.1/qtbase/include/QtCore/5.3.1/QtCore -I/home/chung/qt-everywhere-opensource-src-5.3.1/qtbase/include/QtNetwork -I/home/chung/qt-everywhere-opensource-src-5.3.1/qtbase/include/QtGui -I/home/chung/qt-everywhere-opensource-src-5.3.1/qtbase/include/QtCore -I.moc -I/home/chung/workspace/rootfs/build/rootfs/usr/include -o .obj/camerabinsession.o camerabinsession.cpp
camerabinsession.cpp: In member function 'void CameraBinSession::setMetaData(const QMap<QByteArray, QVariant>&)':
camerabinsession.cpp:802: error: 'gst_date_time_new_local_time' was not declared in this scope
make[4]: *** [.obj/camerabinsession.o] エラー 1
make[4]: ディレクトリ/home/chung/qt-everywhere-opensource-src-5.3.1/qtmultimedia/src/plugins/gstreamer/camerabin' から出ます make[3]: *** [sub-camerabin-make_first] エラー 2 make[3]: ディレクトリ
/home/chung/qt-everywhere-opensource-src-5.3.1/qtmultimedia/src/plugins/gstreamer' から出ます
make[2]: *** [sub-gstreamer-make_first] エラー 2
make[2]: ディレクトリ/home/chung/qt-everywhere-opensource-src-5.3.1/qtmultimedia/src/plugins' から出ます make[1]: *** [sub-plugins-make_first] エラー 2 make[1]: ディレクトリ
/home/chung/qt-everywhere-opensource-src-5.3.1/qtmultimedia/src' から出ます
make: *** [sub-src-make_first] エラー 2調べたところ、gstreamer.ffi に含まれているようです。
このgstreamer.ffi はどのように指定すればよいでしょうか?よろしくお願いします。
-
解決したようなので、こちらだけ。
これらは、環境が整っていればqmake時にMakefileに自動生成されるものでしょうか?
それとも手動でオプションとして追加するのもでしょうか?環境によります。pkg-configを使ってビルドする場合にはその情報を元に自動的に追加されるはずです。
そうでは無い場合は手動で追加が必要なようです。手動で追加する場合、qtmultimedia/src/plugins/gstreamer/common.pri を編集して LIBS に追加するのが良さそうです。
ps. 解決したと思われるやりとりは Subject を "[Solved]" で始まるように編集してもらえるとどれに返信が必要かが分かりやすいので助かります。
-
ありがとうございました。
~/qtmultimedia$ env PKG_CONFIG_PATH=/usr/local/DigiEL-5.9/x-tools/arm-cortex_a8-linux-gnueabi/arm-cortex_a8-linux-gnueabi/sysroot/usr/lib/pkgconfig ../qtbase/bin/qmake -r
qmake 時に、PKG_CONFIG_PATH を指定する事で自動的に追加されました。
PKG_CONFIG_PATH を指定するタイミングですが、
./configure のオプションの-pkg-config と違いがありますか?また、一般的には、export PKG_CONFIG_PATH=・・・ で環境変数を設定しておくものでしょうか?
よろしくお願いします。
-
configureで-pkg-configを指定する場合、クロスコンパイルではsysrootの指定などを確認した上でpkg-configが有効になります。適切に構成されたsysrootの場合は問題はありませんが、自分でビルドしたライブラリなどがあるとsysroot内のパスでは無く、ホストの絶対パスで .pc ファイルが生成されていたりして、うまく動かないこともあります。
クロスコンパイルでpkg-configを使用する場合、うまく設定しないとホストの環境とターゲットの環境が混ざってしまうため注意が必要です。
通常クロスコンパイルでは PKG_CONFIG_PATH 以外に PKG_CONFIG_LIBDIR や PKG_CONFIG_SYSROOT_DIR を組み合わせて使うと思います。sysrootの作り方なども含めて総合的に検討するべきことなので、pkg-configを使わないケースも含めていろいろな考え方があります。