簡體   English   中英

如何在Qt Creator中的Qt Widgets應用程序中播放本地視頻?

[英]How to play a local video in a Qt Widgets Application, in Qt creator?

這可能是一個非常菜鳥的問題...我對Qt還是很陌生,並嘗試在Qt Creator中進行編程。 現在,我從Qt創作者創建了一個新的Qt Widgets應用程序,並希望使用它來播放視頻。 我的項目中現在有以下6個文件:

  • 項目
    • Project.pro
      • videoplayer.h
    • 來源
      • main.cpp中
      • videoplayer.cpp
    • 形式
      • videoplayer.ui
    • 其他文件
      • /用戶/人/某處
        • Demo.mp4

在運行應用程序時(也許使用一些稱為QVideoPlayer的工具),我應該在哪里以及如何確切地編寫代碼以使其能夠播放Demo.mp4? 我應該在我的videoplayer.ui上添加一些Qwidget嗎? 現在,我的videoplayer.ui上有四個按鈕“播放”,“暫停”,“全屏”和“重新排列”。 我想要的結果具有以下特征:

  • 按下播放按鈕以播放整個窗口左上角的Demo.mp4
  • 按下暫停即可暫停
  • 按full_screen進入全屏(如果QMediaPlayer本身可以進入/退出全屏,則不需要此功能)
  • 按重新排列將播放窗口從左上角移到右上角
  • 另外:快進和快退(同樣,如果QVideoPlayer或Qt提供的功能尚未具有此功能)

您在尋找Qt Multimedia Widgets (運行Linux時,您可能需要安裝其他軟件包)。

基本思路如下:

  • 在UI方面,您可以使用QVideoWidget 這是顯示視頻的地方。
    • 這就是您要添加到.ui文件中的內容。
    • 注意fullScreen屬性。
  • 在邏輯上,您可以使用QMediaPlayer來控制播放的內容和播放的時間。
    • 通過調用QMediaPlayer::setVideoOutput(yourVideoWidgetGoesHere);來連接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(); 

您正在尋找的是在Qt 5上實現QMediaPlayer ,在Qt 4.4Qt 4.4 QVideoPlayer

對於QMediaPlayer ,您必須使用以下實現來添加一部電影:

QMediaPlayer *player = new QMediaPlayer;
player->setMedia(QUrl::fromLocalFile("/users/somebody/somewhere/demo.mp4"));
player->setVolume(10);
player->play();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM