【问题标题】:Need QMediaPlayer to play mp3 data in memory需要 QMediaPlayer 播放内存中的 mp3 数据
【发布时间】:2015-08-14 10:00:14
【问题描述】:

我想许多应用程序都需要小的音频剪辑,因此我希望 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 上运行。

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

【问题讨论】:

    标签: android ios qt mp3 qmediaplayer


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 非常感谢您的帮助。但是让 QAudioDecoder 在 Android、iOS 和桌面上工作并不走运。我最终选择了mpg123解码输出到QAudioOutput。
    猜你喜欢
    • 2014-12-01
    • 2014-08-14
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多