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

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日

悬赏问题

  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题