作为一个广播爱好者,想要在widora上听广播的想法是从这篇文章开始的 http://www.crystalradio.cn/thread-466848-1-1.html 。
原先在树莓派上装过mplayer来听广播,感觉非常不错,可以定时播放,用GPIO控制,很有玩头。 但是,在openwrt里用mplayer听广播的资料还是很少的,因为路由器的SOC内没有浮点运算单元,mplayer默认对wma格式音频的解码库是浮点的,解码方式必须改为定点解码,对我这种纯粹的业余玩家来讲,难度太大了。 机缘巧合,一天正好手头在玩widora, 突然在矿坛上发现了这篇文章,顿时兴趣大增,马上找到作者的QQ号, 发信息求教。 没想到nil大神很快回复了我,并且在网上找到wma定点解码的patch提供给了我,于是就开始折腾起来了。。。。。。。
第一次交叉编译通过的mplayer支持OSS音频系统,发现噪音比较严重,需要强制转换采样率,不过播放出来的音质非常不错。 我尝试着使mplayer支持ALSA音频系统, 试验了几次,好运降临,居然成功了,这次发现22.05k ,44.1k采样率的节目可以流畅播放,其他采样率的节目,比如48k,就有周期性的噪音。 现实无完美,总是会有缺憾啊!
现在将源码和执行文件晒在这里,希望高手马能解决这些问题。也希望芒果哥能把widora的音频搞得更精彩点。
0_1477498200010_mplayer-alsa.rar
0_1477498205114_mplayer-oss.rar
源码在这里:
http://pan.baidu.com/s/1o8B2S0y44
mplayer-alsa杂音问题是alsa没有配置好,需要在/etc下建立asound.conf文件,内容如下:
pcm.!default {
type plug
slave.pcm “dmix”
}
再播放mplayer-alsa,各种采样率的节目都OK了! 当然也有缺憾,就是非48k采样率节目启动时间较长,因为mixer默认先自动转成48k的采样率, 也可以自己设成44.1k等。
说明alsa的mixer通道(应该也是调用mmap) 是正常的. 程序直接走alsa的声卡通道hw:0,0有问题,有杂音. (非专业,说的不对请见谅.)
你好,请问能请教下mplayer怎么移植到widora上吗?网上找了许久资料都没啥进展
发现用mplayer在暂停播放或发生underflow时候,会不断重复播放缓存中的一小段数据,不知道是FIFO pipe的原因 还是aplay的原因. 旧版的widora系统没有这问题.
如何制作ipk文件见:
http://sns.widora.io/topic/70/如何将一个应用程序添加到widora-openwrt源代码体系中/9
用 alsamixer 或 amixer set 3D on / amixer set 3D 15 可以得到3D音效
郑州音乐台的3D音效非常棒! mms://218.28.9.99/yinyue
为方便喜欢听网络广播的widora-neo玩家,这两天试着将mplayer整合到widora最新固件中,目前只是将编译完成后的mplayer和相关文件放在widora根目录的files/mplayer文件夹中,然后编译打包固件。自己试用了一下,感觉还是挺好用的,现将固件分享在这里。http://pan.baidu.com/s/1i57INGT
使用说明:
0. 在刷入新固件前,有必要的话请备份你的widora系统: dd if=/dev/mtd3 of=/tmp/firmware-backup.bin 把它保存到电脑或u盘中以备后用。
-
刷入新固件,用connect2ap SSID PASSWORD 命令连接上网络.
-
启用SSH (这一步不做也没关系,主要为了方便,从串口登录会跳出很多信息。)
2.1 编辑防火墙设置 vi /etc/config/firewall 将里面的reject改称ACCEPT,
2.2 然后重启下firewall 运行命令: /etc/init.d/firewall reload
2.3 用passwd命令设置一下root密码
2.4 从ssh登陆widora
-
ls /mplayer 看一下根目录下mplayer, 里面已经存放了所需的文件和一点mms广播地址。
-
用alsamixer 命令调节好Speaker或Headphone的音量,不然音量太大,可能得吓你一跳!
-
用mplay命令播放网络广播,有的节目可能要稍等一会。
5.1播放单音轨广播节目,比如
/mplayer/mplay mms://58.211.0.53/948 (自在苏州)
5.2播放多音轨广播节目,比如:
/mplayer/mplay -aid 2 mms://mediasrv1.iptv.xmg.com.cn/yinyue (厦门音乐 第2音轨. 目前只有厦门各台是多音轨的)
5.3播放广播节目列表 (radio.list已经放在mplayer目录下)
/mplayer/mplay -playlist /mplayer/radio.list
5.4 播放playlist时候可以登录到另一个ssh,用echo向mplayer发送指令 (最好用screen将mplayer放到后台)
比如 向前移动2个节目:
echo “pt_step 2” >/mplayer/slave
比如 静音:
echo mute >/mplayer/slave (再发一次可解除)
-
播放mp3
比如 /mplayer/mplay /usb/1.mp3
(也可以先用 ls -1 /usb/*.mp3 >mp3.list 做一个playlist,然后再来播放)
-
建议安装screen, 这样可以让mplayer在后台运行 ,即使你退出ssh它也不会退出。 可以用命令直接下载:wget http://downloads.openwrt.org/chaos_calmer/15.05.1/ram
ips/mt7688/packages/packages/screen_4.3.1-1_ramips_24kec.ipk
(也可以 在这里下:)
然后安装: opkg install screen_4.3.1-1_ramips_24kec.ipk
mplayer放入后台运行:screen /mplayer/mplay -playlist radio.list (ctrl+a 再按下d)
用echo发指令给后台的mplayer可以实现换台,调音量,静音等功能。
其他: 参考下网络上mplayer的使用方法,可以灵活地把widora-neo打造成自己喜欢的音乐盒,mooring caller,英语学习机等等…
用摩托罗拉手机电池供电播放电台和音乐,标称 3.8V 1735mAh, 续航力~3小时50分
点击听MP3视频
点击听网络电台视频
目前发现mplayer播放32kbps流/44.1K采样率的节目会有"兹拉"声,似乎是wma定点解码库的问题。
可以试验下:
-------------------- 播放下面的节目有"兹拉"声 ------------------------
陕西新闻广播 mms://218.30.15.203/news ---- 32kbps — 44.1k ---------
陕西陕广新闻 mms://218.30.15.203/city ---- 32kbps — 44.1k ---------
陕西经济广播 mms://218.30.15.203/encnomy ---- 32kbps — 44.1k ---------
陕西交通广播 mms://218.30.15.203/traffic ---- 32kbps — 44.1k ---------
-------------------- 播放下面的节目 OK ------------------------
陕西音乐广播 mms://218.30.15.203/music ---- 48kbps — 48k ---------
陕西农村广播 mms://218.30.15.203/country ---- 48kbps — 48k ---------
陕西戏曲广播 mms://218.30.15.203/opera ---- 48kbps — 48k ---------
陕西青春广播 mms://218.30.15.203/kids ---- 48kbps — 48k ---------
陕西故事广播 mms://218.30.15.203/story ---- 48kbps — 48k ---------
以此搞一个小结。
手机APP控制mplayer
点击看视频 http://player.youku.com/player.php/sid/XMTcwNTg3MzE2MA==/v.swf
…pause 命令输错,哈哈。
把mplayer运行在后台的slave模式,然后用python控制它,下载个手机TCP控制APP, 这样就可以遥控了。。。。(开关显示多余)

详见《Python 核心编程》 -Wesley J Chun
TCP实现时间戳服务器和客户端
2013-02-01 作者:sam_linux
[python]代码库
view sourceprint?
#! /usr/bin/env python
#服务器(tsTserv.py)
from socket import *
from time import ctime
HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)
tcpSerSock = socket(AF_INET,SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)
while True:
print 'Waiting for connection...'
tcpCliSock,addr = tcpSerSock.accept()
print '...connection from:',addr
while True:
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
tcpCliSock.send('[%s] %s' % (ctime(),data))
#tcpCliSock.close() 不关掉会报错
tcpSerSock.close()
=====================================================
#! /usr/bin/env python
#客户端(tsTclnt.py)
from socket import *
HOST = '192.168.1.190'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)
tcpCliSock = socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR)
while True:
data = raw_input('> ')
if not data:
break
tcpCliSock.send(data)
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
print data
tcpCliSock.close()
==========================================================
服务器运行
[root@dogood core16]# python tsTserv.py
Waiting for connection...
...connection from: ('192.168.1.110', 1050)
Waiting for connection...
==========================================================
客户端运行
>>>
> How do you do?
[Thu Jan 31 06:46:27 2013] How do you do?
> 我很好
[Thu Jan 31 06:46:40 2013] 我很好
> ''
[Thu Jan 31 06:46:50 2013] ''
>
>>>
试验了一下用GPIO控制 视频:widora-网络收音机-试验 视频
mplayer-alas通过dmixer的方式播放需要经过一步采样率转换 (如果你的alsa内设dmixer的采样率是48k的话,那么44.1k,32k,22.05k等采样率的节目加载就比较慢),对于没耐心的听众来说简直是折磨! 下面提供的方法保证可以快速播放:
先建立一个fifo管道:
mkfifo -m 777 /home/radiofifo
让mplayer-oss输出pcm到radiofifo:
./mplayer-oss -ao pcm:file= /home/radiofifo -cache 512 -cache-min 5 mms://192.192.159.129:8080 &
(后面加&,让它在后台运行。cache可以自己设,不过我觉得这样最佳。)
用aplay播放radiofifo (你的widora中应该装有alsa系统,aplay是alsa的一个工具.)
aplay -M /home/radiofifo
可以听到干净利落的声音了吧!
把以上的结合起来,写一个脚本 fplay (怎么写? 复习一下shell和linux吧,我也是常忘。)
然后就可以直接这样:
fplay mms://218.28.9.99/yinyue
是不是很爽阿!
另外,还是期待老大发表完美音频版. 这样,以上的种种都可以免了.