如何在 Qt Creator 中的 Qt Widgets 应用程序中播放本地视频?

问题描述 投票:0回答:2

这可能是一个非常菜鸟的问题...我对 Qt 很陌生,正在尝试在 Qt 创建者中编程。现在我从 Qt 创建者创建了一个新的 Qt Widgets 应用程序,并想用它播放视频。现在我的项目中有以下 6 个文件:

  • 项目
    • 项目.pro
    • 标题
      • 视频播放器.h
    • 来源
      • 主.cpp
      • 视频播放器.cpp
    • 表格
      • videoplayer.ui
    • 其他文件
      • /用户/某人/某处
        • 演示.mp4

当我运行应用程序时(也许使用一些名为 QVideoPlayer 的工具),我应该在哪里以及如何编写代码以使其播放 Demo.mp4?我应该在 videoplayer.ui 上添加一些 Qwidget 吗?现在,我的 videoplayer.ui 上有四个按钮“播放”、“暂停”、“全屏”和“重新排列”。我想要的结果是具有以下特征的东西:

  • 按下播放按钮即可播放整个窗口左上角的Demo.mp4
  • 按暂停键暂停
  • 按 full_screen 进入全屏(如果 QMediaPlayer 本身可以进入/退出全屏,则不需要此功能)
  • 按重新排列将播放窗口从左上角移至右上角
  • 附加:快进和快退(同样,如果 QVideoPlayer 或 Qt 提供的东西尚未具有此功能)
c++ qt video widget qt-creator
2个回答
5
投票

您正在寻找 Qt 多媒体小部件。 (运行 Linux 时您可能需要安装额外的软件包)。

基本思想是这样的:

  • 在 UI 方面,您使用
    QVideoWidget
    。这是视频显示的地方。
    • 这是您要添加到
      .ui
      文件中的内容。
    • 注意
      fullScreen
      属性。
  • 在逻辑方面,您使用
    QMediaPlayer
    来控制播放内容和播放时间。
    • 两者通过调用
      QMediaPlayer::setVideoOutput(yourVideoWidgetGoesHere);
      联系起来。
    • 然后将
      QMediaPlaylist
      添加到您的
      QMediaPlayer
    • 最后打电话给
      QMediaPlayer::play()
      ,你就可以出发了

如果到目前为止可行,那么您需要一些基本的控件。

QMediaPlayer
提供了以下插槽,其功能正如其名称所示:

  • pause()
  • play()
  • stop()
  • setPosition(int)
    ,参数以毫秒为单位。
    duration()
    可能会感兴趣。
  • setVolume(int)
    setMuted(bool)
    。音量从 0 到 100。
  • setPlaybackRate(double)
  • 元数据可通过
    metaData(QString key)
    获取:http://qt-project.org/doc/qt-5/qmediaobject.html#metaData

其中每一个都有相应的更改信号,对您来说非常有趣的可能是更新滑块或与当前位置类似的东西的

positionChanged(int)
信号。

Qt 文档提供的基本示例:

player = new QMediaPlayer;

playlist = new QMediaPlaylist(player);
playlist->addMedia(QUrl("http://example.com/myclip1.mp4"));
playlist->addMedia(QUrl("http://example.com/myclip2.mp4"));

videoWidget = new QVideoWidget;
player->setVideoOutput(videoWidget);

videoWidget->show();
playlist->setCurrentIndex(1);
player->play(); 

2
投票

您正在寻找的是实现一个 QMediaPlayer(如果您使用

Qt 5
),一个 QVideoPlayer(如果您使用
Qt 4.4

对于

QMediaPlayer
,您必须使用以下实现来添加一部电影:

QMediaPlayer *player = new QMediaPlayer;
player->setMedia(QUrl::fromLocalFile("/users/somebody/somewhere/demo.mp4"));
player->setVolume(10);
player->play();
© www.soinside.com 2019 - 2024. All rights reserved.