本文介绍的是使用QML进行视频的播放,可以直接编译为APK在android上运行。

QML中对多媒体的处理提供了很多方便的组件,对于播放音频、视频都很方便。这些多媒体组件属于Qt Multimedia 模块,在介绍视频的播放之前先简单了解一下Qt Multimedia模块。

一、Qt Multimedia 模块

Qt多媒体是必不可少的一个模块,处理多媒体内容提供了一组丰富的QML类型和C++类。它还提供了必要的接口访问的摄像头和无线功能。包括QT音频引擎提供3D定位音频播放和管理类型。

1、QML中的类型

Audio:用于播放音频

Camera:提供访问设想头的功能

MediaPlayer:提供了播放媒体的功能,其实就是比方的音频,可以和VideoOutput结合实现视频的播放

Radio:提供无线电广播的功能

video:提供了视频播放的方法,是结合了MediaPlayer 和VideoOutput,提供了一种简单的视频播放的方法

2、在C++中类

QAudioOutput、QCamera、QCameraImageCapture、QMediaPlayer、QRadioTuner、QVideoRendererControl

二、视频播放

QML提供了很方便的组件实现了多媒体的播放,所以对于播放视频也是很简单,下面介绍两种播放视频的方法

1、使用MediaPlay和VideoOutput实现视频的播放

(1)MediaPlayer介绍

MediaPlayer可以单独播放音频文件,也可以和VideoOutput结合共同完成视音视频的播放,MediaPlayer提供非常方便的处理音频的接口和属性

属性:

autoLoad ::  控制是否立即加载媒体资源,默认为true,如果设置为false 在开始播放之前不会加载媒体资源

autoPlay : 设置在启动之后是否立即进行播放,默认为false,如果设置为true时,自动把autoLoad设置为true

availability:只读属性,保存着当前播放器的可用性有四个取值:Available  当前可用    Busy  被其他的进程占用    Unavailable  当前不可用   ResourceMissing  缺少资源 稍后再时

bufferProgress:保存着当前缓冲区被占用的比值  0~1

error :保存错误状态  NoError  、ResourceError、FormatError、NetworkError、AccessDenied、ServiceMissing,也可以直接使用errorString 直接获取错误信息

hasAudio:媒体中是否有音频

hasVideo:媒体中是否有视频

loops:控制播放的循环次数,默认为1 设置为MediaPlayer.Infinite 可以实现无限循环

metaData.albumArtist:获取音频中包含的专辑作者

metaData.albumTitle:获取专辑名称

metaData.audioBitRate:获取音频的比特率

metaData.audioCodec:获取音频的编码

metaData.author:获取作者

metaData.averageLevel:获取音量的级别

metaData.category:获取音频的风格

metaData.channelCount:获取通道数

metaData.chapterNumber:获取章节数

metaData.comment :获取音频的描述

.....................................................

position:当前播放的位置

seekable:是否可以进行偏移

source:媒体的URL,播放的音频源

status:媒体的加载状态,取值参考帮助

volume:控制播放的音量,取值0~1

还有很多的属性可以获取音频中包含的哦信息,可以参考QT的帮助

提供的对外接口有

pause()

play()

seek(offset)

stop()

seek需要说一下,值当当seekable属性为true时,才可以进行seek,offset为毫秒。seek函数是个异步的操作,所以可能不会立即响应

信号

当发生错误的时候发出error信号,当被暂停的时候发出paused信号,当播放的状态发生改变的时候发出playbackstateChanged信号,当播放的时候发出playing成功时信号,当被停止时发出stopped信号

paused、playing、stopped信号我们可以用来判断暂停、播放、停止是否成功

(2)VideoOutput

VideoOutput支持原画面、拉伸、平均铺平等方式播放视频。

VideoOutput后端支持QVideoRendererControl 或QVideoWindowControl。当后端为QVideoWindowControl的时候视频渲染重叠到一个QtQuick的窗口上,由于重叠实现,所以有一下功能不能实现,例如:一些变换旋转操作、当有另一个QtQuickItem在这个窗口之上的时候。

提供的属性

autoOrientation:控制是否自动根据屏幕的方向匹配视频流的方向,默认为disabled

contentRect:::控制进行视频播放的坐标区域

fillMode:控制视频的填充模式

Stretch:视频进行缩放以适应窗口的大小

PreserveAspectFit:视频进行等比例的缩放,不出现裁剪

PreserveAspectCrop:视频均匀的缩放,必要的时候继续裁剪

source:视频流源,指定的时候注意:需在路径之前加file:///

import QtQuick 2.4

import QtQuick.Window 2.2

import QtMultimedia 5.4

import QtQuick.Controls 1.3

Window {

visible: true

width: 320

height: 480

property bool isPlay: true

MediaPlayer {

id: mediaplayer

source: "file:///I:/video.wmv"

autoPlay: true

volume: 0.5

}

VideoOutput {

anchors.fill: parent

source: mediaplayer

}

Image{

id:playImage

width: 64

height: 64

anchors.centerIn: parent

source: "qrc:///play.png"

visible: false

}

MouseArea

{

anchors.fill: parent

onClicked: {

if(isPlay == true)

{

mediaplayer.pause()

isPlay = false

playImage.visible = true

}

else

{

mediaplayer.play()

isPlay = true

playImage.visible = false

}

}

}

}

在指定source的数据源时,路径前面需要加上file:///,明确为文件路径

MediaPlayer实现了播放视频流中的音频,VideoOutput使用了MediaPlayer为资源继续播放视频,从而实现了音视频的同步

VideoOutput通常使用一个对象作为视频源,不能直接指定一个视频文件,通常是MediaPlayer或Camera

2、使用Video

使用video就更加简单,video直接就实现了音视频的播放

video提供的属性和方法和MediaPlayer的大致一样,可参考MediaPlayer的属性含义

import QtQuick 2.4

import QtQuick.Window 2.2

import QtMultimedia 5.4

import QtQuick.Controls 1.3

Window {

visible: true

width: 320

height: 480

property bool isPlay: true

Video{

id:video

anchors.fill: parent

autoPlay: true

source: "file:///I:/video.wmv"

}

Image{

id:playImage

width: 64

height: 64

anchors.centerIn: parent

source: "qrc:///play.png"

visible: false

}

MouseArea

{

anchors.fill: parent

onClicked: {

if(isPlay == true)

{

mediaplayer.pause()

isPlay = false

playImage.visible = true

}

else

{

mediaplayer.play()

isPlay = true

playImage.visible = false

}

}

}

}

运行效果图:

qt android播放器代码,Qt on android 播放视频的实现相关推荐

  1. python音乐播放器代码_pygame编写音乐播放器的实现代码示例

    1.准备工作 ide:pycharm python:3.7 三方包:pygame.pyinstaller.mutagen 几首mp3格式的歌 2.开始 2.1 设计说明 1.包含 上一首.下一首.暂停 ...

  2. python音乐播放器代码_python3.2 音乐播放器源码

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 submenu.add_command(label = "打开文件",command = self.add) menu.add_cas ...

  3. jQuery+html5音乐网站mp3播放器代码

    播放器演示 jQuery+html5音乐网站mp3播放器代码演示 播放器介绍 jQuery+html5音乐网站mp3播放器代码 1. 支持显示播放进度条: 2. 支持拖动播放功能: 3. 支持显示音量 ...

  4. html制作在线视频音乐播放器,用html5制作音乐播放器,这3款就足够了!

    用HTML5结合Jquery做一个简易版的音乐播放器 代码展示: 三生草 var sum = 1; function ssss(a) { var s = document.getElementById ...

  5. Android应用开发--MP3音乐播放器代码实现(一)

    Android应用开发--MP3音乐播放器代码实现(一) 需求1:将内存卡中的MP3音乐读取出来并显示到列表当中 1. 从数据库中查询所有音乐数据,保存到List集合当中,List当中存放的是Mp3I ...

  6. 使用Vitamio打造自己的Android万能播放器(7)——在线播放(下载视频)

    前言 本章将实现非常实用的功能--下载在线视频.涉及到多线程.线程更新UI等技术,还需思考产品的设计,如何将新加的功能更好的融入到现有的产品中,并不是简单的加一个界面就行了,欢迎大家交流产品设计和技术 ...

  7. [转载]使用Vitamio打造自己的Android万能播放器(7)——在线播放(下载视频)...

    前言 本章将实现非常实用的功能--下载在线视频.涉及到多线程.线程更新UI等技术,还需思考产品的设计,如何将新加的功能更好的融入到现有的产品中,并不是简单的加一个界面就行了,欢迎大家交流产品设计和技术 ...

  8. 使用Vitamio打造自己的Android万能播放器(6)——在线播放(播放列表)

    前言 新版本的VPlayer由设计转入开发阶段,预计开发周期为一个月,这也意味着新版本的Vitamio将随之发布,开发者们可以和本系列文章一样,先开发其他功能.本章内容为"在线视频播放列表& ...

  9. 使用Vitamio打造自己的Android万能播放器(5)——在线播放(播放优酷视频)

    前言 为了保证每周一篇的进度,又由于Vitamio新版本没有发布, 决定推迟本地播放的一些功能(截图.视频时间.尺寸等),跳过直接写在线播放部分的章节.从Vitamio的介绍可以看得出,其支持http ...

最新文章

  1. DeepMind训练AI玩足球,风骚走位比中国男足都强(狗头)
  2. JVM调优总结(四)-垃圾回收面临的问题
  3. python 爬虫是什么_“python爬虫“是什么呢?
  4. matlab玫瑰,网上收到的用matlab画玫瑰花的代码怎么不行啊,报告错误,求大神
  5. LeetCode 476. Number Complement
  6. git 如何撤销提交
  7. 使用 HTML5 webSocket API实现即时通讯的功能
  8. 在Markdown中插入图片及图注的方法
  9. 2021年中国图书出版行业经营现状及重点企业对比分析:凤凰传媒优势明显[图]
  10. Android 学习过程中遇到的知识点
  11. 网络服务器的配置与管理
  12. QQ空间内容同步php网站,同步 Sablog 博客日志到 Qzone
  13. 计算机专业定向选调,兄弟们,关于定向选调和找工作,JR们能不能给小弟一些建议...
  14. AD7606与STM32F103ZET6的串行通信
  15. ExtJS6图表简单demo(折线图,散点图,柱状图)
  16. php zip提示未安装包,请大神赐教:centos7安装zip扩展成功,但是打印phpinfo未加载成功...
  17. matlab多面函数拟合法拟合点gps水准数据 格式,拟合内插论文,关于沿海地区GPS水准模型构建相关参考文献资料-免费论文范文...
  18. CC2530接入OneNET-实现数据上传和命令下发
  19. 19年12月英语六级选词填空
  20. 如何让读者看完公众号文章后关注你?做好这几点

热门文章

  1. Qt高级编程之多线程处理
  2. 乐心健康php,在线刷乐心健康微信支付宝步数模板
  3. C/C++常用预编译指令介绍
  4. python里enumerate函数_python中的enumerate函数
  5. 跨域问题has been blocked by CORS policy: No Access-Control-Allow-Origin和 It does not have HTTP ok status
  6. 数据库备份 Mysql table '' doesn t exist
  7. 新建Android项目,会出现两个项目一个是自己创建的项目,另一个是“appcompat_v7”项目,这是怎么回事呢?该怎么解决呢?...
  8. 宏LONG_MAX和LLONG_MAX
  9. Android 跳转基础应用(联系人,日历)
  10. IDEA 教程之基础篇(四):IntelliJ IDEA 中高效地使用 Maven(图文并茂)