导入:wma定点解码mplayer -- 制作简单的网络收音机 (midas-zhou)
-
作为一个广播爱好者,想要在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/1o8B2S0y44mplayer-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有问题,有杂音. (非专业,说的不对请见谅.)
-
试验了一下用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是不是很爽阿!
另外,还是期待老大发表完美音频版. 这样,以上的种种都可以免了. -
-
把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] '' > >>>
-
用摩托罗拉手机电池供电播放电台和音乐,标称 3.8V 1735mAh, 续航力~3小时50分
目前发现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 命令输错,哈哈。
-
为方便喜欢听网络广播的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,英语学习机等等.....
-
-
用 alsamixer 或 amixer set 3D on / amixer set 3D 15 可以得到3D音效
郑州音乐台的3D音效非常棒! mms://218.28.9.99/yinyue -
如果有做好的固件的话我都迫不及待的想刷进去玩了
-
发现用mplayer在暂停播放或发生underflow时候,会不断重复播放缓存中的一小段数据,不知道是FIFO pipe的原因 还是aplay的原因. 旧版的widora系统没有这问题.
如何制作ipk文件见:
http://sns.widora.io/topic/70/如何将一个应用程序添加到widora-openwrt源代码体系中/9 -
你好,请问能请教下mplayer怎么移植到widora上吗?网上找了许久资料都没啥进展
-
@freshmangdut 试试下面:
-
把这里的这个包 https://github.com/midaszhou/mplayer_pack 克隆放到~/openwrt_widora/package 下面。
-
然后在~/openwrt_widora/.config 配置文件中增加一行:
CONFIG_PACKAGE_mplayer_pack=m
即让系统编译成独立模块,如果要编入固件就写y. -
在~/openwrt_widora目录下执行 make package/mplayer_pack/compile V=99
成功的话会在 ~/openwrt_widora/bin/ramips/packages/base 目录下生成ipk安装文件.关键是mplayer_pack下的Makefile文件,我也是试了多次,针对编译中缺少库的提示直接在Makefile中写了链接位置让它能找到,做法比较傻。
抛砖引玉,希望高手可以写个比较标准的Makefile.
-