基于Qt编写的在线音乐播放器

您所在的位置:网站首页 搜索这个视频的歌曲 基于Qt编写的在线音乐播放器

基于Qt编写的在线音乐播放器

2024-07-09 19:28| 来源: 网络整理| 查看: 265

思路: Qt中提供了音视频播放的类,类中提供了很多播放类的接口供我们调用,基本可以实现一个完整播放器的所有功能,由于想要实现的是支持在线搜索和播放的,所以要先解决音频的来源,再进行ui界面的设计,最后将背后的功能实现。

 一,调用网易云API

如果想自己写服务器作为音乐播放的来源的话比较难实现,所以就调用网易云音乐的API,用特定的请求数据格式获得数据后进行解析后就可以得到音乐的 Url  格式,再通过Qt提供的在线播放类播放即可。 

网易云音乐提供了这样一个 API 用于公共请求使用:   https://music.cyrilstudio.top

成功进入后我们点击查看文档 

 点击开始使用:

 点击使用指南可以查看该API提供了哪些基本功能,并提供了不同的功能调用的方法

 以搜索歌曲为例,请求资源的格式为 :https://music.cyrilstudio.top/search?keywords=歌曲名称

 我们先以他提供的例子将 Url 进行验证,如果得到如下的格式说明正确

 这是对方服务器接收你的请求后返回的 json 格式的文本,使用 http://json.cn   进行翻译,查看是否包含所需要的信息,我们将 json 格式的文本全部复制到这个网页中进行解析,得到如下信息

 id 是音乐ID ,可以唯一标识一首音乐,其他的还有歌曲名,歌手名,歌曲时长等信息都在里面,需要将其解析出来。

二,使用Qt中的 QNetworkAccessManager 类发送和接收数据

 QNetworkAccessManager 也被称为网络大管家类,是因为所有和网络相关的接口都是围绕QNetworkAccessManager创造出来的对象,并且一个应用程序只要有一个QNetworkAccessManager对象即可。该类控制着应用程序发送请求和接受回复。该类也承载着一切公共的配置以及所发请求的设置,还包含了代理配置、缓存配置、以及相对应的各种信号,reply(应答)信号可以用来监视网络活动。所以我们可以通过这一个对象完成信息的收发。具体实现如下:

QNetworkAccessManager* http_acc = new QNetworkAccessManager; //定义并实例化一个网络管家 QString str; str=QString("https://music.cyrilstudio.top/search?keywords=海阔天空"); //将请求格式作为字符串保存 QNetworkRequest request; //定义一个请求对象 request.setUrl(QString(str)); //将请求格式设置给请求对象 http_acc->get(request); //请求

这样对方的服务器就会接收到正确的请求,之后便会将你所请求的内容以 json 格式发送过来,先通过接收函数接收对方发送的 json 文本后再进行解析。

当然Qt 也提供了接收信息的类   QNetworkReply  ,通过定义一个接收对象,将内容全部读取出来

QNetworkReply* r; //定义一个接收信息对象 QByteArray searchInfo= r->readAll(); //全部读取  三,解析json文本

 1,先将收到的信息提取后转换为 json 文件对象,并检查内容是否符合 json 语法。

searchInfo = r->readAll(); // 读取全部信息 QJsonParseError err; //错误信息对象 QJsonDocument json_recv = QJsonDocument::fromJson(searchInfo,&err);//将json文本转换为 json 文件对象 if(err.error != QJsonParseError::NoError) //判断是否符合语法 { qDebug()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3