-1

我想许多应用程序都需要小的音频剪辑,因此我希望 QT 支持在内存片中播放 mp3。也许将 mp3 数据解码为内存中的 wav 数据可能是一种解决方案,但这需要时间先解码所有数据。对于实时应用,这不是一个好主意。将 mp3_data 存储在文件中并要求 QMediaPlayer 播放也没有意义,性能无法接受。

这是我在谷歌多次搜索后的代码,包括stackoverflow:

        m_buffer.setBuffer(&mp3_data_in_memory);
        m_player.setMedia(QMediaContent(), &m_buffer);
        m_player.play();

其中 m_buffer 是一个 QBuffer 实例,而 mp3_data_in_memory 是一个 QByteArray ;m_player 是一个 QMediaPlayer 实例。

我得到了一些信息,这里的代码在 MacOS 和 iOS 中不起作用,但我现在在 Android 上运行。

谁有安卓系统的解决方案?非常感谢。

4

1 回答 1

0

您的代码将不起作用,因为该media属性需要一个有效的QMediaContent实例:

将此属性设置为 null QMediaContent 将导致播放器丢弃与当前媒体源相关的所有信息并停止与该媒体相关的所有 I/O 操作。

也没有办法QMediaPlayer知道数据的格式,你只是在上面转储原始数据。原则上QMediaResource可以保存此信息,但它需要一个 url,没有它被视为 null。

正如您可能已经猜到QMediaPlayer的那样,相关的类是不是为这类事情设计的高级构造。您需要使用 aQAudioDecoder来实际解码原始数据,并将输出通过管道传输到 aQAudioOutput以听到它。

于 2015-08-14T10:52:19.953 回答