CQt开发音视频播放
播放内存中的音乐QFileread(。musicNevada。mp3);if(!read。open(QIODevice::ReadOnly)){qDebug()文件打开失败,请重试;}下面用的对象,必须动态申请,不然构造函数执行完毕,局部变量内存会被释放QByteArraydatanewQByteArray(read。readAll());read。close();QBufferbuffernewQBuffer(data,this);if(!bufferopen(QIODevice::ReadWrite)){qDebug()buffererror;}qDebug()data;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类,因为它支持更广泛的媒体格式,并且资源消耗更少。
看个例子:QSoundEffecteffect;effect。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:QSoundEffectmvideoCall;}
由于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时,可以开始播放。QMediaPlayerplayer;player。setMedia(QUrl::fromLocalFile(F:MyCodeQtObjectCodeQtCoursesoundeffectThatGirl。mp3));player。setVolume(50);player。play();
QVideoWidget可以与QMediaPlayer一起用于视频渲染,QMediaPlaylist用于访问播放列表功能。QVideoWidgetwid;wid。show();QMediaPlaylistplayList;playList。addMedia(QUrl::fromLocalFile(F:MyCodeQtObjectCodeQtCoursesoundeffectThatGirl。mp3));playList。addMedia(QUrl::fromLocalFile(F:MyCodeQtObjectCodeQtCoursesoundeffect干坤坤。mp4));QMediaPlayerplayer;player。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允许访问服务固有的播放列表功能(如果可用的话),否则它提供本地内存播放列表实现。playlistnewQMediaPlaylist;playlistaddMedia(QUrl(http:example。commovie1。mp4));playlistaddMedia(QUrl(http:example。commovie2。mp4));playlistaddMedia(QUrl(http:example。commovie3。mp4));playlistsetCurrentIndex(1);playernewQMediaPlayer;playersetPlaylist(playlist);videoWidgetnewQVideoWidget;playersetVideoOutput(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来分离。playernewQMediaPlayer;playlistnewQMediaPlaylist(player);playlistaddMedia(QUrl(http:example。commyclip1。mp4));playlistaddMedia(QUrl(http:example。commyclip2。mp4));videoWidgetnewQVideoWidget;playersetVideoOutput(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来获得一个相机设备的一般信息,例如描述,在系统上的物理位置,或相机传感器的方向。QCameramyCamera;QCameraInfocameraInfo(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
视频捕获模式,比如:录制视频
我国真实的尼姑岛岛上住着2万女修行者,生命禁区的清修圣地总有人说在这个物欲横流的社会,人心已经被欲望所腐蚀。似乎,现代社会也像孔子所悲叹的那样成为了一个礼崩乐坏的时代。可就是在科技已经高度发达的现代社会,却还存在着一片未被世俗的靡靡之风
现代人到底从哪起源?新研究为出东亚说再添力证进化谱系树是用当代人的DNA构建的,其前提存在不确定性。最有希望破解人类起源之谜的研究就是古人类的古DNA测序研究。想要判断一个分枝谱系是否真的存在,只有古DNA才是真凭实据的见证
3年没破产的民宿老板直播挖葛根做木工维持,盼开春游客归来顶端新闻河南商报记者杨雪情重渡沟风景区,位于河南省洛阳市栾川县境内,南沟飞瀑流泉,突出水西沟秀林茂竹,突出幽。孙军范的两家民宿就毗邻坐落于此。生意火爆的时候,民宿周五周六的入住率都
这里,是深圳保存最为完好的一个古墟2021年6月,广东发布了第二批广东省粤港澳大湾区文化遗产游径。其中,观澜古墟商埠游径成为目前深圳唯一上榜的游径。深圳观澜古墟商埠径游径路线观澜古墟碉楼群南门街公益酒家观澜墟是目前
盆景们的祝福你知道吗?来这里享受园艺盛宴新民晚报讯(通讯员吴会雄记者袁玮)虽然天气寒冷,但依然有不少市民选择用亲近大自然的方式来度过这个兔年新春佳节。在上海植物园,盆景园也是一个观赏的好去处。长假期间,来盆景园的市民都能
2023年春节期间四川游客多,但旅游收入低,增长缓慢据统计,2023年春节期间四川旅游接待游客人数全国第一,达到5387万人,但是旅游收入还排不进全国前三,只有242亿元,人均消费不到500元,旅游收入同比增长10,增长有点乏力!经
全球度假旅行春节期间日均41万人次出入境旅游!据国家移民管理局数据,春节期间(1月21日至27日),全国移民管理机构共查验出入境人员287。7万人次,日均41万人次,较去年春节同期(2022年1月31日至2月6日)增长120。
花腰霓裳情歌会流光溢彩不夜城跟着边凡看世界戛洒的白天激情四射,到了夜晚,却成了流光溢彩的不夜城。黄金周期间,每天晚上戛洒凤凰广场美轮美奂的花街节都会上演精彩的花腰霓裳文艺晚会。原生态的歌舞,演绎了花腰傣的万种
初春的第一场海岛旅行,就去南麂岛吧!原文转载自平阳文旅体资讯图片来自视觉中国版权归原作者所有去不了圣托里尼,就去南麂岛吧,一句这样的高度评价让南麂岛由此成为了中国版的圣托里尼。中国国家地理杂志更是将南麂岛评为了中国最
49家!继续免费!这个春节无锡各景区都免费啦你去白相相了吗?特别提醒!我市春节假期免费入园的景区均会继续免费至元宵节节日里场场爆满的惠山古镇夜游项目也将延至元宵节结束今年春节七天假期,我市49家景区
318家国家5A级旅游景区,你去过几家?(浙江省20家)头条创作挑战赛国家AAAAA级旅游景区,即5A级景区,为中华人民共和国旅游景区质量等级划分的景区级别,共分为五级,从高到低依次为AAAAAAAAAAAAAAA级五级。5A级为中国旅