2015-10-15 10 views

ответ

2

Это зависит от платформы, но то, что вы, вероятно, можете сделать, это использовать QMediaPlayer, установить видео поверхность подкласса через setVideoOutput, и получить кадр данных из QVideoFrame прошел в методе present. Затем вам придется иметь дело с форматом фрейма и отображать его, если они не находятся в памяти ЦП.

Однако, в зависимости от вашей потребности, я бы использовал ffmpeg/libav для получения кадра из определенной позиции.

1

Попробуйте это (документ здесь: http://doc.qt.io/qt-5/qml-qtquick-item.html#grabToImage-method)

import QtQuick 2.5 
import QtQuick.Window 2.2 
import QtQuick.Controls 1.4 
import QtQuick.Layouts 1.1 
import QtMultimedia 5.0 

Window { 
    id: mainWindow 
    visible: true 
    width: 480 
    height: 800 

    MediaPlayer {  
     id: player 
     source: "file:///location/of/some/video.mp4" 
     autoPlay: false    
    } 

    ColumnLayout { 
     anchors.fill: parent 
     VideoOutput { 
      id: output 
      source: player 
      Layout.fillHeight: true 
      Layout.fillWidth: true     
     } 

     Row { 
      id: buttonsRow 
      height: 100 
      spacing: 20 
      anchors.horizontalCenter: parent.horizontalCenter 
      Layout.margins: 10     

      Button { 
       id: playPauseButton 
       text: player.playbackState === MediaPlayer.PlayingState ? "Pause" : "Play" 
       onClicked: { 
        var playing = player.playbackState === MediaPlayer.PlayingState; 
        playing ? player.pause() : player.play(); 
       } 
      }     
      Button { 
       text: "Snapshot" 
       onClicked: { 
        output.grabToImage(function(image) { 
         console.log("Called...", arguments) 
         image.saveToFile("screen.png"); // save happens here 
        }); 
       } 
      } 
     } 
    } 
}