《QT Creator快速入门》第十三章:QT多媒体应用

摘要:
如果要播放视频的话可以使用Phonon多媒体框架。QtMultimedia具体使用示例可以参考《QtCreator快速入门》第13章中实例,也可以在Qt示例中查看,比如Mutilmedia分类下的AudioDevices、AudioOutput、AudioInput,还有一个频谱分析演示程序SpectrumAnalyzer。还可以使用QAbstractVideoSurface、QVideoSurface等类对视频进行处理,在Qt中有VideoGraphicsItem和VideoWidgetExample两个示例程序。媒体对象还有一个补充——MediaController类,它提供了对于给定媒体可选的控制功能,比如菜单和标题、DVD文件的章节等的管理。

1、使用QSound播放WAV音频

使用静态方法QApplication::beep()可以播放系统调整音量时候的声音,使用QSound可以在windows或linux下异步播放WAV文件、在mac下播放NSSound支持的音频文件,使用需要包含头文件<QSound>。

可以调用静态方法QSound::play("../sound.wav")来播放音频文件,如果需要停止播放的话可以构建QSound对象使用play()槽方法播放,使用stop()停止播放,还可以使用setLoops()来设置播放重复的次数。windows下如果设置了播放重复次数则stop()无法立即停止播放,而且对于新播放的声音会先停止前面的播放。

如果要播放其它格式的音频,或者需要对播放进行更多的控制可以使用Phonon多媒体框架。

2、使用QMove播放GIF动画

要播放动画还需要使用QLabel来显示这个动画,如下所示:

    QMovie *movie = new QMovie("../fire.gif");
    QLabel label;
    label.setMovie(movie);
    movie->start(); //开始播放动画
    movie->setPaused(true); //暂停播放
    movie->stop(); //停止播放
    movie->setSpeed(200); //设置播放速度:2x speed

QMovie有3个状态:QMovie::NotRunning未播放、QMovie::Paused暂停、QMovie::Running播放中,当状态改变的时候会发射stateChanged()信号,可以管理这个信号来改变播放、暂停等按钮的状态。

还可以调用QMovie的frameCount()获得动画总帧数,currentFrameNumber()获得当前帧号,currentImage()获取当前帧的一个副本,当播放到新的帧时会发射updated()信号。还可以使用jumpToFrame()来跳转到指定的帧,如果使用setCacheMode()设置了QMovie::CacheAll缓存所有帧(默认为QMovie::CacheNone不缓存任何帧)。

如果要播放视频的话可以使用Phonon多媒体框架。

3、使用QtMultimedia实现多媒体的底层控制

使用QtMultimedia可以进行音频的采集、回放、频谱分析、操作视频帧等,主要由以下8个类组成,比如QAudioFormat存储音频格式(采样率、声道数量等),QAudioDeviceInfo查询音频设备和功能,QAudioInput从音频设备获得音频输入数据(录音)、QAudioOutput向音频设备发送音频数据(播放声音),使用QtMultimedia需要在.pro项目文件下添加"QT+=multimedia"。

《QT Creator快速入门》第十三章:QT多媒体应用第1张

QtMultimedia具体使用示例可以参考《Qt Creator快速入门》第13章中实例,也可以在Qt示例中查看,比如Mutilmedia分类下的Audio Devices、Audio Output、Audio Input,还有一个频谱分析演示程序Spectrum Analyzer。

还可以使用QAbstractVideoSurface、QVideoSurface等类对视频进行处理,在Qt中有Video Graphics Item和Video Widget Example两个示例程序。

4、Phonon框架

使用Phonon框架可以播放常见的多媒体文件,还可以通过网络播放媒体流,使用它需要在项目文件.pro中添加"QT+=phonon"。Phonon其实并不属于Qt,发布软件的时候需要将Qt安装目录下plugins目录下phonon_backend目录与应用程序放置同一目录发布。

Phonon包含3个基本概念:媒体对象(Media Objects)、汇点(Sinks,也称节点)、路径(Paths)。媒体对象用来管理媒体源,如对音频文件的开始、暂停和停止的播放控制。汇点用来输出媒体,如将音频传送到声卡、在部件上渲染视频。路径用来连接媒体对象和汇点。MediaObject是媒体对象类,它接收媒体源(MediaSource类)提供的媒体数据,汇点通常是一个渲染设备,它的输入来自于媒体对象,一个音频汇点,比如AudioOutput,可以对音量进行控制、设置静音,一个视频汇点,比如VideoWidget,它可以在QWidget上渲染视频,并且可以改变亮度、色调、视频缩放等。

处理器位于媒体图上媒体对象和汇点之间的路径上,由Effect类表示,在渲染过程中插入一个处理器后就可以操纵媒体流。

媒体对象还有一个补充—— MediaController类,它提供了对于给定媒体可选的控制功能,比如菜单和标题、DVD文件的章节等的管理。

媒体对象、汇点、路径构成了一张媒体图:

《QT Creator快速入门》第十三章:QT多媒体应用第2张

可以使用Phonon::createPlayer()很方便的创建一个音频流媒体图,它返回一个媒体对象,调用媒体对象的play()方法就可以播放指定的本地或网络音频文件:

    Phonon::MediaObject * music = Phonon::createPlayer(Phonon::MusicCategory, Phonon::MediaSource("../mysong.mp3"));
    //Phonon::MediaObject * music = Phonon::createPlayer(Phonon::MusicCategory,
    //Phonon::MediaSource(QUrl("http://www.yelix.com/music/mysong.mp3"))); //播放网络文件
    music->setParent(this);
    music->play();

我们也可以自己手动创建音频流媒体图,即自己创建媒体对象和节点,然后创建路径来连接媒体对象和节点,如下所示。手动创建媒体图可以更灵活的设置媒体的播放,比如可以使用AudioOutput控制音量大小和静音,Phonon还使用AudioOutput提供了一个音量控制部件VolumeSlider和播放进度滑块部件SeekSlider,他们都是QWidget的子类。

    Phonon::MediaObject* mediaObject = new Phonon::MediaObject(this); //创建媒体对象
    mediaObject->setCurrentSource(Phonon::MediaSource("../mysong.mp3")); //设置媒体源
    Phonon::AudioOutput* audioOutput = new Phonon::AudioOutput(Phonon::MusicCategory, this); //创建音频输出节点
    Phonon::Path path = Phonon::createPath(mediaObject, audioOutput); //连接媒体对象和节点
    mediaObject->play();

类似上面的音频播放,播放视频的话可以使用Phonon::VideoPlayer()来直接创建视频媒体图来使用,也可以手动创建媒体图以实现视频播放的更多控制,比如通过VideoWidget改变亮度、宽高比、全屏显示、获取屏幕快照等。关于视频媒体图的创建和使用可以参考《Qt Creator快速入门》第14章中实例,Qt中也提供了Media Player和Music Player两个示例程序。

免责声明:文章转载自《《QT Creator快速入门》第十三章:QT多媒体应用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇commons-pool2 实现 sftp 连接池关于微信JS-SDK 分享接口的两个报错记录下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MP3文件结构解析(超详细)

转自:http://blog.csdn.net/u010650845/article/details/53520426 MP3文件结构解析(超详细)1. MP3文件结构解析1.1. 概述 1.1.1. 音频相关术语 ID3: 一般位于一个mp3文件的开头或末尾的若干字节内,记录该mp3文件的歌手、标题、专辑名称、年代、风格等信息,ID3分位两个版本,V1版...

利用纯java捕获和播放音频

参考: 1.http://www.cjsdn.net/doc/jdk60/javax/sound/sampled/package-summary.html 2.http://www.cjsdn.net/doc/jdk60/javax/sound/sampled/package-tree.html 软件包 javax.sound.sampled 提供用于捕获...

音频数字信号详解(2017年11月18日更新)

音频数字信号详解 整理者:赤勇玄心行天道 QQ号:280604597 微信号:qq280604597 QQ群:511046632 博客:www.cnblogs.com/gaoyaguo 大家有什么不明白的地方,或者想要详细了解的地方可以联系我,我会认真回复的! 你可以随意转载,无需注明出处! 写文档实属不易,我希望大家能支持我、捐助我,金额...

ffmpeg文档16-音频编码器

16 音频编码器 介绍当前可用的音频编码器 aac AAC(Advanced Audio Coding )编码器 当前原生(内置)编码器还处于实验阶段,而且只能支持AAC-LC(低复杂度AAC)。要使用这个编码器,必须选择 ‘experimental’或者'lower' 因为当前还处于实验期,所以很多意外可能发生。如果需要一个更稳定的AAC编码器,参考l...

干货|浅谈iOS端短视频SDK技术实现

短视频SDK主要包含“视频录制”和“视频编辑”这两个核心功能。 视频录制包括:视频采集、美颜、滤镜、摄像头切换、视音频采集参数设置等功能; 视频编辑包括:视频导入、合成、特效、滤镜、字幕、贴纸、音乐、播放、导出等功能。 一、短视频SDK框架 如上图所示,短视频SDK的技术框架分为三个层级,分别为核心处理层、业务逻辑层和业务接口层: 核心处理层:负责...

11.3.1 将MediaRecorder用于视频

    为了将MediaRecorder用于视频捕获,必须采用与音频捕获相同的步骤,同时加上一些视频特定的步骤。此外,MediaRecorder是一个状态机,因此必须遵循从实例化到录制的特定步骤序列。     首先将实例化MediaRecorder,然后依次进行其他的步骤。 1 MediaRecorder recorder=new Medi...