播放内存中的音乐QFileread(。musicNevada。mp3);if(!read。open(QIODevice::ReadOnly)){qDebug()文件打开失败,请重试;}下面用的对象,必须动态申请,不然构造函数执行完毕,局部变量内存会被释放QByteArraydatanewQByteArray(read。readAll());read。close();QBufferbuffernewQBuffer(data,this);if(!bufferopen(QIODevice::ReadWrite)){qDebug()}qDebug()QMediaPlayerplayernewQMediaPlayer(this);playersetMedia(QMediaContent(),buffer);playerplay();播放内存中的视频QMediaPlayerplayernewQMediaPlayer(this);playersetMedia(QUrl(。musicMMD。mp4));playerplay();QVideoWidgetvideowidgetnewQVideoWidget(this);playersetVideoOutput(videowidget); vs中如果提示编译器堆空间不足,则打开vcxproj工程文件,在PropertyGroup中添加如下代码PropertyGroupLabelGlobals!资源文件加载,防止编译器堆空间不足PreferredToolArchitecturex64PreferredToolArchitecturePropertyGroup 【领QT开发教程学习资料,点击下方链接免费领取,先码住不迷路】 点击领取链接音视频播放播放音频 在Qt中,要想使计算机发出响声,最简单的方法是调用QApplication::beep()静态函数。而QtMultimedia模块中提供了多个类来实现不同层次的音频输入,输出和处理。QSound QSound类提供了播放。wav声音文件的方法。 Qt提供了GUI应用程序中最常用的音频操作:异步播放声音文件。使用静态play()函数最容易做到这一点:QSound::play(mysoundsbells。wav); 或者,首先从声音文件创建一个QSound对象,然后调用play()槽:QSoundbells(mysoundsbells。wav);bells。play(); 在这两种情况下,文件可能是本地文件或资源中的文件。 一旦创建了QSound对象,就可以查询它的fileName()和loops()总数(即声音播放的次数)。可以使用setLoops()函数更改重复次数。播放声音时,loopsRemaining()函数返回剩余的重复次数。使用isFinished()函数来确定声音是否播放完毕。 使用QSound对象播放的声音可能会比静态play()函数使用更多的内存,但它也可能播放得更快(取决于底层平台的音频设施)。 如果您需要更好地控制播放声音,请考虑QSoundEffect或QAudioOutput类。PublicFunctionsQSound(constQStringfilename,QObjectparentnullptr)virtualQSound()QStringfileName()constboolisFinished()constintloops()constintloopsRemaining()constvoidsetLoops(intnumber)Slotsvoidplay()voidstop()StaticPublicMembersvoidplay(constQStringfilename)QSoundEffect QSoundEffect类提供了一种播放低延迟声音效果的方法。 这个类允许你以较低的延迟方式播放未压缩的音频文件(通常是WAV文件),并且适用于反馈类型的声音,以响应用户的动作(例如虚拟键盘声音,弹出对话框的正面或负面反馈,或游戏声音)。如果低延迟不重要,可以考虑使用QMediaPlayer类,因为它支持更广泛的媒体格式,并且资源消耗更少。 看个例子:QSoundEeffect。setSource(QUrl::fromLocalFile(F:MyCodeQtObjectCodeQtCoursesoundeffectvideocall。wav));effect。setLoopCount(QSoundEffect::Infinite);effect。setVolume(0。8f);effect。play(); 通常应该重用音效,这样可以提前完成所有解析和准备工作,并且只在必要时触发。这有助于降低延迟音频播放。classMyGame{public:MyGame():mvideoCall(this){mvideoCall。setSource(QUrl::fromLocalFile(videocall。wav));mvideoCall。setVolume(0。25f);Setupclickhandlingetc。connect(clickSource,QPushButton::clicked,mvideoCall,QSoundEffect::play);}private:QSoundEffectmvideoC} 由于QSoundEffect需要更多的资源来实现较低的延迟播放,平台可能会限制同时播放声音效果的数量。 【领QT开发教程学习资料,点击下方链接免费领取,先码住不迷路】 点击领取链接PublicFunctions设置设置源(wav文件路径)voidsetSource(constQUrlurl)设置循环次数voidsetLoopCount(intloopCount)设置静音voidsetMuted(boolmuted)设置音量01之间voidsetVolume(qrealvolume)判断音效是否加载完毕boolisLoaded()const是否是静音boolisMuted()const是否正在播放boolisPlaying()constSlotsvoidplay()播放voidstop()停止SignalsvoidcategoryChanged()voidloadedChanged()voidloopCountChanged()voidloopsRemainingChanged()voidmutedChanged()voidplayingChanged()voidsourceChanged()voidstatusChanged()voidvolumeChanged()枚举QSoundEffect::Status 枚举 描述 QSoundEffect::Null 未设置源或源为空。 QSoundEffect::Loading SoundEffect正在尝试加载源。 QSoundEffect::Ready 源已加载并准备好播放。 QSoundEffect::Error 运行过程中出现错误,例如加载源失败。QMediaPlayer QMediaPlayer类是一个高级媒体播放类。它可以用来播放歌曲、电影和网络广播等内容。要播放的内容被指定为QMediaContent对象,可以将其视为附加了附加信息的主要或规范URL。当提供QMediaContent时,可以开始播放。QMediaPplayer。setMedia(QUrl::fromLocalFile(F:MyCodeQtObjectCodeQtCoursesoundeffectThatGirl。mp3));player。setVolume(50);player。play(); QVideoWidget可以与QMediaPlayer一起用于视频渲染,QMediaPlaylist用于访问播放列表功能。QVideoWwid。show();QMediaPlaylistplayLplayList。addMedia(QUrl::fromLocalFile(F:MyCodeQtObjectCodeQtCoursesoundeffectThatGirl。mp3));playList。addMedia(QUrl::fromLocalFile(F:MyCodeQtObjectCodeQtCoursesoundeffect干坤坤。mp4));QMediaPplayer。setPlaylist(playList);player。setMedia(QUrl::fromLocalFile(F:MyCodeQtObjectCodeQtCoursesoundeffectThatGirl。mp3));player。setVolume(50);playList。next();player。setVideoOutput(wid);player。play();PublicFunctions该值是当前媒体的总播放时间,以毫秒为单位。该值可能在QMediaPlayer对象的生命周期中发生变化,并且可能在初始回放开始时不可用,请连接到durationChanged()信号来接收状态通知。qint64duration()const将QVideoWidget视频输出附加到媒体播放器。voidsetVideoOutput(QVideoWidgetoutput)voidsetVideoOutput(QGraphicsVideoItemoutput)voidsetVideoOutput(QAbstractVideoSurfacesurface)PublicSlots暂停播放当前源voidpause()开始或恢复播放当前源voidplay()设置当前媒体源。使用mediaStatusChanged()和error()信号,以便在加载媒体和加载过程中发生错误时得到通知voidsetMedia(constQMediaContentmedia,QIODevicestreamnullptr)设置静音voidsetMuted(boolmuted)设置倍速播放voidsetPlaybackRate(qrealrate)设置播放列表voidsetPlaylist(QMediaPlaylistplaylist)设置播放位置,以媒体开始后的毫秒数为单位。位置的周期性变化将用信号positionChanged()表示,更新间隔可以用QMediaObject的方法setNotifyInterval()设置。voidsetPosition(qint64position)此属性保存当前播放音量。播放音量是线性缩放的,从0(静音)到100(全音量)。默认为100voidsetVolume(intvolume)停止播放,并将播放位置重置到开始voidstop()Signals表示当前播放内容已更改为media。voidcurrentMediaChanged(constQMediaContentmedia)表示内容的持续时间已更改为持续时间,以毫秒表示。voiddurationChanged(qint64duration)产生了错误voiderror(QMediaPlayer::Errorerror)表示媒体来源已转变为media。voidmediaChanged(constQMediaContentmedia)表示当前媒体的状态已经改变voidmediaStatusChanged(QMediaPlayer::MediaStatusstatus)静音状态改变voidmutedChanged(boolmuted)播放速率改变voidplaybackRateChanged(qrealrate)播放位置改变voidpositionChanged(qint64position)表示播放器对象的状态已经改变。voidstateChanged(QMediaPlayer::Statestate)音量改变voidvolumeChanged(intvolume)枚举 (enumQMediaPlayer::Error)媒体播放器产生的具体错误。 枚举 描述 MediaPlayer::NoError 没有错误发生 QMediaPlayer::ResourceError 无法解析媒体源 QMediaPlayer::FormatError 媒体资源的格式不受(完全)支持。重新播放是可能的,但没有音频或视频组件。 QMediaPlayer::NetworkError 网络错误 QMediaPlayer::AccessDeniedError 没有播放媒体资源的适当权限。 QMediaPlayer::ServiceMissingError 找不到有效的播放服务,无法继续播放。 (enumQMediaPlayer::Flag)播放标志。 枚举 描述 QMediaPlayer::LowLatency 该播放器预计将用于简单的音频格式,播放没有明显的延迟。这种回放服务可以用于蜂鸣声、铃声等。 QMediaPlayer::StreamPlayback 该播放器预计将播放基于QIODevice的流。如果传递给QMediaPlayer构造器,将选择支持流回放的服务。 QMediaPlayer::VideoSurface 期望播放器能够呈现为QAbstractVideoSurface输出。 (enumQMediaPlayer::MediaStatus)定义媒体播放器当前媒体的状态。 枚举 描述 QMediaPlayer::UnknownMediaStatus 无法确定媒体的状态。 QMediaPlayer::NoMedia 没有当前的媒体。播放器处于停止状态。 QMediaPlayer::LoadingMedia 当前媒体正在加载中。播放器可能处于任何状态。 QMediaPlayer::LoadedMedia 已加载当前媒体。播放器处于停止状态。 QMediaPlayer::StalledMedia 由于缓冲不足或其他一些临时中断,当前媒体的播放已停止。播放器处于PlayingState或PausedState QMediaPlayer::BufferingMedia 播放器正在缓冲数据,但缓冲了足够的数据以供播放。播放器处于PlayingState或PausedState。 QMediaPlayer::BufferedMedia 播放器已经完全缓冲了当前的媒体。播放器处于PlayingState或PausedState。 QMediaPlayer::EndOfMedia 播放已经结束。播放器处于停止状态。 QMediaPlayer::InvalidMedia 当前媒体无法播放。播放器处于停止状态。 (enumQMediaPlayer::State)媒体播放器的当前状态。 枚举 描述 QMediaPlayer::StoppedState 播放停止状态 QMediaPlayer::PlayingState 播放进行状态 QMediaPlayer::PausedState 播放暂停状态QMediaPlaylist QMediaPlaylist类提供了要播放的媒体内容列表。 QMediaPlaylist旨在与其他媒体对象一起使用,如QMediaPlayer。 QMediaPlaylist允许访问服务固有的播放列表功能(如果可用的话),否则它提供本地内存播放列表实现。playlistnewQMediaPplaylistaddMedia(QUrl(http:example。commovie1。mp4));playlistaddMedia(QUrl(http:example。commovie2。mp4));playlistaddMedia(QUrl(http:example。commovie3。mp4));playlistsetCurrentIndex(1);playernewQMediaPplayersetPlaylist(playlist);videoWidgetnewQVideoWplayersetVideoOutput(videoWidget);videoWidgetshow();playerplay(); 根据播放列表源代码的实现,大多数播放列表更改操作可以是异步的。 【领QT开发教程学习资料,点击下方链接免费领取,先码住不迷路】 点击领取链接PublicFunctions构造与析构QMediaPlaylist(QObjectparentnullptr)virtualQMediaPlaylist()添加移除清空媒体booladdMedia(constQMediaContentcontent)booladdMedia(constQListQMediaContentitems)boolinsertMedia(intpos,constQMediaContentcontent)boolinsertMedia(intpos,constQListQMediaContentitems)boolremoveMedia(intpos)boolremoveMedia(intstart,intend)boolclear()保存加载播放列表boolsave(constQUrllocation,constcharformatnullptr)boolsave(QIODevicedevice,constcharformat)voidload(constQNetworkRequestrequest,constcharformatnullptr)voidload(constQUrllocation,constcharformatnullptr)voidload(QIODevicedevice,constcharformatnullptr)获取播放内容intcurrentIndex()constQMediaContentcurrentMedia()constQMediaContentmedia(intindex)constintnextIndex(intsteps1)constintpreviousIndex(intsteps1)constintmediaCount()const操作播放列表boolmoveMedia(intfrom,intto)voidsetPlaybackMode(QMediaPlaylist::PlaybackModemode)其他QMediaPlaylist::Errorerror()constQStringerrorString()constboolisEmpty()constboolisReadOnly()constslotsvoidnext()voidprevious()voidsetCurrentIndex(intplaylistPosition)voidshuffle()signalsvoidcurrentIndexChanged(intposition)voidcurrentMediaChanged(constQMediaContentcontent)voidloadFailed()voidloaded()voidmediaAboutToBeInserted(intstart,intend)voidmediaAboutToBeRemoved(intstart,intend)voidmediaChanged(intstart,intend)voidmediaInserted(intstart,intend)voidmediaRemoved(intstart,intend)voidplaybackModeChanged(QMediaPlaylist::PlaybackModemode)枚举 (enumQMediaPlaylist::Error)QMediaPlaylist错误码。 枚举 描述 QMediaPlaylist::NoError 没有错误 QMediaPlaylist::FormatError 格式错误 QMediaPlaylist::FormatNotSupportedError 格式不支持 QMediaPlaylist::NetworkError 网络错误 QMediaPlaylist::AccessDeniedError 访问错误(拒绝访问) (enumQMediaPlaylist::PlaybackMode)描述了播放列表中的播放顺序。 枚举 描述 QMediaPlaylist::CurrentItemOnce 单曲播放一次 QMediaPlaylist::CurrentItemInLoop 单曲循环 QMediaPlaylist::Sequential 顺序播放(列表播放完结束) QMediaPlaylist::Loop 列表循环(列表播放完,从头开始继续播放) QMediaPlaylist::Random 随机播放QMediaContent QMediaContent类提供对与媒体内容相关的资源的访问。 QMediaContent在多媒体框架内用作媒体内容的逻辑句柄。一个QMediaContent对象包含一个QNetworkRequest,它提供了内容的URL。 非空QMediaContent将始终具有对通过request()方法可用的内容的引用。 另外,QMediaContent可以表示播放列表,并包含指向有效QMediaPlaylist对象的指针。在这种情况下URL是可选的,可以是空的,也可以指向播放列表的URL。PublicFunctionsQMediaContent(QMediaPlaylistplaylist,constQUrlcontentUrlQUrl(),booltakeOwnershipfalse)QMediaContent(constQMediaContentother)QMediaContent(constQNetworkRequestrequest)QMediaContent(constQUrlurl)QMediaContent()QMediaContentoperator(constQMediaContentother)QMediaContent()boolisNull()constQMediaPlaylistplaylist()constQNetworkRequestrequest()constbooloperator!(constQMediaContentother)constbooloperator(constQMediaContentother)const视频播放QMediaPlayer QMediaPlayer类可用来播放视频,只不过需要搭配专门的视频显示控件来使用。针对视频播放的函数voidsetVideoOutput(QVideoWidgetoutput)voidsetVideoOutput(QGraphicsVideoItemoutput)当前媒体的视频是否可用,如果可用,可以使用QVideoWidget类来查看视频。boolisVideoAvailable()constQVideoWidget需包含模块multimediawidgets QVideoWidget类提供了一个小部件,用于呈现由媒体对象生成的视频。 将QVideoWidget附加到QMediaObject允许它显示该媒体对象的视频或图像输出。QVideoWidget通过在其构造函数中传递指向QMediaObject的指针附加到媒体对象,并通过销毁QVideoWidget来分离。playernewQMediaPplaylistnewQMediaPlaylist(player);playlistaddMedia(QUrl(http:example。commyclip1。mp4));playlistaddMedia(QUrl(http:example。commyclip2。mp4));videoWidgetnewQVideoWplayersetVideoOutput(videoWidget);videoWidgetshow();playlistsetCurrentIndex(1);playerplay(); 注意:一次只能将一个显示输出附加到媒体对象。PublicFunctionsQVideoWidget(QWidgetparentnullptr)virtualQVideoWidget()Qt::AspectRatioModeaspectRatioMode()constintbrightness()const亮度intcontrast()const对比度inthue()const色调boolisFullScreen()const是否全屏intsaturation()const饱和度Slots设置视频缩放时,宽度和高度的变化模式voidsetAspectRatioMode(Qt::AspectRatioModemode)调整显示视频的亮度。有效亮度值范围在100到100之间,默认值为0。voidsetBrightness(intbrightness)调整显示的视频的对比度。有效对比度值范围在100到100之间,默认值为0。voidsetContrast(intcontrast)调整显示视频的色调。有效的色调值范围在100到100之间,默认值为0。voidsetHue(inthue)调整显示视频的饱和度。有效的饱和度值范围在100到100之间,默认值是0。voidsetSaturation(intsaturation)设置窗口全屏显示voidsetFullScreen(boolfullScreen)Signals亮度改变voidbrightnessChanged(intbrightness)对比度改变voidcontrastChanged(intcontrast)是否全屏状态改变voidfullScreenChanged(boolfullScreen)饱和度改变voidsaturationChanged(intsaturation)色调改变voidhueChanged(inthue) https:www。cnblogs。comlxuechaop12677357。html摄像机QCameraInfo QCameraInfo类提供有关相机设备的一般信息。 QCameraInfo允许您查询系统上当前可用的相机设备。 静态函数defaultCamera()和availableCameras()为您提供所有可用相机的列表。 此示例打印所有可用相机的名称:constQListQCameraInfocamerasQCameraInfo::availableCameras();for(constQCameraInfocameraInfo:cameras)qDebug()cameraInfo。deviceName(); 一个QCameraInfo可以用来构造一个QCamera。下面的例子实例化所有可用相机设备中第一个相机设备QCamera:constQListQCameraInfocamerasQCameraInfo::availableCameras();cameranewQCamera(cameras。first()); 你也可以使用QCameraInfo来获得一个相机设备的一般信息,例如描述,在系统上的物理位置,或相机传感器的方向。QCameramyCQCameraInfocameraInfo(myCamera);if(cameraInfo。position()QCamera::FrontFace)qDebug()摄像头位于硬件系统的正面。;elseif(cameraInfo。position()QCamera::BackFace)qDebug()摄像头位于硬件系统的背面。;qDebug()相机传感器方向是cameraInfo。orientation()度。;QCamera QCamera类为系统摄像机设备提供接口。 QCamera可以与QCameraViewfinder一起使用,用于取景器显示,QMediaRecorder用于视频录制,QCameraImageCapture用于图像拍摄。 你可以使用QCameraInfo列出可用的相机并选择使用哪一个。PublicFunctions设置捕获模式QCamera::CaptureModescaptureMode()constvoidsetCaptureMode(QCamera::CaptureModesmode)设置取景器voidsetViewfinder(QVideoWidgetviewfinder)voidsetViewfinder(QGraphicsVideoItemviewfinder)枚举QCamera::CaptureMode 捕获模式 枚举 描述 QCamera::CaptureViewfinder 取景器模式,只是简单的显示 QCamera::CaptureStillImage 帧捕获模式,比如:拍照 QCamera::CaptureVideo 视频捕获模式,比如:录制视频