没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
20页
本章对嵌入式Linux 平台下的多媒体编程进行了全面地介绍。其中包括对Phonon多媒体架构的剖析,以及使用Phonon 多媒体框架进行多媒体开发的模式,包括:音频播放、视频播放和后端支持。最后,通过一款视频播放器的开发实例,综合地对Qt 多媒体开发框架的使用模式进行完整地介绍,加深读者对Qt 多媒体框架的认识,提高开发者对Qt 多媒体框架应用的灵活性。【作者保留所有权】
资源推荐
资源详情
资源评论
Qt 快速开发 foolstudio@yahoo.com.cn 保留所有权
第1页 共20页
第8章 多媒体开发
本章对嵌入式 Linux 平台下的多媒体编程进行了全面地介绍。其中包括对 Phonon
多媒体架构的剖析,以及使用 Phonon 多媒体框架进行多媒体开发的模式,包括:音频
播放、视频播放和后端支持。最后,通过一款视频播放器的开发实例,综合地对 Qt 多媒
体开发框架的使用模式进行完整地介绍,加深读者对 Qt 多媒体框架的认识,提高开发者
对 Qt 多媒体框架应用的灵活性。
8.1 Qt 多媒体开发概述
在众多的电子消费产品中,媒体播放器始终盘居首位。MP3 播放器、支持多个视频格
式的液晶电视、音乐手机等。所以,在嵌入式 Linux 平台进行多媒体开发总是一件具有前景
和成就感的工作。
Qt 提供了丰富的多媒体开发库,其中 QtMultimedia 模块提供了较为底层的多媒体功能,
而 Phonon 多媒体框架的功能则较为高级。图 8-1 所示的就是在 Linux 平台使用 Phonon 多
媒体框架开发的一款媒体播放器实例图。
图 8-1 运行于 Linux 平台的媒体播放器
8.2 QtMultimedia 模块简介
前一小节已经提到,QtMultimedia 模块提供了一些底层的多媒体功能,例如:按照指
定的音频格式来录制或播放原始音频文件。表 8-1 是 QtMultimedia 模块的主要类及说明。
表 8-1 QtMultimedia 模块的主要类及说明
类 说明
QAbstractVideoBuffer
视频数据的抽象
QAbstractVideoSurface
视频展示表面的基类
QVideoFrame
代表视频数据的一帧
QVideoSurfaceFormat
指定一个视频展示表面的流格式
QAudioDeviceInfo
查询音频设备和其功能特性的接口
QAudioFormat
用于存储音频参数信息
第 8 章 多媒体开发
2
表 8-1 QtMultimedia 模块的主要类及说明
QAudioInput
从一个音频输入设备接收音频数据的接口
QAudioOutput
发送音频数据到一个音频输出设备的接口
由于本书主要围绕快速开发的主题,因此不对 QtMultimedia 模块进行过多的介绍。
8.3 Phonon 多媒体框架
8.3.1 Phonon 简介
Phonon 是一款跨平台的多媒体框架,其可以使音频/视频内容在 Qt 应用程序中使用。
Phonon 原本是 KDE 4 的多媒体开源项目,其项目的官方网址是 http://phonon.kde.org/。图
8-2 是 Phonon 项目的 Logo。
图 8-2 Phonon 项目 Logo
8.3.2 Phonon 架构
Phonon 架构有三个基本的概念:媒体对象、槽和路径。媒体对象管理一个媒体源,例
如:一个视频文件;其提供了简单的播放控制,例如:启动、停止和暂停播放。槽负责输出
Phonon 架构中的媒体,例如:在可视组件中显示视频、发送音频到声卡。路径用于连接
Phonon 对象,例如:媒体对象和槽。多个路径就形成了图,在 Phonon 中成为媒体图。如
图 8-3 所示的就是由媒体对象、音频槽和视频槽等节点以及两条路径所形成的 Phonon 媒
体图(而且应该是有向图)。
图 8-3 Phonon 媒体图示意图
1. 媒体对象
每一个媒体对象(MediaObject)都是一个 MediaObject 类实例,其提供了播放的基本
功能。应用程序可以通过媒体对象来启动、暂停和停止一个媒体流的播放。开发者可以将媒
体对象视同一个简单的媒体播放器。
媒体对象所需的媒体数据由媒体源提供。媒体源是一个另外的对象(MediaSource 类
的实例),其并不是媒体图的一部分。媒体源提供原始数据给媒体对象,这些数据可以从文
件或网络流中读取。而且,这些源内容要能够被媒体对象所识别,如同媒体播放器只能播放
那些可以被识别类型的媒体。
2. 槽
槽(Sink)是一个可以从图中输出媒体的节点(输出终节点),其通常是一个承载设备,
例如:声卡(承载音频)和显卡(渲染视频)。槽的输入来源于一个媒体对象,即使它可能
已经通过其他节点的方式进行处理。
当媒体对象控制播放的时候,槽也具备对媒体维护的基本控制。例如,通过音频槽,开
第 8 章
3
3
发者可以控制音量或静音,这里音频槽充当了一个虚拟音频设备的角色;通过视频槽,开发
者可以在一个可视组件中渲染视频,并且改变视频的亮度、色调和缩放比例。
3. 处理器
Phonon 不允许直接操纵媒体流,也就是说,开发者不可以通过编程的方式改变由媒体
对象提供的媒体流的字节内容。但 Phonon 提供了通过其他节点来帮助操作媒体流的事情,
这类节点被称为处理器(Processor)。处理器往往被置于图中、媒体对象与槽之间的某个路
径上。在 Phonon 框架中,处理器是效果类(Effect)。
效果可能会影响如何控制媒体流(在 Phonon 中是音频流)进行操作,例如:采用不同
的声音效果所输出的音频流是不同的。效果可以在任何时点被配置。
4. 路径
路径(Path)用于描述媒体节点之间的连接(从哪里来到哪里去)。多媒体数据流通过
这些路径进行“旅行”。
5. 图
媒体节点加上连接媒体节点的路径,就构成了图(Graph)。由于路径是有向的,所以
Phonon 中的图是有向图。如图 8-4 所示。
图 8-4 Phonon 媒体图示意图
8.3.3 Phonon 模块
通过前一节对 Phonon 架构的介绍,相信读者已经对 Phonon 模块的功能有一个基本的
了解。作者根据自己的理解思路,刻意地将 Phonon 模块中的类划分为三个部分:图相关类、
可视组件和其他类。
1. Phonon 图相关类
表 8-2 是 Phonon 模块中与图相关的类及说明。与图相关的意指那些组成图的元素:
媒体节点(媒体对象、槽和效果)和路径,其中媒体节点的直接或间接父类是 MediaNode。
表 8-2 图相关类及说明
类 说明
Phonon::MediaObject
媒体播放接口
Phonon::MediaNode
表示媒体播放图中的各个节点
Phonon::AudioOutput
发送数据到音频输出设备的接口
Phonon::VideoWidget
用于显示视频的显示组件
Phonon::Path
用于描述媒体节点之间的连接
Phonon::Effect
用于转换音频流(音频效果)
2. 可视组件
表 8-3 是 Phonon 模块中的可视组件类及说明。这些可视组件主要用来进行显示视频
内容或进行播放控制(播放进度、音量控制等),这些可视组件的直接或间接父类是 QWidget。
第 8 章 多媒体开发
4
表 8-3 显示组件类及说明
类 说明
Phonon::VideoWidget
用于显示视频的显示组件
Phonon::SeekSlider
用于定位媒体流位置的滑块组件
Phonon::VolumeSlider
用于控制输出音量的滑块组件
Phonon::VideoPlayer
用于执行视频播放的组件
Phonon::EffectWidget
用于控制音频效果参数的组件
需要注意的是,表 8-3 中的 VideoWidget 类既是显示组件子类也是视频槽(表 8-2),
所以读者可以将 VideoWidget 类实例理解为承载视频内容的特定可视组件。
3. 辅助类
表 8-4 是 Phonon 模块中既不与图相关、也不是可视组件的其他类及说明。包括:媒
体源、媒体控制器等衔接或辅助媒体功能实现的类;还有一些工具类,例如:后端性能查询
接口和 Phonon 对象信息接口。
表 8-4 衔接类及说明
类 说明
Phonon::MediaSource
代表媒体对象的多媒体数据
Phonon::BackendCapabilities(命名空间) 提供了描述多媒体后端性能的函数
Phonon::MediaController
媒体文件/设备的可选特性控制器
Phonon::ObjectDescription
Phonon 对象的信息接口
4. Phonon 模块的引用
为了引用 Phonon 模块的功能,在 Qt 开发环境中需要进行两点设置。
(1)在项目文件中设置链接 Phonon 模块。
文件名:<工程名>.pro
QT += … phonon
(2)包含 Phonon 模块的头文件或者只包含所使用到的类。
文件名:头文件或源文件
#include <Phonon> 或者
#include <Phonon/MediaObject>
#include <Phonon/VideoWidget>
#include <Phonon/Effect>
……
使用第一种包含方式相当于包含模块中所有的类的头文件,相比只包含所使用到的类的
方式,编译器可能需要额外解析那些在代码中并没有用到的类的头文件,编译效率会有所降
低。
8.3.4 媒体播放
对于播放功能,Phonon 提供了较为丰富的方式。作者按照自己的理解,将 Phonon 框
架提供的播放功能分为三种层次。音频播放(无需视频显示)、简单视频播放(只是播放不
进行控制)和常规视频播放(包括播放控制)。
1. 音频播放
音频播放无需视频承载组件,只需要指定音频媒体来源即可。图 8-5 是播放背景音乐
的实例界面。
剩余19页未读,继续阅读
foo1st
- 粉丝: 83
- 资源: 24
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- Docker在Ubuntu16.04上安装和部署Apache Storm
- test_kong.zip
- springboot权限验证学习-下
- SeetaFace6人脸质量评估C++代码实现Demo
- OCAuxiliaryTools
- 制药公司QC顶岗实习专题报告
- Rust 全面指南:从基础到高级,一网打尽 Rust 的编程知识
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页