Qt6中播放解码音频QByteArray报错handleSourceError: 0x8007007B
Qt6中播放解码音频QByteArray报错handleSourceError: 0x8007007B
源码:
mediaPlayer = new QMediaPlayer();
output = new QAudioOutput();
mediaPlayer->setAudioOutput(output);
mediaPlayer->play();
while (av_read_frame(pFormatCtx, packet) >= 0) {
if (packet->stream_index == audioStream) {
if(avcodec_send_packet(pCodecCtx, packet) == 0){
while (avcodec_receive_frame(pCodecCtx, pFrame) >= 0) {
int outNbSamples = swr_get_out_samples(swr_ctx2, pFrame->nb_samples);
av_samples_alloc((uint8_t **)&pFramePCM->data, &pFramePCM->linesize[0],pCodecCtx->ch_layout.nb_channels, outNbSamples,AV_SAMPLE_FMT_S16, 1);
swr_convert(swr_ctx2, pFramePCM->data, outNbSamples,(const uint8_t **)pFrame->data, pFrame->nb_samples);
int totalSize = pFrame->nb_samples * pCodecCtx->ch_layout.nb_channels * outNbSamples;
QByteArray audioData((char *)pFramePCM->data[0], outNbSamples * (pFrame->ch_layout.nb_channels+2));
mediaPlayer->setSource(QUrl(audioData.data()));
//playPcmData(audioData);
//QByteArray audioData((char *)pFramePCM->data, pFramePCM->nb_samples * pCodecCtx->ch_layout.nb_channels * 3);
//streamOut->write(audioData.data(),audioData.size());
//buffer->setBuffer(&audioData);
//buffer->open(QBuffer::ReadWrite);
}
}
}
av_packet_unref(packet);
}