Stuttering audio that hangs: QSoundEffect and QMediaPlayer
-
Hi
For a long time now I've been struggling with getting an application to run smoothly on my RPi3. The issue is when playing audio. The application uses QMediaPlayer to stream mp3-files, while at the same time playing wav-files with QSoundEffect when certain buttons are pressed, events happen etc.
The QSoundEffect sounds stutters a lot, sometimes halting all audio playback (even the concurrently streaming mp3) until I trigger another QSoundEffect, after which the "queued" sounds all come "stumbling" at once and the mp3 resumes, albeit usually with a lot of stuttering.
If I try to run the application without pulseaudio running, I get the following error:
xcb_connection_has_error() returned true PulseAudioService: pa_context_connect() failed xcb_connection_has_error() returned true PulseAudioService: pa_context_connect() failed Assertion 'pthread_mutex_unlock(&m->mutex) == 0' failed at pulsecore/mutex-posix.c:110, function pa_mutex_unlock(). Aborting.
However, if I also don't use QSoundEffect, the application runs perfectly without pulseaudio. So I assume QSoundEffect is dependant on pulseaudio, while QMediaPlayer is not.
With pulsaudio running, even if I don't use QSoundEffect, the mp3 playback still has a tendency to stutter, especially when I toggle quickly to the next/previous track (I use QMediaPlaylist together with QMediaPlayer). Interestingly, however, without pulseaudio running, the mp3-streaming with QMediaPlayer is perfectly smooth, with less delay and no stuttering.
This is on a Raspberry Pi 3 with Qt 5.8 (both native build and cross-compiled on Ubuntu).
I initially tried it on Qt 5.7, experiencing the same issues, but I was hoping Qt 5.8, with its transfer from Gstreamer0.10 to Gstreamer1.0 as a backend, would perform better. Alas, the same issue remains.The application audio works perfectly with Qt 5.7 on Windows 8.1 and with Qt 5.8 on Unbuntu 16.04.
Any help or tips would be greatly appreciated!
-
If of any interest, this is the config.summary from cross-compiling Qt 5.8 for the RPi3:
Building on: linux-g++ (x86_64, CPU features: mmx sse sse2) Building for: devices/linux-rpi3-g++ (arm, CPU features: neon) Configuration: cross_compile compile_examples enable_new_dtags largefile neon precompile_header shared rpath accessibility release c++11 concurrent dbus mremap reduce_exports stl Build options: Mode ................................... release Building shared libraries .............. yes Using C++ standard ..................... C++11 Using gold linker ...................... no Using new DTAGS ........................ yes Using precompiled headers .............. yes Using LTCG ............................. no Target compiler supports: NEON ................................. yes Build parts ............................ libs Qt modules and options: Qt Concurrent .......................... yes Qt D-Bus ............................... yes Qt D-Bus directly linked to libdbus .... yes Qt Gui ................................. yes Qt Network ............................. yes Qt Sql ................................. yes Qt Testlib ............................. yes Qt Widgets ............................. yes Qt Xml ................................. yes Support enabled for: Accessibility .......................... yes Using pkg-config ....................... yes QML debugging .......................... yes udev ................................... yes Using system zlib ...................... yes Qt Core: DoubleConversion ....................... yes Using system DoubleConversion ........ no GLib ................................... yes iconv .................................. yes ICU .................................... no Logging backends: journald ............................. no syslog ............................... no slog2 ................................ no Using system PCRE ...................... no Qt Network: getaddrinfo() .......................... yes getifaddrs() ........................... yes IPv6 ifname ............................ yes libproxy ............................... no OpenSSL ................................ yes Qt directly linked to OpenSSL ........ no SCTP ................................... no Use system proxies ..................... yes Qt Sql: DB2 (IBM) .............................. no InterBase .............................. no MySql .................................. no OCI (Oracle) ........................... no ODBC ................................... yes PostgreSQL ............................. yes SQLite2 ................................ yes SQLite ................................. yes Using system provided SQLite ......... no TDS (Sybase) ........................... yes Qt Gui: FreeType ............................... yes Using system FreeType ................ yes HarfBuzz ............................... yes Using system HarfBuzz ................ no Fontconfig ............................. yes Image formats: GIF .................................. yes ICO .................................. yes JPEG ................................. yes Using system libjpeg ............... yes PNG .................................. yes Using system libpng ................ yes OpenGL: EGL .................................. yes Desktop OpenGL ....................... no OpenGL ES 2.0 ........................ yes OpenGL ES 3.0 ........................ no OpenGL ES 3.1 ........................ no Session Management ..................... yes Features used by QPA backends: evdev .................................. yes libinput ............................... yes mtdev .................................. yes tslib .................................. yes xkbcommon-evdev ........................ yes QPA backends: DirectFB ............................... no EGLFS .................................. yes EGLFS details: EGLFS i.Mx6 .......................... no EGLFS i.Mx6 Wayland .................. no EGLFS EGLDevice ...................... no EGLFS GBM ............................ yes EGLFS Mali ........................... no EGLFS Raspberry Pi ................... yes EGL on X11 ........................... no LinuxFB ................................ yes Mir client ............................. no X11: Using system provided XCB libraries .. yes EGL on X11 ........................... no Xinput2 .............................. yes XCB XKB .............................. yes XLib ................................. yes XCB render ........................... yes XCB GLX .............................. yes XCB Xlib ............................. yes Using system-provided xkbcommon ...... no Qt Widgets: GTK+ ................................... no Styles ................................. Fusion Windows Qt PrintSupport: CUPS ................................... yes QtXmlPatterns: XML schema support ..................... yes Qt QML: QML interpreter ........................ yes QML network support .................... yes Qt Quick: Direct3D 12 ............................ no AnimatedImage item ..................... yes Canvas item ............................ yes Support for Quick Designer ............. yes Flipable item .......................... yes GridView item .......................... yes ListView item .......................... yes Path support ........................... yes PathView item .......................... yes Positioner items ....................... yes ShaderEffect item ...................... yes Sprite item ............................ yes Qt Gamepad: SDL2 ................................... no Qt 3D: System Assimp .......................... no Qt Bluetooth: BlueZ .................................. no BlueZ Low Energy ....................... no Linux Crypto API ....................... no Qt Sensors: sensorfw ............................... no Qt Multimedia: ALSA ................................... yes GStreamer 1.0 .......................... yes GStreamer 0.10 ......................... no Video for Linux ........................ yes OpenAL ................................. no PulseAudio ............................. yes Resource Policy (libresourceqt5) ....... no DirectShow ............................. no Windows Media Foundation ............... no Qt Location: Gypsy GPS Daemon ....................... no WinRT Geolocation API .................. no Note: Also available for Linux: linux-clang linux-kcc linux-icc linux-cxx Note: PKG_CONFIG_LIBDIR automatically set to /home/jhbr/raspi/sysroot/usr/lib/pkgconfig:/home/jhbr/raspi/sysroot/usr/share/pkgconfig:/home/jhbr/raspi/sysroot/usr/lib/arm-linux-gnueabihf/pkgconfig Note: PKG_CONFIG_SYSROOT_DIR automatically set to /home/jhbr/raspi/sysroot Note: Dropped compiler flags '-pthread' when detecting library 'glib'. Note: Dropped compiler flags '-pthread' when detecting library 'gstreamer'. Note: Dropped compiler flags '-pthread' when detecting library 'gstreamer_app'.
And among others, I have installed the following relevant dependencies on the RPi3:
DEPS+=" libasound2-dev" DEPS+=" libpulse-dev" DEPS+=" libavcodec-dev" DEPS+=" libavformat-dev" DEPS+=" libswscale-dev" DEPS+=" gstreamer-tools" DEPS+=" libgstreamer1.0-dev" DEPS+=" libgstreamer-plugins-base1.0-dev" DEPS+=" gstreamer1.0-omx" DEPS+=" gstreamer1.0-plugins-good" DEPS+=" gstreamer1.0-plugins-bad" DEPS+=" gstreamer1.0-plugins-ugly" DEPS+=" gstreamer1.0-libav" DEPS+=" gstreamer1.0-clutter" DEPS+=" gstreamer1.0-fluendo-mp3" DEPS+=" gstreamer1.0-pulseaudio"
-
I realize that this topic is older (2 months at the time I'm writing this) but I stumbled across it when I was having a similar issue with QSound and QSoundEffect. My solution was to uninstall PulseAudio from my Pi, and install libasound2-dev. Then I rebuilt Qt with
-no-pulseaudio -alsa
configure options. My QSound and QSoundEffect programs work great now. -
Thank you, @StoatPatronus , that seemed to do the trick for me too!