【硬创邦】跟hoowa学做智能路由(十三):网络音箱之Android篇

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介:
  
  
   我们继续网络音箱的专题,这章将介绍安卓系统下的MP标准软件控制路由器播放音乐。

什么是MP

MP全称为音乐播放进程(Music Player Daemon)。它是一个可定制化功能强大的服务端播放音乐软件,通过其自身的插件和库系统即可完成通过网络控制播放音乐。MP具备一个自己的控制管理协议,这些协议是基于TCP协议进行传输的。客户端连接到服务器上控制服务端进行处理。MPD表示服务端,MPC表示客户端。

MP是一个完全开放源代码的整体系统,因此有很多操作系统下的客户端,在安卓手机中即可使用MPDroid这个软件控制服务端播放,而如果您需要开发自己的产品,完全可以参考官方的资料自己开发一个控制程序,甚至给服务端增加新的功能。

使用MP的好处是,只要你的手机连接到家里的路由器上既可以控制播放音乐,而手机还随身携带,这样不影响你扫地啊、煮饭啊等等工作是不是。

MP的官方网站为http://www.musicpd.org/

安装MPD服务

首先确保你12章的测试和操作OK声卡已经正常工作了。

然后开始安装软件包,我们教程中使用的是mpd-mini该软件包是mpd的OpenWRT精简版完成了主要的功能,而且也比较节省CPU和内存。

root@SmartRouter:/# opkg update
root@SmartRouter:/# opkg install mpd-mini

为MPD准备文件夹和文件

第一步: 创建必须的文件夹,在这一步,我们选择使用extdisk作为存储位置,这样的好处是上传到系统的文件可以通过Windows文件共享等方式实现。当然你也可以开发一个新的客户端软件实现将手机的音乐同步到服务端上。

创建音乐文件存放位置

root@SmartRouter:/# mkdir -p /mnt/extdisk/music
root@SmartRouter:/# chmod -R 777 /mnt/extdisk/music

创建播放列表存放位置

root@SmartRouter:/# mkdir -p /mnt/extdisk/music_playlist
root@SmartRouter:/# chmod -R 777 /mnt/extdisk/music_playlist

创建播放器数据位置

root@SmartRouter:/# mkdir -p /mnt/extdisk/music_bin
root@SmartRouter:/# chmod -R 755 /mnt/extdisk/music_bin

第二步: 创建初始化的文件,这些文件都是mpd所需要使用的

root@SmartRouter:/# touch /mnt/extdisk/music_bin/mpd.db
root@SmartRouter:/# touch /mnt/extdisk/music_bin/mpd.log
root@SmartRouter:/# touch /mnt/extdisk/music_bin/mpd.error
root@SmartRouter:/# #touch /mnt/extdisk/music_bin/mpd.pid
root@SmartRouter:/# touch /mnt/extdisk/music_bin/mpdstate
root@SmartRouter:/# touch /mnt/extdisk/music_bin/mpd.sql

编写MPD的配置文件

编写配置文件,MPD目前没有基于UCI格式的配置文件,需要手工创建一个/etc/mpd.conf文件。

mpd.conf的配置文件涉及到的参数有很多,这里我们一一说明下:

MPD的基本运行参数:

参数 值 说明
music_directory 路径 音乐文件的存放文件夹位置
playlist_directory 路径 音乐播放列表的存放位置,播放列表可以是在设备上创建也可以是通过MPDroid客户端软件创建
db_file 文件路径 MPD的数据库文件路径
log_file 文件路径 MPD的日志文件路径
pid_file 文件路径 MPD的进程号文件路径
state_file 文件路径 MPD的状态文件路径
sticker_file 文件路径 MPD管理音乐动态信息的文件路径
user 帐号 MPD运行时的Linux身份帐号,默认openwrt下只有root
group 分组 MPD运行时的Linux身份帐号,默认openwrt下只有root
bind_to_address IP地址 MPD监听的IP地址,0.0.0.0表示全部设备的IP
port 端口 MPD的监听端口
log_level 字符串 日志信息输出的级别,可以填写default,secure,verbose其中verbose表示显示全部日志,信息很多
auto_update 字符串 当music_directory中的音乐文件有变化时候自动更新MPD的数据库。可以填写yes或no
auto_update_depth 数字 自动更新的时候对文件夹深度的检测,随便写一个值吧只要是数字就可以。
audio_buffer_size 数字 音频播放时的缓存大小,默认值为2048
buffer_before_play 百分比 音频播放之前的缓存比例。默认值为10%
connection_timeout 数字 客户端连接超时,单位秒,默认值为60
max_connections 数字 客户端最大连接数量,默认值为10
max_playlist_length 数字 播放列表文件允许的最大长度,这个不要弄的太大搞死系统了哦。
max_command_list_size 数字 最大list指令尺寸,默认值为2048
max_output_buffer_size 数字 最大输出缓存,默认值为8192
filesystem_charset 字符串 文件系统的编码,如果你的文件是通过windows网络共享上载的这里填写UTF-8即可。
id3v1_encoding 字符串 歌曲的ID3标签名称编码,默认为"ISO-8859-1"

MPD的输出设备output,该设备配置用来实现对声卡的支持,格式如下:

audio_output {
参数内容
}

其中的参数内容在我们的开发板上用的上的是对声卡配置部分:

参数 值 说明
type 字符串 输出类型,可选值为: oss,alsa,pulse,pipe,在我们的开发板上为oss
name 字符串 设备显示名称,在MPDroid客户端软件上可以显示出来。
device 设备路径 oss的设备路径,默认填/dev/sdp
format 字符串 播放格式,默认填写为44100:16:2即可,表示44Khz,16位,双声道
mixer_type 字符串 混音器类型,我们的开发板默认填写"hardware"
mixer_device 设备路径 混音器设备路径,我们的开发板默认填写"/dev/mixer"
mixer_control 字符串 混音器的控制,我们的开发板默认填写"PCM"

在这里,我们举例下配置。

使用VI编辑器创建/etc/mpd.conf配置文件内容如下:

music_directory "/mnt/extdisk/music"
playlist_directory "/mnt/extdisk/music_playlist"
db_file "/mnt/extdisk/music_bin/mpd.db"
log_file "/mnt/extdisk/music_bin/mpd.log"
pid_file "/var/run/mpd.pid"
state_file "/mnt/extdisk/music_bin/mpdstate"
sticker_file "/mnt/extdisk/music_bin/mpd.sql"
user "root"
group "root"
bind_to_address "0.0.0.0"
port "6600"
log_level "default"
auto_update "yes"
auto_update_depth "8"
audio_output {
type "oss"
name "mycard"
device "/dev/dsp"
format "44100:16:2"
mixer_type "hardware"
mixer_device "/dev/mixer"
mixer_control "PCM"
}
#audio_buffer_size "2048"
buffer_before_play "10%"
connection_timeout "60"
max_connections "4"
max_playlist_length "1024"
max_command_list_size "2048"
max_output_buffer_size "4096"
filesystem_charset "UTF-8"
id3v1_encoding "ISO-8859-1"

启动进程准备音乐文件

第一步: 复制音乐

你可以把你喜欢的音乐以文件夹方式存放在/mnt/extdisk/music中,你可以选择使用windows文件共享方式复制音乐文件到系统上来。

第二步: 修正MPD服务的默认音量

因为MPD服务的默认音量参数写的有问题会导致音量被放大到100%吓你一跳,所以需要手工方式修正下。
用VI编辑器编辑/etc/init.d/mpd文件:
找到: [ -x /usr/bin/amixer ] && /usr/bin/amixer set PCM 40%
修改为: [ -x /usr/bin/amixer ] && /usr/bin/amixer set PCM 35%

第三步: 设置启动服务,如果你需要经常听音乐,就要将服务设置为自动开启,或手工开启。

设置每次设备自动开启(如果不是总听,就不用自动拉):
root@SmartRouter:/# /etc/init.d/mpd enable

手工开启一下:

root@SmartRouter:/# /etc/init.d/mpd start

安装安卓MPDroid客户端

MPDroid是一个免费的安卓系统下客户端,该客户端可以实现大部分播放功能。

第一步: 安装

进入你的安卓市场,搜索MPDroid并且下载安装,如果你的市场中没有可以上网上搜索MPDroid下载到手机中安装。

第二步: 配置

首次配置首先要你的无线连接到板子上。打开MPDroid软件后会显示要求配置:
a. 选择WLAN based connection
b. 选择你当前连接上来的开发板
c. 在Host填写开发板的IP地址
d. 在Port填写MPD的监听端口
e. 退出配置返回主界面

第三步: 选择要播放的音乐

a. 选择主界面左下角的音乐符号,再在屏幕左上角选择Files显示可播放音乐。
b. 屏幕中会显示出可播放的音乐或文件夹,这些都是你上传到/mnt/extdisk/music下的音乐文件。
c. 在音乐文件或文件夹上长按后会显示选项:
add 增加到当前播放列表
add and replace 增加到当前播放列表并且替换掉列表中其他的
add, replace and play 增加到当前播放列表,并且替换掉其他的,并且立即播放
add and play 增加播放
add to playlist 增加到一个列表文件(列表文件,跟当前播放列表不是一个意思,列表文件表示存在路由器上的)
d. 选择好以后返回主界面,就有音乐文件了,点击就可以播放了。还可以调整音量。

章节结尾

MPDroid是一个安卓下可用的播放器软件,MPD的协议也可以完成很多工作,但是毕竟有不完善的地方,首先MPDroid不具备音乐同步通能,不能将音乐同步到服务器上,其次界面是英文的操作比较复杂,hoowa期望有识之士能做一个更完美的客户端项目。因此如果有愿意做这方面的朋友,请不要吝啬,加入我们吧。

 
  本文作者: 孙冰

本文转自雷锋网禁止二次转载, 原文链接
相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
4天前
|
人工智能 安全 网络安全
瑞数信息:智能防护新时代,看AI如何筑起网络防线
在AI时代,网络安全面临新挑战与机遇。瑞数信息在2024中国科技方案资讯日上探讨如何利用AI强化安全防护。随着AI技术普及,网络攻击变得更复杂,传统安全手段捉襟见肘。瑞数信息通过动态安全与AI融合,打造动态防御系统,应对自动化攻击和勒索软件。其DDR解决方案利用AI进行深度文件内容检测和智能行为识别,提升数据安全。AI已成为网络安全革命的关键,瑞数信息等企业正通过技术创新塑造未来安全格局。
瑞数信息:智能防护新时代,看AI如何筑起网络防线
|
12天前
|
缓存 网络协议 安全
Android网络面试题之Http基础和Http1.0的特点
**HTTP基础:GET和POST关键差异在于参数传递方式(GET在URL,POST在请求体),安全性(POST更安全),数据大小限制(POST无限制,GET有限制),速度(GET较快)及用途(GET用于获取,POST用于提交)。面试中常强调POST的安全性、数据量、数据类型支持及速度。HTTP 1.0引入了POST和HEAD方法,支持多种数据格式和缓存,但每个请求需新建TCP连接。**
22 5
|
10天前
|
安全 网络协议 算法
Android网络基础面试题之HTTPS的工作流程和原理
HTTPS简述 HTTPS基于TCP 443端口,通过CA证书确保服务器身份,使用DH算法协商对称密钥进行加密通信。流程包括TCP握手、证书验证(公钥解密,哈希对比)和数据加密传输(随机数加密,预主密钥,对称加密)。特点是安全但慢,易受特定攻击,且依赖可信的CA。每次请求可能复用Session ID以减少握手。
17 2
|
16天前
|
缓存 JSON 网络协议
Android面试题:App性能优化之电量优化和网络优化
这篇文章讨论了Android应用的电量和网络优化。电量优化涉及Doze和Standby模式,其中应用可能需要通过用户白名单或电池广播来适应限制。Battery Historian和Android Studio的Energy Profile是电量分析工具。建议减少不必要的操作,延迟非关键任务,合并网络请求。网络优化包括HTTPDNS减少DNS解析延迟,Keep-Alive复用连接,HTTP/2实现多路复用,以及使用protobuf和gzip压缩数据。其他策略如使用WebP图像格式,按网络质量提供不同分辨率的图片,以及启用HTTP缓存也是有效手段。
37 9
|
11天前
|
缓存 网络协议 Android开发
Android网络面试题之Http1.1和Http2.0
HTTP/1.1 引入持久连接和管道机制提升效率,支持分块传输编码和更多请求方式如PUT、PATCH。Host字段指定服务器域名,RANGE用于断点续传。HTTP/2变为二进制协议,实现多工处理,头信息压缩和服务器推送,减少延迟并优化资源加载。HTTP不断发展,从早期的简单传输到后来的高效交互。
18 0
Android网络面试题之Http1.1和Http2.0
|
16天前
|
JSON Java API
【Android】使用 Retrofit2 发送异步网络请求的简单案例
**摘要:** Retrofit是Android和Java的HTTP客户端库,简化了RESTful API交互。它通过Java接口定义HTTP请求,并提供注解管理参数、HTTP方法等。要使用Retrofit,首先在AndroidManifest.xml中添加`INTERNET`权限,然后在`build.gradle`中引入Retrofit和Gson依赖。创建服务器响应数据类和描述接口的接口,如`Result`和`Api`。通过Retrofit.Builder配置基础URL并构建实例,之后调用接口方法创建Call对象并发送异步请求。
46 1
|
10天前
|
编解码 开发工具 Android开发
技术心得:打造自己的智能投屏体验——Android投屏开发入门
技术心得:打造自己的智能投屏体验——Android投屏开发入门
15 0
|
12天前
|
安全 Java API
Android获取Wi-Fi网络列表
【6月更文挑战第21天】
|
13天前
|
人工智能 API 语音技术
探索Gemini Pro AI在智能Android应用中的魅力
探索Gemini Pro AI在智能Android应用中的魅力
18 0
|
14天前
|
边缘计算 自动驾驶 物联网
边缘计算与5G网络:未来智能生活的双重引擎
**边缘计算与5G携手驱动智能生活:**随着物联网爆发,边缘计算将处理带至设备边缘,提升效率,降低延迟,如智能交通系统的实时数据分析。5G网络以其高速、低延迟特性,支持高清流媒体及自动驾驶等应用。两者结合,为智能家居等场景提供无缝连接与即时响应,构建更高效、智能的未来生活。关注我们,洞见更多科技前沿!