(PySide2+anaconda) 通过 QMediaPlayer 播放音频:警告:"Could not open audio device for playback."

(PySide2+anaconda) playing audio via QMediaPlayer: Warning: "Could not open audio device for playback."

已经有很多相关问题,但是 none 现有信息 covered/fixed 这个问题:

通过以下方式加载文件时:

player.setMedia(url)

警告

Warning: "Could not open audio device for playback."

打印在终端上。尽管 URL 正确且其他应用程序可以播放,但没有声音发出。 至关重要的是,通过具有相同 qt5 版本的 C++ QTCreator 加载 Official Media Player Qt Example 是可行的。

由于 Python、anaconda 或两者的原因,最后一个事实表明安装错误。

诊断(跳过下面的解决方案):

确实,一些调查显示错误出在 gstreamer 库,它可能无法通过内置 pulseaudio 服务器传输声音。

查看您的 gstreamer 是否正常工作:

您可以按照 here 所述全局安装 gstreamer。然后,从非 conda 终端,运行 以下内容:

# check that we're using the global/conda installation
which gst-launch-1.0
# play a test tone
gst-launch-1.0 audiotestsrc ! audioconvert ! audioresample ! pulsesink
# play different audio formats
gst-play-1.0 ~/Desktop/test.wav
gst-play-1.0 ~/Desktop/test3.mp3

哪个应该没有任何问题。然后,在您的 conda 环境中尝试相同的操作。如果 which 命令指向不同的二进制文件并且您遇到问题,下面的解决方案可能对您有用!

解决方案

现在的挑战是找出缺少什么,以及哪个版本。在对 conda 存储库进行大量猜测和尝试组合之后,我发现了以下一系列步骤,这些步骤从一个新的 conda 环境到一个 PySide2 安装,其中 gstreamerQMediaPlayer.play() 功能。它可能适用于 Python 3.7 以外的版本,我很高兴听到是否有人也能使用任何变体!

# create env
conda create -y -c conda-forge -n qt37 python=3.7
conda activate qt37
# Gst-compatible installation
conda install -y -c conda-forge gst-plugins-base gst-plugins-good gstreamer
conda install -y -c conda-forge pulseaudio
conda install -y -c dtk-forge gst-plugins-good-pulseaudio
# Now the forge pyside2 is your friend
conda install -y -c conda-forge pyside2

重复上面的 gst 测试现在应该会产生声音并播放本地安装的文件。如果是这样的话,很可能您的 QMediaPlayer 也能正常工作。

为了确保...

由于脚本缺少特定版本,这里是为后代冻结的conda list。它还可以帮助您修改现有环境。

# Name                    Version                   Build  Channel
_libgcc_mutex             0.1                 conda_forge    conda-forge
_openmp_mutex             4.5                       1_gnu    conda-forge
alsa-lib                  1.2.3                h516909a_0    conda-forge
attr                      2.4.48               h516909a_0    conda-forge
ca-certificates           2020.12.5            ha878542_0    conda-forge
certifi                   2020.12.5        py37h89c1867_1    conda-forge
dbus                      1.13.6               h48d8840_2    conda-forge
expat                     2.3.0                h9c3ff4c_0    conda-forge
fftw                      3.3.9           nompi_h74d3f13_101    conda-forge
fontconfig                2.13.1            hba837de_1005    conda-forge
freetype                  2.10.4               h0708190_1    conda-forge
gettext                   0.19.8.1          h0b5b191_1005    conda-forge
glib                      2.68.1               h9c3ff4c_0    conda-forge
glib-tools                2.68.1               h9c3ff4c_0    conda-forge
gst-plugins-base          1.18.4               hf529b03_2    conda-forge
gst-plugins-good          1.18.4               h9f60fe5_2    conda-forge
gst-plugins-good-pulseaudio 1.18.4               h3fd9d12_0    dtk-forge
gstreamer                 1.18.4               h76c114f_2    conda-forge
icu                       68.1                 h58526e2_0    conda-forge
jack                      1.9.18            h295b1ef_1001    conda-forge
jpeg                      9d                   h36c2ea0_0    conda-forge
json-c                    0.15                 h98cffda_0    conda-forge
krb5                      1.17.2               h926e7f8_0    conda-forge
lame                      3.100             h7f98852_1001    conda-forge
ld_impl_linux-64          2.35.1               hea4e1c9_2    conda-forge
libcap                    2.48                 h7f98852_0    conda-forge
libclang                  11.1.0          default_ha53f305_0    conda-forge
libdb                     6.2.32               h9c3ff4c_0    conda-forge
libedit                   3.1.20191231         he28a2e2_2    conda-forge
libevent                  2.1.10               hcdb4288_3    conda-forge
libffi                    3.3                  h58526e2_2    conda-forge
libflac                   1.3.3                h9c3ff4c_1    conda-forge
libgcc-ng                 9.3.0               h2828fa1_19    conda-forge
libgfortran-ng            9.3.0               hff62375_19    conda-forge
libgfortran5              9.3.0               hff62375_19    conda-forge
libglib                   2.68.1               h3e27bee_0    conda-forge
libgomp                   9.3.0               h2828fa1_19    conda-forge
libiconv                  1.16                 h516909a_0    conda-forge
libllvm11                 11.1.0               hf817b99_2    conda-forge
libogg                    1.3.4                h7f98852_1    conda-forge
libopus                   1.3.1                h7f98852_1    conda-forge
libpng                    1.6.37               h21135ba_2    conda-forge
libpq                     13.2                 hfd2b0eb_2    conda-forge
libsndfile                1.0.31               h9c3ff4c_1    conda-forge
libstdcxx-ng              9.3.0               h6de172a_19    conda-forge
libtool                   2.4.6             h58526e2_1007    conda-forge
libuuid                   2.32.1            h7f98852_1000    conda-forge
libvorbis                 1.3.7                h9c3ff4c_0    conda-forge
libxcb                    1.13              h7f98852_1003    conda-forge
libxkbcommon              1.0.3                he3ba5ed_0    conda-forge
libxml2                   2.9.10               h72842e0_4    conda-forge
libxslt                   1.1.33               h15afd5d_2    conda-forge
lz4-c                     1.9.3                h9c3ff4c_0    conda-forge
mysql-common              8.0.23               ha770c72_2    conda-forge
mysql-libs                8.0.23               h935591d_2    conda-forge
ncurses                   6.2                  h58526e2_4    conda-forge
nspr                      4.30                 h9c3ff4c_0    conda-forge
nss                       3.64                 hb5efdd6_0    conda-forge
openssl                   1.1.1k               h7f98852_0    conda-forge
pcre                      8.44                 he1b5a44_0    conda-forge
pip                       21.1.1             pyhd8ed1ab_0    conda-forge
pthread-stubs             0.4               h36c2ea0_1001    conda-forge
pulseaudio                14.0                 hb166930_3    conda-forge
pyside2                   5.13.2           py37hfa98aef_4    conda-forge
python                    3.7.10          hffdb5ce_100_cpython    conda-forge
python_abi                3.7                     1_cp37m    conda-forge
qt                        5.12.9               hda022c4_4    conda-forge
readline                  8.1                  h46c0cb4_0    conda-forge
setuptools                49.6.0           py37h89c1867_3    conda-forge
sqlite                    3.35.5               h74cdb3f_0    conda-forge
tk                        8.6.10               h21135ba_1    conda-forge
wheel                     0.36.2             pyhd3deb0d_0    conda-forge
xorg-libxau               1.0.9                h7f98852_0    conda-forge
xorg-libxdmcp             1.1.3                h7f98852_0    conda-forge
xz                        5.2.5                h516909a_1    conda-forge
zlib                      1.2.11            h516909a_1010    conda-forge
zstd                      1.4.9                ha95c52a_0    conda-forge

希望对您有所帮助!
安德烈斯