在 Qt Multimedia 中拍摄视频快照

Posted

技术标签:

【中文标题】在 Qt Multimedia 中拍摄视频快照【英文标题】:Take snapshot of video in Qt Multimedia 【发布时间】:2015-10-15 15:35:11 【问题描述】:

是否可以拍摄Qt Multimedia 中的视频快照?怎么样?

【问题讨论】:

【参考方案1】:

这取决于平台,但您可能会做的是使用QMediaPlayer,通过setVideoOutput 设置子类视频表面,并从QVideoFrame 中获取帧数据在present 方法中传递。然后,您必须处理帧格式并在 CPU 内存中不存在的情况下进行映射。

但是,根据您的需要,我会使用 ffmpeg/libav 从特定位置获取帧。

【讨论】:

【参考方案2】:

试试这个(这里的文档: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
                    );
                
            
        
    

【讨论】:

以上是关于在 Qt Multimedia 中拍摄视频快照的主要内容,如果未能解决你的问题,请参考以下文章

使用 Qt MultiMedia 和 Widgets 播放网络流媒体视频

Qt/C++ Multimedia Player Video Clips,多个视频小部件

如何在android中播放视频时拍摄videoview的快照?

在 UIScrollView 中拍摄 CATiledLayer 支持的视图的图像快照

Qt Quick 多媒体 - 播放音乐和视频

QT中的 multimedia模块问题?如何添加.dll文件?