zoukankan      html  css  js  c++  java
  • 《QT Creator快速入门》第十三章:QT多媒体应用

    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"。

      

      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文件的章节等的管理。

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

     

      可以使用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两个示例程序。

  • 相关阅读:
    C#发送邮件
    C# MD5加密
    html实现艺术字
    sql日期转换比较问题
    web 抓取
    NHibernate主要数据操作方法
    写日志
    备忘 sql分页
    自我介绍
    企业级应用和互联网应用的区别
  • 原文地址:https://www.cnblogs.com/milanleon/p/12935974.html
Copyright © 2011-2022 走看看