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 上没有播放的主要内容,如果未能解决你的问题,请参考以下文章
STM32MP157开发板Linux+Qt项目实战:音乐播放器
Qt音视频开发30-qmedia内核qt4方案phonon播放(支持视频流)