Eve1yn0 2023-03-23 11:38 采纳率: 64.5%
浏览 93
已结题

关于Qt视频文件无法播放的问题

如下代码所示,将MP4格式的视频文件添加到资源文件中后,代码中使用资源文件的相对路径无法播放视频,但是使用绝对路径(没有放入资源文件中)就可以正常播放,什么原因呢,以及解决方法是什么?

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    QVideoWidget * videoWin = new QVideoWidget(this);
    videoWin->resize(400,300);
    QMediaPlayer * player = new QMediaPlayer(this);
    player->setVideoOutput(videoWin);

//视频使用绝对路径可以播放
//    player->setMedia(QMediaContent(QUrl::fromLocalFile("D:/QtTest1/test.mp4")));
    player->setMedia(QMediaContent(QUrl::fromLocalFile(":/res/test.mp4")));
    player->play();
}
  • 写回答

3条回答 默认 最新

  • mideum 2023-03-23 12:34
    关注

    Qt的媒体组件应该都没有做资源文件的特殊处理,而媒体组件最终都是调用外部库进行播放,外部库从资源地址是无法读取文件内容的
    可以尝试使用QFile先读取文件,然后将QFile作为QIODevice传入setMedia的stream参数

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月31日
  • 已采纳回答 3月23日
  • 创建了问题 3月23日

悬赏问题

  • ¥50 C#写的winform项目无法打包发布
  • ¥20 关于#windows#的问题,请各位专家解答!(相关搜索:服务器)
  • ¥30 使用C++实现ATM系统
  • ¥20 求帮,直连能连上oracle12,但是thinkphp6就是报错
  • ¥15 paddleocr运行报错
  • ¥15 怎么用 matlab 设计滞后-超前串联校正网络
  • ¥15 MFC引用C#生成的dll,将dll放置到非exe程序目录,如何操作
  • ¥15 C#创建webservice接口,三方通过多次跳转访问本方服务,获取wsdl文档,wsdl中ip地址为局域网内本机地址而非三方直接访问的地址。
  • ¥15 关于#wireshark#的问题:需要安卓app流量数据集要安卓流量做包序列长度的实验,比如某些流量是在看视频还是在发评论
  • ¥15 Smail语句如何使用判断语句跳过验证卡密界面