Qt 是否需要从主线程调用QAudioOutput::start()?

Qt 是否需要从主线程调用QAudioOutput::start()?,qt,phonon,Qt,Phonon,我在我的代码中播放音频,如下所示: // decode routine QAudioFormat format; format.setFrequency(aCodecCtx->sample_rate); format.setChannels(2); format.setSampleSize(16); format.setCodec("audio/pcm"); format.setByteOrder(QAudioFormat::LittleEndian); format.setSample

我在我的代码中播放音频,如下所示:

// decode routine

QAudioFormat format;
format.setFrequency(aCodecCtx->sample_rate);
format.setChannels(2);
format.setSampleSize(16);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::SignedInt);
QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
if (!info.isFormatSupported(format)) {
    cout<<"raw audio format not supported by backend, cannot play audio." <<endl;
    format = info.nearestFormat(format);
}
QAudioOutput * audio = new QAudioOutput(format);
connect(audio,SIGNAL(stateChanged(QAudio::State)),SLOT(stateChanged(QAudio::State)));
if( !buffer->open(QBuffer::ReadWrite) )
    cout << "Couldnt open Buffer" << endl;
cout << "buffer.size()=" << buffer->size() <<endl;
audio->start(buffer);
//解码例程
QAudioFormat格式;
格式.设置频率(aCodecCtx->采样率);
格式。设置频道(2);
格式设置示例(16);
格式化.setCodec(“音频/pcm”);
setByteOrder格式(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::SignedInt);
QAudioDeviceInfo信息(QAudioDeviceInfo::defaultOutputDevice());
如果(!info.isFormatSupported(格式)){

cout我忘了在工作线程中启动事件循环。否则线程将退出,这就是音频无法播放的原因