说明:
1.支持播放,暂停,停止
2.支持 文件 打开播放
3.支持快进、快退
4.支持鼠标拖拽进度
5.支持音量调节

6.显示进度时间

代码:

import QtQuick 2.0
import QtMultimedia 5.0
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
import QtQuick.Layouts 1.1
import QtQuick.Dialogs 1.2
import QtQuick.Window 2.0
ApplicationWindow{id:kPlayerwidth: 1024height: 650visible: truetitle:getVedioName(fd.fileUrl.toString())//获取影音名称function getVedioName(str){var url=fd.fileUrl.toString();var strList=new Array();strList=url.split("/");var name=strList[strList.length-1];return name;}Column{Rectangle{id:screencolor:"black"width:kPlayer.widthheight: kPlayer.height-50Image{id:imgsource: "./Images/KPlayer.png"anchors.fill: parent}MediaPlayer{id:playersource: fd.fileUrlautoPlay: truevolume: voice.value}VideoOutput {anchors.fill: parentsource: player}}Rectangle{id:controlcolor:"#80202020"border.color: "gray"border.width: 1width:kPlayer.widthheight: 20Row{spacing: 10anchors.verticalCenter: parent.verticalCenteranchors.leftMargin: 10anchors.left: parent.left//调节播放速度Slider{id:playPoswidth: kPlayer.width*0.75height: 10maximumValue: player.durationminimumValue: 0value:player.positionanchors.verticalCenter: parent.verticalCenterstepSize:1000style: SliderStyle {groove: Rectangle {width: kPlayer.width*0.8height: 8color: "gray"radius: 2Rectangle {anchors.left: parent.leftanchors.top: parent.topanchors.bottom: parent.bottomwidth: player.duration>0?parent.width*player.position/player.duration:0color: "blue"}}handle: Rectangle {anchors.centerIn: parentcolor: control.pressed ? "white" : "darkgray"border.color: "gray"border.width: 2implicitWidth: 15implicitHeight: 15radius:7.5Rectangle{width: parent.width-8height: widthradius: width/2color: "blue"anchors.centerIn: parent}}}//点击鼠标设置播放位置MouseArea {property int posanchors.fill: parentonClicked: {if (player.seekable)pos = player.duration * mouse.x/parent.widthplayer.seek(pos)playPos.value=pos;}}}Image{width: 15height: 15source: "./Images/voice.png"anchors.verticalCenter: parent.verticalCenter}//调节音量Slider{id:voicewidth: kPlayer.width*0.2height: 10value:player.volumestepSize: 0.1maximumValue: 1minimumValue: 0anchors.verticalCenter: parent.verticalCenterstyle: SliderStyle {groove: Rectangle {implicitWidth: kPlayer.width*0.2implicitHeight: 8color: "gray"radius: 2Rectangle {anchors.left: parent.leftanchors.top: parent.topanchors.bottom: parent.bottomwidth: player.volume>0?parent.width*player.volume:0color: "blue"}}handle: Rectangle {anchors.centerIn: parentcolor: control.pressed ? "white" : "darkgray"border.color: "gray"border.width: 2implicitWidth: 15implicitHeight: 15radius:7.5Rectangle{width: parent.width-8height: widthradius: width/2color: "blue"anchors.centerIn: parent}}}}}}//控制区域Rectangle{id:bottomcolor:"#80202020"border.color: "gray"border.width: 1width: kPlayer.widthheight: 30Row{anchors.verticalCenter: parent.verticalCenteranchors.left: parent.leftanchors.leftMargin: 10spacing: 10ButtonImage{width: 30height: 30property int status: 1  //默认播放iconImage: "./Images/pause.png"onClicked: {if(status===1){player.pause();tooltip="开始";console.log("start")status=0;iconImage="./Images/play.png"}else{player.play() ;tooltip="暂停";console.log("pause")status=1;iconImage="./Images/pause.png"}}}ButtonImage{width: 30height: 30onClicked: player.stop()tooltip: "停止"iconImage: "./Images/stop.png"}//快进快退10sButtonImage{width: 30height: 30onClicked: player.seek(player.position+10000)tooltip: "快退"iconImage: "./Images/back.png"}ButtonImage{width: 30height: 30onClicked: player.seek(player.position-10000)tooltip: "快进"iconImage: "./Images/pass.png"}ButtonImage{width: 30height: 30tooltip: "打开文件"onClicked: fd.open()iconImage: "./Images/add.png"FileDialog{id:fdnameFilters: ["Vedio Files(*.avi *.mp4 *rmvb *.rm)"]  //格式过滤selectMultiple: false}}Text{anchors.verticalCenter: parent.verticalCentertext:parent.currentTime(player.position)+"/"+parent.currentTime(player.duration)color: "white"}//时间格式化function currentTime(time){var sec= Math.floor(time/1000);var hours=Math.floor(sec/3600);var minutes=Math.floor((sec-hours*3600)/60);var seconds=sec-hours*3600-minutes*60;var hh,mm,ss;if(hours.toString().length<2)hh="0"+hours.toString();elsehh=hours.toString();if(minutes.toString().length<2)mm="0"+minutes.toString();elsemm=minutes.toString();if(seconds.toString().length<2)ss="0"+seconds.toString();elsess=seconds.toString();return hh+":"+mm+":"+ss}}}}
}

纯QML实现视频播放器相关推荐

  1. QML VLC视频播放器

    基于VLC 和QML 的视频播放器 一,效果 二,代码 import QtQuick 2.0 import VLCQt 1.0 import QtQuick.Controls 2.3Item {id: ...

  2. 在Qt中如何用纯代码写一个本地视频播放器

    一.首先用纯代码写本地视频播放器需要用到以下类 #include <QWidget> #include <QHBoxLayout> //水平布局 #include <QV ...

  3. QML+Qt音视频播放器

    代码地址 xyygudu/Player: Qt和QML实现了视频播放器和音乐播放器 (github.com) 部分效果展示 实现的功能 视频相关:播放暂停.播放进度调节.音量调节.列表显示指定目录下的 ...

  4. Qml实现的视频播放器demo

    最近学习了Qml的基础,但没有在实际项目中用过,所以参考市面上的视频播放器的界面做了一个简易demo. demo中包含了Qml界面布局,基本控件,自定义控件,自定义信号槽.JavaScript等Qml ...

  5. XBMC源代码分析 6:视频播放器(dvdplayer)-文件头(以ffmpeg为例)

    XBMC分析系列文章: XBMC源代码分析 1:整体结构以及编译方法 XBMC源代码分析 2:Addons(皮肤Skin) XBMC源代码分析 3:核心部分(core)-综述 XBMC源代码分析 4: ...

  6. 音视频开发第一课-使用C语言开发视频播放器 650元IT外包开发全程记录

    界面设计 目标效果: 创建MFC对话框项目,或者直接使用项目模板 主要选择64位平台. 拖放控件 设置播放器区域的背景 把资源bg.bmp拷贝到项目目录的res目录下. 把bg.bmp添加当项目的资源 ...

  7. Flowplayer一款免费的WEB视频播放器

    Flowplayer 是一个开源(GPL 3的)WEB视频播放器.您可以将该播放器嵌入您的网页中,如果您是开发人员,您还可以自由定制和配置播放器相关参数以达到您要的播放效果.本文主要介绍Flowpla ...

  8. android音视频播放器开发百度云,Android 播放端 SDK

    1 概述 PLDroidPlayer 是一个适用于 Android 平台的音视频播放器 SDK,可高度定制化和二次开发,为 Android 开发者提供了简单.快捷的接口,帮助开发者在 Android ...

  9. uniapp爱玩小灰视频播放器使用流程

    原生插件通用使用流程: 购买插件,选择该插件绑定的项目. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加. 根据插件作者的提供 ...

最新文章

  1. C语言strcpy,strncpy和strlcpy讲解
  2. python100个必背知识-python必背内容有哪些
  3. 解决 IndyFTp 乱码问题 10.6.0
  4. Ajax请求Session超时解决
  5. 关于 ABAP 调试器里的 16 进制值的显示问题
  6. C#使用Xamarin开发可移植移动应用(2.Xamarin.Forms布局,本篇很长,注意)附源码
  7. 数据结构(十一)桶排序
  8. 【CCCC】L3-004 肿瘤诊断 (30分),三维BFS
  9. java stream过滤_Java Stream过滤器
  10. 【CV2】Python中cv2使用小窗口显示高分辨率图片
  11. MATLAB中的小技巧
  12. linux ubantu最新版本,过去十年最佳的Ubuntu版本
  13. ABBYY软件PDF文本审阅操作之批阅文本
  14. 【利用Python进行数据分析——经验篇2】计算微博转发/评论/点赞h指数的Python代码
  15. C#实现上位机与PLC通信
  16. 深度学习头像定位头像分割
  17. MCU-LCD屏与RGB-LCD屏的区别?
  18. 乐观锁、悲观锁、分布式锁的概念及实现
  19. 吴英雷 php,2015年01月05日php就业班(第34期)(老888师)
  20. 保研边缘人的夏令营之旅~

热门文章

  1. 把Qos扯到排队论上去
  2. postgresql vacuum 与 transaction ID wraparound 总结
  3. tensorflow数据结构-MetaInfoDef
  4. MMP FileChannel RandomAccessFile总结
  5. Python基础第十六天:面向对象进阶
  6. Linux虚拟机创建
  7. VMware Workstation物理内存不足,无法使用配置的设置开启虚拟机。
  8. 二进制 八进制 十进制 十六进制的相互转换(精简总结)
  9. Camera-FOV
  10. Erasing and Winning UVA - 11491