首先路由器上要有usb接口,然后还需要有个usb声卡。随便X宝上买个几块钱的那种免驱的usb声卡就能用。

方式一:手机控制播放OpenWrt上的音乐(播放的数据来源路由本身)

这种方式下,一般还需要一个usb分线器(X宝上买个十来块,4口的usb hub,不太差的就行)和一个u盘,u盘上创建个“mp3”目录和“.mpd”目录,往这个目录放些mp3格式的歌曲(wma的就不要放进去了,播放太吃力了,在make kernel_menuconfig的是选上了 浮点模拟,测试没什么效果)。

自己编译固件,make menuconfig时选择

Base system-->block-mount

Kernel modules-->Filesystems-->kmod-fs-ext4

Kernel modules-->Filesystems-->kmod-fs-msdos

Kernel modules-->Filesystems-->kmod-fs-ntfs

Kernel modules-->Filesystems-->kmod-fs-vfat

Kernel modules-->Native Language Support-->kmod-nls-utf8

Kernel modules-->Native Language Support-->kmod-nls-cp437

Kernel modules-->Sound Support-->kmod-sound-core

Kernel modules-->Sound Support-->kmod-usb-audio

Kernel modules-->USB Support-->kmod-usb-hid

Kernel modules-->USB Support-->kmod-usb-storage

Kernel modules-->USB Support-->kmod-usb-storage-extras

Kernel modules-->USB Support-->kmod-usb2

Libraries-->libffmpeg-mini

Sound-->madplay#测试用

Sound-->mpd-full

Utilities-->alsa-utils

刷固件或安装上面编译的软件包,然后就是在openwrt系统下挂载u盘到/tmp/extroot,其他地方也行。用命令:madplay /tmp/extroot/mp3/xx.mp3测试看看能否正常播放。然后运行amixer命令或者控制器,我这里获取到是“Speaker”,在编辑/etc/mpd.conf文件和/etc/init.d/mpd文件时会用到。

root@OpenWrt:/etc# amixer

Simple mixer control 'Speaker',0

Capabilities: pvolume pswitch pswitch-joined

Playback channels: Front Left - Front Right

Limits: Playback 0 - 151

Mono:

Front Left: Playback 83 [55%] [-12.81dB] [on]

Front Right: Playback 83 [55%] [-12.81dB] [on]

Simple mixer control 'Mic',0

Capabilities: pvolume pvolume-joined cvolume cvolume-joined pswitch pswitch-joined cswitch cswitch-joined

Playback channels: Mono

Capture channels: Mono

Limits: Playback 0 - 127 Capture 0 - 16

Mono: Playback 64 [50%] [11.99dB] [off] Capture 9 [56%] [13.39dB] [on]

Simple mixer control 'Auto Gain Control',0

Capabilities: pswitch pswitch-joined

Playback channels: Mono

Mono: Playback [on]

vi编辑/etc/mpd.conf配置文件。内容如下:

//vi /etc/mpd.conf

#=== edit options as follows ===

music_directory"/tmp/extroot/mp3"

playlist_directory"/tmp/extroot/.mpd/playlist"

db_file"/tmp/extroot/.mpd/mpd.db"

log_file"/tmp/extroot/.mpd/mpd.log"

#error_file"/tmp/extroot/.mpd/mpd.error"

pid_file"/tmp/extroot/.mpd/mpd.pid"

state_file"/tmp/extroot/.mpd/mpdstate"

user"root"

group"users"

bind_to_address"0.0.0.0"

port"6600"

# use this if you want to use OSS audio output

audio_output {

type"alsa"

name"My ALSA Device"

device"hw:0,0"

format"44100:16:2"

mixer_control"Speaker" #Speaker是amixer命令获取到的

}

auto_update"yes"

gapless_mp3_playback"yes"

filesystem_charset"UTF-8"

id3v1_encoding"GBK"

#=== edit end ===

编辑/etc/init.d/mpd,修改如下:

# Set the initial volume to something manageable

[ -x /usr/bin/amixer ] && /usr/bin/amixer set PCM 40

改成

# Set the initial volume to something manageable

[ -x /usr/bin/amixer ] && /usr/bin/amixer set Speaker 80% >/dev/null 2>&1

然后将下面的

if [ -x /bin/nice ]; then

# This has real-time constraints, so let's at least tell the OS

# that this should have higher priority to avoid skipping

# when doing other things in the background.

nice -n -10

fi

改成

if [ -x /bin/nice ]; then

# This has real-time constraints, so let's at least tell the OS

# that this should have higher priority to avoid skipping

# when doing other things in the background.

nice -n -10 "/usr/bin/mpd"# nice -n -10的后面添加"/usr/bin/mpd"

fi

运行如下命令,正常的话,就可以用手机控制播放路由器上的音乐了。

root@OpenWrt:/etc/init.d/mpd enable

root@OpenWrt:/etc/init.d/mpd start

安卓手机端控制软件用“mpd播放器”。

方式二:手机推送音乐到OpenWrt上播放(播放的数据来源是手机)

此方式不需要usb hub和u盘。首先在openwrt源码目录下:

./scripts/feeds update -a

./scripts/feeds install -a

然后就是要加入gmediarender软件,openwrt没有这此软件包,需自行加入,添加gmediarender软件包的补丁文件gmrender.patch如下:

// gmrender.patch 文件

--- /dev/null2014-10-09 15:03:28.117439574 +0800

+++ feeds/packages/multimedia/gmediarender/files/gmediarender.config2014-10-15 11:09:43.520258640 +0800

@@ -0,0 +1,7 @@

+config gmediarender 'core'

+option enabled '1'

+option name 'OpenWrtRender'

+option mixer 'Speaker'

+option mixervolume '80%'

+option rendervolume '-10'

+option alsadevice 'sysdefault'

--- /dev/null2014-10-09 15:03:28.117439574 +0800

+++ feeds/packages/multimedia/gmediarender/files/gmediarender.init2014-10-15 14:14:06.004563683 +0800

@@ -0,0 +1,44 @@

+#!/bin/sh /etc/rc.common

+

+START=90

+STOP=10

+

+USE_PROCD=1

+PROG=/usr/bin/gmediarender

+

+start_instance()

+{

+config_get_bool enabled "$1" 'enabled' 0

+[ $enabled -eq 0 ] && return

+

+config_get name "$1" 'name' 'OpenWrtRender'

+config_get mixer "$1" 'mixer'

+config_get mixervolume "$1" 'mixervolume'

+config_get rendervolume "$1" 'rendervolume' '-10'

+config_get alsadevice "$1" 'alsadevice'

+uuid=`ip link show | awk '/ether/ {print "salt:)-" $2}' | head -1 | md5sum | awk '{print $1}'`

+

+[ -n "$mixer" -a -n "$mixervolume" -a -x "/usr/bin/amixer" ] &&

+/usr/bin/amixer set "$mixer" "$mixervolume" >/dev/null 2>&1

+

+if [ -n "$alsadevice" ]; then

+sinkparam="--gstout-audiosink=alsasink"

+deviceparam="--gstout-audiodevice=$alsadevice"

+fi

+

+procd_open_instance

+procd_set_param command "$PROG" -f "$name" -u "$uuid" --gstout-initial-volume-db=$rendervolume $sinkparam $deviceparam

+procd_close_instance

+}

+

+start_service()

+{

+config_load 'gmediarender'

+config_foreach start_instance 'gmediarender'

+}

+

+service_triggers()

+{

+procd_add_reload_trigger 'gmediarender'

+}

+

--- /dev/null2014-10-09 15:03:28.117439574 +0800

+++ feeds/packages/multimedia/gmediarender/files/gmediarender.hotplug2014-10-15 13:42:49.752511946 +0800

@@ -0,0 +1,15 @@

+case "$ACTION" in

+add)

+if [ -c "/dev/audio" ] &&

+!(pgrep -f gmediarender >/dev/null 2>&1) &&

+[ -x "/usr/bin/gmediarender" ]; then

+/etc/init.d/gmediarender start

+fi

+;;

+remove)

+if [ ! -c "/dev/audio" ] &&

+(pgrep -f gmediarender >/dev/null 2>&1); then

+/etc/init.d/gmediarender stop

+fi

+;;

+esac

--- /dev/null2014-10-09 15:03:28.117439574 +0800

+++ feeds/packages/multimedia/gmediarender/Makefile2014-10-15 11:20:44.788276874 +0800

@@ -0,0 +1,56 @@

+#

+# Copyright (C) 2013 OpenWrt.org

+#

+# This is free software, licensed under the GNU General Public License v2.

+# See /LICENSE for more information.

+#

+

+include $(TOPDIR)/rules.mk

+

+PKG_NAME:=gmediarender

+PKG_REV:=275

+PKG_VERSION:=r$(PKG_REV)

+PKG_RELEASE:=1

+

+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz

+PKG_SOURCE_URL:=https://github.com/hzeller/gmrender-resurrect/trunk

+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)

+PKG_SOURCE_VERSION:=$(PKG_REV)

+PKG_SOURCE_PROTO:=svn

+

+PKG_FIXUP:=autoreconf

+PKG_INSTALL=1

+PKG_REMOVE_FILES:=autogen.sh aclocal.m4

+

+include $(INCLUDE_DIR)/package.mk

+include $(INCLUDE_DIR)/nls.mk

+

+define Package/gmediarender

+  SECTION:=multimedia

+  CATEGORY:=Multimedia

+  DEPENDS:= +gstreamer +glib2 +libupnp

+  TITLE:=A Headless UPnP Renderer

+endef

+

+define Package/gmediarender/description

+  gmediarender implements the server component that provides UPnP

+  controllers a means to render media content (audio, video and images)

+  from a UPnP media server.

+endef

+

+CONFIGURE_ARGS+= \

+--with-build-cc="$(HOSTCC)" \

+--prefix="/usr"

+

+define Package/gmediarender/install

+$(INSTALL_DIR) $(1)/usr/bin

+$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/$(PKG_NAME) $(1)/usr/bin/

+$(INSTALL_DIR) $(1)/etc/config

+$(CP) ./files/gmediarender.config $(1)/etc/config/gmediarender

+$(INSTALL_DIR) $(1)/etc/init.d

+$(INSTALL_BIN) ./files/gmediarender.init $(1)/etc/init.d/gmediarender

+$(INSTALL_DIR) $(1)/etc/hotplug.d/usb

+$(INSTALL_DATA) ./files/gmediarender.hotplug $(1)/etc/hotplug.d/usb/10-gmediarender

+endef

+

+$(eval $(call BuildPackage,gmediarender))

--- /dev/null2014-10-09 15:03:28.117439574 +0800

+++ feeds/packages/multimedia/gmediarender/patches/000-add-std-c99-option.patch2014-10-15 14:15:45.816566435 +0800

@@ -0,0 +1,11 @@

+--- a/configure.ac2014-03-02 04:11:26.000000000 +0800

++++ b/configure.ac2014-09-04 14:28:02.000000000 +0800

+@@ -20,7 +20,7 @@

+ if test -n "$GCC"; then

+    EXTRA_GCC_DEBUG_CFLAGS="$CFLAGS"

+    EXTRA_GCC_DEBUG_CXXFLAGS="$CXXFLAGS"

+-   CFLAGS+=" -Wall -Wpointer-arith -Wmissing-prototypes -Wmissing-declarations -Wwrite-strings"

++   CFLAGS+=" -Wall -Wpointer-arith -Wmissing-prototypes -Wmissing-declarations -Wwrite-strings -std=c99"

+    CXXFLAGS+=" -Wall -Wpointer-arith"

+ fi

+

将补丁文件保存在openwrt源码目录下执行: patch -p0 < gmrender.patch,然后执 行命令:

./scripts/feeds update -i

./scripts/feeds install gmediarender

make menuconfig,选择需要的软件包:

Kernel modules-->Native Language Support-->kmod-nls-utf8

Kernel modules-->Native Language Support-->kmod-nls-cp437

Kernel modules-->Sound Support-->kmod-sound-core

Kernel modules-->Sound Support-->kmod-usb-audio

Libraries-->libupnp

Multimedia-->gmediarender

Multimedia-->gst-mod-autodetect

Multimedia-->gst-mod-flac

Multimedia-->gst-mod-id3demux

Multimedia-->gst-mod-mad

Multimedia-->gst-mod-ogg

Multimedia-->gst-mod-souphttpsrc

Multimedia-->gst-mod-wavparse

Multimedia-->gst-plugins-base

Multimedia-->gstreamer

make V=s编译。刷固件或安装上面编译的软件包,进入openwrt系统以后,执行命令:/etc/init.d/gmediarender start。正常情况下就可以用手机端软件直接推送音乐到路由上播放了。手机上的软件可以用UPnPlay或者BubbleUPnP。

备注:2014-10-15更新:gmediarender添加/etc/config/gmediarender和/etc/hotplug.d/usb/gmediarender文件,以及修改了/etc/init.d/gmediarender。目的是让gmediarender能像mjpg-streamer一样,在插入usb声卡后能让gmediarender服务自动运行,在移除usb声卡后自动的停止gmediarender服务。详情可以参看上面提供的gmrender.patch补丁文件。

用到的软件下载地址

linux sound usb声卡,openwrt上用usb声卡听音乐相关推荐

  1. 音乐服务器 linux,在 Ubuntu Linux 桌面上安装 spotify在线听音乐的步骤

    如何在 Ubuntu Linux 桌面上安装 spotify 来在线听音乐? Spotify 是一个可让你访问大量歌曲的数字音乐流服务.你可以免费收听或者购买订阅,可以创建播放列表.订阅用户可以免广告 ...

  2. linux 扫描网络打印机,在Debian上设置USB网络打印机和扫描仪服务器

    配置网络扫描仪 现在,我们将继续配置打印机服务器来共享扫描仪.首先,安装xsane,这是SANE--扫描仪快捷访问的前端: # aptitude install xsane 接下来,让我们编辑/etc ...

  3. linux登陆界面卡死_Linux 上最好的五款音乐播放器

    Jack Wallen 盘点他最爱的五款 Linux 音乐播放器. 不管你做什么,你都有时会来一点背景音乐.不管你是开发.运维或是一个典型的电脑用户,享受美妙的音乐都可能是你在电脑上最想做的事情之一. ...

  4. HG255d通过U盘搭载php服务器,转:利用block-extroot,让你的openwrt运行在USB设备上。...

    一.我需要这个功能吗? 如果你对跑openwrt的设备的要求仅仅是可以上上网,那下面的可以不用看了. openwrt运行在USB设备上的好处: 可以安装openwrt官方的N多软件了(但官方暂时没有m ...

  5. linux usb网卡驱动 ko,qf9700 USB网卡在x86 linux和arm linux上的驱动安装以及配置

    最近要在一块老板子上面移植openwrt,需要扩展网口,于是选择了qf9700这款USB网卡,附赠的光盘里面有提供在linux下面安装的驱动源代码,所以我们要自己编译驱动源代码生成内核加载模块,加载模 ...

  6. linux自动挂载fcoe存储,在sdb上挂载USB 设备

    在主机上挂载 USB 设备后我们查看系统当前磁盘设备: 1. [root@FCoE ~]# fdisk -l 2. 3. Disk /dev/sda: 43.0 GB, 42991616000 byt ...

  7. ok6410如何驱动NW336无线网卡.更新zd1211b到kernel 2.6.15上.成功在Linux下安装TP-LINK TL-WN322G+ 54M无线USB网卡驱动

    WN322G+ 使用ZD1211b芯片,BT3内核已包含该芯片的驱动,可还是有不少人反映用lsusb能够看到网卡的信息,但Ifconfig -a 却没有该网卡,既然有驱动为什么用不了? 在网上搜寻多时 ...

  8. Linux下的硬件驱动——USB设备(上)(驱动配置部分)

    USB设备越来越多,而Linux在硬件配置上仍然没有做到完全即插即用,对于Linux怎样配置和使用他们,也越来越成为困扰我们的一大问题.本文着力从Linux系统下设备驱动的架构,去阐述怎样去使用和配置 ...

  9. ubuntu18 usb耳机,ubuntu18.04 调试USB声卡

    由于项目需要进行声音播放,但是主板上没有声卡模块就使用USB外接声卡来实现音频播放. (项目使用ubuntu18.04的系统) 首先我们在主板上插入USB声卡,在终端中输入:lsusb $ lsusb ...

  10. 《Linux总线、设备与驱动》USB设备发现机制

    http://blog.csdn.net/tankai19880619/article/details/11639185 说明:本分析基于mstar801平台Linux2.6.35.11内核,其他内核 ...

最新文章

  1. JAVA基础中关于double进制问题的解析
  2. VC++使用静态库,msvcrt.lib连接错误
  3. 【KubeVela 官方文档翻译】,欢迎大家踊跃参与
  4. Android之Handler用法总结(1)
  5. margin的简单应用
  6. Qt容器类(总结)(新发现的QQueue和QStack,注意全都是泛型)
  7. eclipse各个版本的区别
  8. Webstorm 下的Angular2.0开发之路
  9. 配置ftp方式的yum源的各种排错
  10. linux tcp 断网重连,LIS接口与串口服务器的KeepAlive的重连机制
  11. @pathvariable参数_SpringMVC 五种注解参数绑定
  12. docker常用操作和命令
  13. Unity+JetBrainsRider2020+EmmyLua调试Lua(XLua)
  14. android浏览器测试,Android多款手机浏览器页面加载测试横评
  15. 前端 原型对象中this的认识
  16. Activity的七大生命周期
  17. 06.简书项目实战三:详情页面和登录功能实现
  18. 免费收录网站搜索引擎登录入口大全
  19. 福利!!!Python爬取好看的妹子图!!!
  20. Webbench源码分析之多进程(三)

热门文章

  1. 计网实验二——以太帧、IP报文分析
  2. Java八大基本数据类型
  3. java数组动态长度_JAVA中如何动态改变数组长度 动态数组 arraycopy
  4. 基于umijs+lerna+qiankun的微前端实现
  5. php图文编辑,ThinkPHP整合百度Ueditor编辑器的图文教程
  6. ERStudio8.0 破解版 下载 download
  7. 基于OpenCV的银行卡号识别系统实现(三)-----输入图像的处理+代码实现
  8. 基于MATLAB的银行卡号识别算法研究
  9. 微信小程序_阿里云api人脸识别
  10. EasyRecovery最新免费专业版数据恢复软件