Qt:在 linux 上没有播放

Posted

技术标签:

【中文标题】Qt:在 linux 上没有播放【英文标题】:Qt: no playback on linux 【发布时间】:2016-06-10 07:56:06 【问题描述】:

我已经尝试过(我认为)在 Qt 项目中播放音频的所有可能方式,但都没有奏效:

QSound::play(...) QMediaPlayer QAudioOutput,来自http://doc.qt.io/qt-4.8/qaudiooutput.html

这些解决方案都不播放 WAV 或 MP3,我尝试从资源 (qrc:media/file.wav) 或仅从磁盘 (/full/path/to/file.wav) 加载文件。

我认为问题出在编解码器上。 QAudioDevice::supportedCodecs() 返回一个空列表。我在一个 linux 系统上播放音频/视频没有问题(Ubuntu 14.04,通常在 VLC 中播放......使用自己的编解码器?)。

播放 QSound(WAV 和 MP3):

QSoundEffect(pulseaudio): Error decoding source

QMediaplayer (WAV):没有任何反应

QMediaplayer (MP3):

GStreamer; Unable to play - "qrc:media/lowtone.mp3"

【问题讨论】:

QAudioDevice::supportedCodecs 甚至不返回 audio/pcm? @UmNyobe nope... QStringList 的 size() 返回 0 【参考方案1】:

Qt 为每个平台使用specific media backends(链接是 qt5,但在 Qt4 中是一样的)。从错误看来,您的版本使用的是GStreamer

检查您的发行版上的 gstreamer 开发包是否安装良好,因为 QAudioDevice::supportedCodecs must return at least audio/pcm。处理包设置,直到您的测试程序显示pcm。见https://wiki.qt.io/Building_Qt_for_Linux

您可能还需要安装插件(也包括开发包)才能使用 phonon 播放 wav 或 mp3。

【讨论】:

感谢您的回复。我得到audio/pcm 现在由supportedCodecs 返回。我注意到QMediaPlayer::play 在作为插槽调用时确实有效(通过发出信号)。显然它必须被异步调用才能正常工作,即使对象是在堆上分配的并且超出了调用者的范围。我仍然不能使用QSound::play ......那个应该阻止的,对吧?

以上是关于Qt:在 linux 上没有播放的主要内容,如果未能解决你的问题,请参考以下文章

在 QT 中以全屏模式播放视频

使用 Qt 播放特定的系统声音

STM32MP157开发板Linux+Qt项目实战:音乐播放器

Qt音视频开发30-qmedia内核qt4方案phonon播放(支持视频流)

qtwenengine simplebrowser 播放的 html5 视频在树莓派 2 上没有声音和卡顿

Qt5 部署的 QtWebEngine 项目不播放 Html5 视频