玩转Openwrt(二) — 配合Android手机打造无线音乐播放器

2023-10-31


前一篇文章大概介绍了刷入带ADSL驱动的openwrt以及简单的配置,这次就总结下一个好玩的应用,使用android手机+mpd打造一台无线音乐播放器。

所需装备:

  • DB120或者RG100A或者其它BCM6358芯片的路由一台
  • USB声卡一件(我手里的两个声卡都能很好的工作,一个是steelseries 5HV2,一个是北蓝鼠 USB声卡 7.1声卡,就这两个的音质来说更加倾向于steelseries 5HV2)
  • USB2.0的移动硬盘或者U盘一个
  • 运行android系统的手机或者平板

 

首先要保证路由器已经刷入了openwrt,并且已经能正常上网

安装USB、文件系统的内核模块

opkg update
opkg install kmod-usb-core
opkg install kmod-usb-storage
opkg install kmod-usb-ohci
opkg install kmod-usb-ohci
opkg install kmod-fs-ext2
opkg install kmod-fs-ext3
opkg install kmod-fs-vfat
opkg install kmod-fuse
opkg install ntfs-3g

配置自动挂载USB存储设备

安装mount工具

opkg install mount-utils

编辑配置文件

vi /etc/hotplug.d/block/10-mount
#!/bin/sh

# Copyright (C) 2009 OpenWrt.org (C) 2010 OpenWrt.org.cn

blkdev=`dirname $DEVPATH`
if [ `basename $blkdev` != "block" ]; then

device=`basename $DEVPATH`
case “$ACTION” in
add)
mkdir -p /mnt/$device
# vfat & ntfs-3g check
if [ `which fdisk` ]; then
isntfs=`fdisk -l | grep $device | grep NTFS`
isvfat=`fdisk -l | grep $device | grep FAT`
isfuse=`lsmod | grep fuse`
isntfs3g=`which ntfs-3g`
else
isntfs=”"
isvfat=”"
fi

# mount with ntfs-3g if possible, else with default mount
if [ "$isntfs" -a "$isfuse" -a "$isntfs3g" ]; then
ntfs-3g -o nls=utf8 /dev/$device /mnt/$device
elif [ "$isvfat" ]; then
mount -t vfat -o iocharset=utf8,rw,sync,umask=0000,dmask=0000,fmask=0000 /dev/$device /mnt/$device
else
mount /dev/$device /mnt/$device
fi
if [ -f /dev/${device}/swapfile ]; then
mkswap /dev/${device}/swapfile
swapon /dev/${device}/swapfile
fi
;;
remove)
if [ -f /dev/${device}/swapfile ]; then
swapoff /dev/${device}/swapfile
fi
umount /dev/$device
;;
esac

fi

修改可执行权限

chmod 777 /etc/hotplug.d/block/10-mount

配置USB声卡

安装声卡内核模块

opkg install kmod-input-core
opkg install kmod-soundcore
opkg install kmod-usb-audio

然后查看/dev下是否有dsp、audio、mixer
测试声卡是否工作正常,声卡与音箱连接并且插入含有MP3文件的USB存储设备
这里假设usb设备挂载路径为/mnt/sdb1

opkg install madplay
madplay /mnt/sba1/*.mp3

如正常发声则表示声卡驱动成功

安装配置MPD

opkg install mdnsresponder
opkg install libspeex
opkg install mpd

编辑mpd配置文件
vi /etc/mpd.conf
修改为:

#=== edit options as follows ===
music_directory “/mnt/sdb1″
playlist_directory “/mnt/sdb1/.mpd/playlist”
db_file “/mnt/sdb1/.mpd/mpd.db”
log_file “/mnt/sdb1/.mpd/mpd.log”
error_file “/mnt/sdb1/.mpd/mpd.error”
pid_file “/mnt/sdb1/.mpd/mpd.pid”
state_file “/mnt/sdb1/.mpd/mpdstate”

# use this if you want to use OSS audio output
audio_output {
type “oss
name “my OSS sound card”
device “/dev/dsp” # optional
format “44100:16:2″ #optional
}

# OSS Mixer
mixer_type “oss
mixer_device “/dev/mixer”
mixer_control “PCM”

#=== edit end ===

建立mpd所需目录与文件

mkdir -p /mnt/sdb1/.mpd/playlist
touch /mnt/sdb1/.mpd/{mpd.db,mpd.log,mpd.error,mpd.pid,mpdstate}

运行mpd

/usr/bin/mpd –create-db

安装mpc控制播放

opkg install mpc
mpc listall | mpc add
mpc play

用手机控制播放

手机连接路由器,在android电子市场里搜索 MPDroid 并安装
运行MPDroid,在WLAN based connection里选择连接无线路由的essid
在Host选项里填入路由器的IP地址,其它则默认,然后返回到主界面
此时即可用手机无线控制路由器的播放、暂停以及其它操作

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

玩转Openwrt(二) — 配合Android手机打造无线音乐播放器 的相关文章

  • 主题以编程方式设置。如何重新加载 Activity 来应用

    如何在不重新启动整个应用程序的情况下应用主题 如果我这样做startActivity getIntent finish 活动退出并且不重新启动 是否可以简单地重新启动 重新创建活动来应用主题 它的顺序不正确 finish intent ne
  • Android STFP 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在我的 Android 项目中使用 SFTP 安卓已经有了吗 SFTP 库 还是我必须实现它 I
  • Android Ble GATT_ERROR 133 经常使用三星设备

    我正在研究 BLE 应用程序 我已经使用 Nexus Moto Samsung LG 等不同设备进行了测试 我仅在三星设备中收到 GATT 错误 133 三星 A5 2016 尝试连接 10 次 但只连接了 2 或 3 次 请帮助我 Non
  • Android平台源码中哪里可以找到版本信息

    Android 平台源文件中的版本信息在哪里找到 我尝试查找 设置 gt gt 中列出的有关手机的一些信息 显示的一些信息包括固件版本 模块编号 基带版本 内核版本 你可以给它办理登机手续platform build core versio
  • 在Android内存中存储gif图像

    我对安卓还很陌生 我想将图像保存到内存中 然后从内存中检索图像并将其加载到图像视图中 我已使用以下代码成功将图像存储在内存中 void saveImage String fileName img cnt jpg File file new
  • NumberPicker 的格式化值在单击时消失

    我的 NumberPicker 在setDescendantFocusability FOCUS BLOCK DESCENDANTS 模式和setWrapSelectorWheel false 已关闭 我用一个简单的格式化程序格式化了我的
  • Android Studio:Android 设备监视器未显示我的设备

    我的真实设备是索尼 Xperia c6502安卓版本4 3 我确定我将其连接到我的计算机然后打开开发者选项 USB调试 on 在 SDK 管理器中 Google USB 驱动程序已安装 I downloaded Xperia Z Drive
  • 调试 Java InterruptedException,即查找原因

    在调试Android应用程序时 有时中断异常发生并使应用程序崩溃 我已经能够在默认异常处理程序上设置断点 但调用堆栈不提供信息 at java util concurrent locks AbstractQueuedSynchronizer
  • 如何找到特定路线上两点之间的距离?

    我正在为我的大学开发一个 Android 应用程序 可以帮助学生跟踪大学巴士的当前位置 并为他们提供巴士到达他们的预计时间 截至目前 我获取了公交车的当前位置 通过公交车上的设备 和学生的位置 我陷入了必须找到两个 GPS 坐标之间的距离的
  • Android 性能:SharedPreferences 的成本

    当我的应用程序启动时 我使用分片首选项中的值填充容器类 这个想法是处理 SharedPreferences 和 PreferenceManager 一次 因为我猜它们很重 这是一个示例 SharedPreferences prefs Pre
  • 如何在虚拟机 VirtualBox 上运行 Android-x86 4.2 iso?

    我想用Android x86测试和调试我的应用程序 我之前成功尝试过其他版本的Android x86 但是关于android x86 4 2有一个错误 所以我在这里问我的问题 因为它可能会发生在其他人身上 我安装了oracle VM vir
  • 活动组代码示例

    有人可以给我一些使用活动组的示例代码吗 我的应用程序中有一些按钮 我想将活动应用于这些按钮 目前我正在使用 setVisibility 但我被告知活动组将是更好的选择 这是另一个ActivityGroup 示例项目 http richipa
  • 在尝试使用 GPS 之前如何检查 GPS 是否已启用

    我有以下代码 但效果不好 因为有时 GPS 需要很长时间 我该如何执行以下操作 检查GPS是否启用 如果启用了 GPS 请使用 GPS 否则请使用网络提供商 如果 GPS 时间超过 30 秒 请使用网络 我可以使用时间或 Thread sl
  • 与 Dagger 一起使用时,Espresso 生成 FileNotFoundException

    我一直在研究旧版 Android 应用程序 尝试为其添加测试和适当的架构 该应用程序有一个主要LaunchActivity它在启动时运行一系列检查 最初 该活动使用 Dagger 来 注入依赖项 活动将使用它来运行检查 但效果相当糟糕 我转
  • InAppMessage 一旦显示就会自动消失

    您好 我最近将 InAppMessaging 添加到我的项目中 这似乎很容易集成 但对我来说并没有按预期工作 首先 我将其添加到 build gradle 中 implementation com google firebase fireb
  • 在 Android ADT Eclipse 插件中滚动布局编辑器

    有谁知道当布局编辑器的内容溢出一个 屏幕 时如何滚动这些内容 我说的是在设计时使用 ADT 布局编辑器 而不是在物理设备上运行时滚动 效果很好 关闭 Android 布局编辑器中的剪辑 切换剪辑 按钮位于 Android 布局编辑器的右上角
  • 获取当前图片在图库中显示的位置

    在我的应用程序中 我有一个图片库 但我想检测当前显示图像的位置 例如 当我启动我的活动时 位置是 0 但是当我在图库中滚动时 我想获取当前显示图像的位置 我尝试过 OnFocusChanged OnItemClicked 但只有当我单击图库
  • Android:ANT 构建失败,并显示 google-play-services-lib:“解析为没有项目的 project.properties 文件的路径”

    我正在尝试使用 ANT 构建我的应用程序 但在包含 google play services lib 库项目后 我惨遭失败 Step 1 我在 project properties 文件中设置了对库项目的引用 android library
  • 当我使用 ListView 时,ListTile OnTap 正在工作。但是当我使用 ListWheelScrollView 时它不起作用

    当我使用 ListView 时 ListTile OnTap 正在工作 但是当我使用 ListWheelScrollView 时它不起作用 我的意思是它不会被窃听 观点发生变化 但我似乎无法点击它 我在很多地方和链接中寻找解决方案 但仍然找
  • 在DialogFragment中,onCreate应该做什么?

    我目前正在摆弄 DialogFragment 以学习使用它 我假设相比onCreateView onCreate 可以这样做 public void onCreate Bundle savedInstanceState super onCr

随机推荐

  • 4.5 服务器上的 Git - Git 守护进程

    4 5 服务器上的 Git Git 守护进程 版本说明 版本 作者 日期 备注 0 1 loon 2019 3 25 初稿 目录 文章目录 4 5 服务器上的 Git Git 守护进程 版本说明 目录 Git 守护进程 Git 守护进程 接
  • redis订阅发布介绍

    redis订阅发布 redis发布订阅 pub sub 是一种消息通信模式 订阅者 pub 发送消息 订阅者 sub 接受消息 比如生活中的微信订阅公众号 微博关注账号 redis客户端可以订阅任意数量的频道 这分为三个部分 消息发送者 频
  • 基于人工智能算法实现AI足球比赛

    相关资料 http t csdn cn 1XSne 实现目标 目前进展 主要用到就是射门概率那块 用随机数 能力值来控制 include
  • 周志华《Machine Learning》学习笔记(9)--EM算法

    上篇主要介绍了贝叶斯分类器 从贝叶斯公式到贝叶斯决策论 再到通过极大似然法估计类条件概率 贝叶斯分类器的训练就是参数估计的过程 朴素贝叶斯则是 属性条件独立性假设 下的特例 它避免了假设属性联合分布过于经验性和训练集不足引起参数估计较大偏差
  • firefly架构说明

    Firefly是免费 开源 稳定 快速扩展 能 热更新 的分布式游戏服务器端框架 采用Python编写 基于Twisted框架开发 它包括了开发框架和数据库缓存服务等各种游戏服务器基础服务 节省大量游戏开发的工作时间 真正做到让使用者把精力
  • 线性时间内从一个数组中找出第K个最小的元素——编程珠玑

    线性时间内从一个数组中找出第K个最小的元素 编程珠玑 题目 编写程序 在O n 时间内从数组x 0 n 1 中找出第k个最小的元素 算法中可以对x中的元素进行排序 思路 快速排序选择一个pivot对数组进行划分 左边小于pivot 右边大于
  • easyExcel 填写导出转换日期格式

    在使用easyExcel 填写导出的时候 遇到Date类型的字段填写在excel 显示的单元格的格式为自定义格式 原本该单元格格式设置了边框 居中 填写导出后的居然没有加边框 也没有居中 按照源码 写上一个Date转换类 实现Convert
  • 了解Spring的变迁从Spring3到Spring5

    随着互联网技术的发展 Spring也在不断的进化 从最早轻量级的支持J2EE到现在对高并发 多线程异步程序的支持 spring也不断的更新自己走在技术的最前沿 我们先来从Spring3开始看看spring的发展变迁 Spring3 Spri
  • java 控制 区域投屏,Scrcpy投屏原理浅析-设备控制篇

    起初我真的想过自己单独写一套来着 后来发现时间真的不够 所以有了对scrcpy源码的浅析 服务端我就用scrcpy现有的了 客户端scrcpy采用ffmpeg sdl2 0进行了跨平台的播放 我准备用Flutter重构客户端部分 Scrcp
  • SVN客户端安装及使用说明

    SVN客户端安装及使用说明 一 SVN客户端与语言包的安装 1 下载TortoiseSVN 2 安装TortoiseSVN 双击安装包 进入下一步 如图 3 点击Next 进入下一步 如图 4 选择接受 然后点击Next 进入下一步 如图
  • Python中逗号的三种作用

    最近研究python 遇到个逗号的问题 一直没弄明白 今天总算搞清楚了 1 逗号在参数传递中的使用 这种情况不多说 没有什么不解的地方 就是形参或者实参传递的时候参数之间的逗号 例如def abc a b 或者abc 1 2 2 逗号在类型
  • Python学习笔记(五)—LOOP 循环

    个人认为Python基础学习直到LOOP才算真正开始 循环有While do while 和for 比如while 我们要输出100条 you are my sunshine 可以表达如下 count 0 while count lt 10
  • opencv 打开1080P等高分辨率摄像头时卡顿问题的解决

    参考 blog csdn net lunweiwangxi3 article details 88556911 http blog sina com cn s blog 9b493e7b0102xvn6 html 总结http stacko
  • SRCNN以DIV2K数据集进行训练时,.h5文件、PSNR评价指标、运行结果

    由于是从Word文档直接复制过来 其中格式如果乱码或者不通顺 请评论区告知我 1 对于 h5文件的大小计算 输入图片后 由于大小不同 无法从图片直接计算 但整合后数组有两个 一个arrlabel 一个arrdata 1 其中 arrlabe
  • java 对象属性复制,将一个对象的属性值赋值给另一个对象, 属性名需要相同

    java 对象属性复制 将一个对象的属性值赋值给另一个对象 属性名需要相同 关键代码 import org springframework beans BeanUtils BeanUtils copyProperties a b demo
  • 微信小程序--实现分享功能

    本篇文章的目标是实现分享小程序中的单张页面给其他用户 并且打开分享后的页面拥有返回按钮 最终的效果 1 封装一个分享的组件
  • 文件的名字带有特殊符号下载报错问题

    在这里插入图片描述 其中encodeURI 主要用于整个URI 例如 http www jxbh cn illegal value htm 而encodeURIComponent 主要用于对URI中的某一段 例如前面URI中的illegal
  • 六级(2020/12-2) Text1

    Vegetarians would prefer not to be compelled to eat meat Yet the reverse compulsion 强迫 is hidden in the proposals for a
  • char与wchar_t(TCHAR)之间的相互转换

    char与wchar t TCHAR 之间的相互转换 vc 2005以后 Visual studio 编译器默认的字符集为Unicode VC中很多字符处理默认为宽字符wchar t L Holle 如CString的getBuffer 而
  • 玩转Openwrt(二) — 配合Android手机打造无线音乐播放器

    前一篇文章大概介绍了刷入带ADSL驱动的openwrt以及简单的配置 这次就总结下一个好玩的应用 使用android手机 mpd打造一台无线音乐播放器 所需装备 DB120或者RG100A或者其它BCM6358芯片的路由一台 USB声卡一件