CSDN-Ada助手 2023-05-30 12:05 采纳率: 2.9%
浏览 27

QMediaPlayer 播放内存里的数据,无法播放?_(语言-c++)

该问题来自社区帖: https://bbs.csdn.net/topics/615610198.为符合问答规范, 该问题经过ChatGPT优化
以下是已优化的问题: QMediaPlayer播放内存里的数据,无法播放? ```html void Window::playMedia(const QString &mediaPath) { playlist->clear(); QFile read(mediaPath); if (!read.open(QIODevice::ReadOnly)) { qDebug() << "文件打开失败, 请重试~"; } QByteArray *data = new QByteArray(read.readAll()); read.close(); QBuffer * buffer = new QBuffer(data,this); if (!buffer->open(QIODevice::ReadWrite)) { qDebug() << "buffer error"; } player->setMedia(QMediaContent(),buffer); player->play(); } ``` 我需要使用QMediaPlayer播放加载到内存里的数据。为什么这段代码播放不了?如何才能播放加载到内存中的mp4资源?将绿色代码更改为红色代码可以播放本地文件,但是如何播放内存加载的mp4资源?
  • 写回答

1条回答 默认 最新

  • 新_兰 2023-05-30 14:03
    关注

    GPT3.5
    提供的代码中出现问题的地方是使用QBuffer从内存中播放媒体时没有正确设置QMediaContent对象。setMedia函数需要一个有效的QMediaContent对象才能播放媒体。

    要解决这个问题,你需要使用表示媒体路径的QUrl对象创建一个QMediaContent对象。以下是修改后的代码:

    void Window::playMedia(const QString &mediaPath)
    {
        playlist->clear();
        QFile read(mediaPath);
        if (!read.open(QIODevice::ReadOnly))
        {
            qDebug() << "文件打开失败,请重试~";
            return;
        }
    
        QByteArray data = read.readAll();
        read.close();
    
        QBuffer *buffer = new QBuffer(&data, this);
        if (!buffer->open(QIODevice::ReadWrite))
        {
            qDebug() << "buffer error";
            delete buffer;
            return;
        }
    
        QUrl mediaUrl = QUrl::fromLocalFile(mediaPath);
        QMediaContent mediaContent(mediaUrl);
        player->setMedia(mediaContent, buffer);
    
        player->play();
    }
    

    在修改后的代码中,使用QUrl::fromLocalFile(mediaPath)从媒体路径创建了一个QUrl对象。然后,使用该QUrl对象创建了一个QMediaContent对象。最后,将QMediaContentQBuffer传递给setMedia()函数以设置QMediaPlayer的媒体。

    确保在出现任何错误时对动态分配的QBuffer对象进行适当的错误处理和清理(delete buffer)。

    评论

    报告相同问题?

    问题事件

    • 创建了问题 5月30日

    悬赏问题

    • ¥30 关于#开发语言#的问题:我需要在抄板的基础上再抄板抄程序,根据RDA8851CM基础上开发
    • ¥15 oracle 多个括号,怎么删除指定的括号及里面的内容?
    • ¥15 poly函数表达式的看法
    • ¥15 我想问一下有人熟悉思科packet tracer
    • ¥15 小新14API2019想用bios调风扇
    • ¥15 Python和易语言爬虫探讨
    • ¥15 有Sakai 会吗,没做过,需要交
    • ¥20 使用vba登录公司统一登录的网页
    • ¥15 opensea上传人机验证不了
    • ¥15 RK3568 kernel5.10