当前位置: 首页 > article >正文

qml制作简单的播放器--MediaPlayer

MediaPlayer

 在QML应用程序中,最基本的媒体应用是播放媒体。使用MediaPlayer元素可以完成它,如果源是一个图片或者视频,可以选择结合VideoOutput元素。MediaPlayer元素有一个source属性指向需要播放的媒体。当媒体源被绑定后,简单的调用play函数就可以开始播放。
 如果你想播放一个可视化的媒体,例如图片或者视频等,你需要配置一个VideoOutput元素。MediaPlayer播放通过source属性与视频输出绑定。
 给MediaPlayer元素一个视频文件作为source。一个VideoOutput被创建和绑定到媒体播放器上。一旦主要部件完全初始化,例如在Component.onCompleted中,播放器的play函数被调用。

import QtQuick
import QtQuick.Window
import QtMultimedia
import QtQuick.Controls

Window {
    id: root
    width: 640
    height: 480
    visible: true

    MediaPlayer{
        id: player
        source: "../1.mp4"
        audioOutput:AudioOutput{
            volume: volumeSlider.value
        }
        videoOutput: videoOutput
    }

    VideoOutput{
        id:videoOutput
        width: root.width-80;
        anchors.centerIn: parent
    }

    Rectangle{
        color: 'black'
        width: col.width;height: col.height
        anchors.top:parent.top
        anchors.right:parent.right

        Column{
            id: col
            Text {
                color: 'white'
                text: qsTr("音量")
            }
            Slider{
                id: volumeSlider
                orientation: Qt.Vertical
                value: 0.5
                anchors.margins: 20
            }
        }
    }

    Row{
        height: 50;
        anchors.left: parent.left
        anchors.right:parent.right
        anchors.bottom: parent.bottom
        anchors.margins: 20
        spacing:20

        Button{
            width: 50
            anchors.verticalCenter: parent.verticalCenter
            text: player.playbackState===MediaPlayer.PlayingState?'Pause':'Play'
            onClicked: {
                switch(player.playbackState){
                case MediaPlayer.PlayingState:player.pause();break;
                case MediaPlayer.PausedState:player.play();break;
                case MediaPlayer.StoppedState:player.play();break;
                }
            }
        }

        Slider{
            id:progressSlider
            width: parent.width-80
            anchors.verticalCenter: parent.verticalCenter
            value: player.duration>0?player.position/player.duration:0

            background: Rectangle{
                implicitHeight: 8
                radius: 3
                color: 'lightgreen'

                Rectangle{
                    width: progressSlider.value*parent.width
                    height: parent.height
                    color:'blue'
                    radius: 3
                }
            }

            onMoved:function(){
                player.position=player.duration*progressSlider.value
            }
        }
    }
    Component.onCompleted: {
        player.play()
    }
}

代码地址


http://www.kler.cn/news/133736.html

相关文章:

  • 如何使用贝锐花生壳内网穿透远程访问JupyterNotebook?
  • springboot项目yml文件中使用${}配置
  • linux下安装python3.8(有坑)
  • ping命令使用示例解析
  • ubuntu20.04在docker下运行ros-noetic进行开发
  • 【电路笔记】-最大功率传输
  • vulhub redis-4-unacc
  • ​软考-高级-系统架构设计师教程(清华第2版)【第14章 云原生架构设计理论与实践(P496~526)-思维导图】​
  • 文本向量化
  • PTA-6-42 设计门票(抽象类)
  • [C/C++] 数据结构 LeetCode:用队列实现栈
  • 【碰碰球】弹珠游戏-微信小程序项目开发流程详解
  • 【短文】【踩坑】可以在Qt Designer给QTableWidge添加右键菜单吗?
  • 最长回文子序列 递归与动态规划
  • 【精选】项目管理工具——Maven详解
  • STM32的启动流程
  • 数据双向 双向数据绑定
  • 【Promise12数据集】Promise12数据集介绍和预处理
  • odoo16前端框架源码阅读——env.js
  • 深度优化数据库性能:Linux 内核参数调整解析
  • ChatGPT 从零到一打造私人智能英语学习助手
  • 【JavaEE初阶】计算机是如何工作的
  • Leetcode经典题目之“双指针交换元素“类题目
  • 基于SSM的古董拍卖系统
  • 基础组件-流量回放平台设计
  • 单线程的JS中Vue导致的“线程安全”问题
  • 【FPGA】Verilog:实现 RS 触发器 | Flip-Flop | 使用 NOR 的 RS 触发器 | 使用 NAND 的 RS 触发器
  • VUE(一)
  • Chrome 浏览器经常卡死问题解决
  • linux配置固定ip(两种方法)