让 minidlna 支持 rmvb、gb2312 mp3 标签

各位一定认为minidlna最大的遗憾是不支持rmvb,我是这么觉得。minidlna是通过ffmpeg库获取媒体文件的metadata,ffmpeg早已经支持rmvb,很多国产Pad芯片解决方案都可以实现对rmvb的硬解,现在arm cpu的性能软解也不是问题。想不明白为什么minidlna一直没有加入对rmvb的支持。或许是考虑到了很多dlna renderer不支持rmvb。如此只能自己尝试hacking一下了。minidlna启动后会扫描分析指定的目录,然后将信息写入sqlite数据库,而和客户端传输数据用的http协议,http协议和文件格式无关,所以只要让minidlna的scanner认识rmvb即可。结果一定是OK的,我用的MW4530R路由器,在MELE A1000 下使用BunbbleUPNP测试没问题,不过只能软解。最后建议您安装libffmpeg-full,默认可能是libffmpeg-mini,后者支持的文件格式有限,使用前者我的所有视频现在都可以被正确的加入minidlna。

在默认情况下如果mp3文件的id标签使用了gb2312编码,openwrt下的minidlna里会显示乱码,只有将id转换成utf8才能正常显示,这其实不是minidlna的问题而是编译时使用的iconv库的语言支持不完整。执行make menuconfig 进入 Global build settings 选中Compile with full language support,重新编译minidlna 这时使用的iconv库就是libiconv-full。这个packages里有个 100-strip_charsets.patch 的patch 给这个包缩减了很多语言包括cp936,也就是gb2312的支持,所以要去掉这个patch。或者您自己修改一下这个文件把cp936相关中文支持加上。启动minidlna前export LANG=zh_CN.UTF-8,minidlna就可以正常支持gb2312编码了。

以上工作是在openwrt 12.09和minidlna 1.0.24下进行的。把我做的patch放上来,如果您自己编译openwrt的固件,把这个文件放在attitude_adjustment/feeds/packages/multimedia/minidlna/patches目录下,编译时会自动应用该补丁。共patch了4个文件,其实只patch前两个就可以了。
999-realmedia-support.patch

以下是我自己编译出来支持rmvb gb2312标签的安装包:
minidlna_1.0.24-1_ar71xx.ipk

全部语言支持的libiconv-full:
libiconv-full_1.11.1-1_ar71xx.ipk

如果安装时提示md5 miss match 删除 /var/opkg-list/ 下的文件再安装。

向openwrt 源码添加水星MW4530R支持

最近又从淘宝入手了一台改过机的水星 MW4530R 双频无线路由器,原厂、Openwrt双Flash,双系统。原厂固件Flash 8M,Openwrt固件Flash 16M。Openwrt官方并没有提供对MW4530R的支持,但它比TPLink WDR4300 硬件只少了一个usb口,所以4530的固件都是从4300固件修改来的。我买的这台机子里刷的是思山论坛某个同学自己编译的固件,里边集成了一堆我从来不用的包和功能,我怎么能忍得了呢,于是决定自己动手定制自己的固件。好在之前有折腾WR703N的经验,只把需的软件包和做好的配置文件(ADSL,无线AP 等)集成到固件里,刷好机直接用,不用再折腾。既然要动手就想彻底点,向openwrt官方源码里加入对MW4530R支持,直接编译出MW4530R的可用的固件。经过这两天的研究搞定了,现把方法共享一下。菜鸟一个有错误欢迎批评指正。

先简单说明一下思路,方便您理解后边的操作。MW4530R本身就是水星出的WDR4300的马甲,那就在Openwrt源码中给WDR4300套上个马甲就是MW4530R了。我是基于官方branches/attitude_adjustment源码做的,大概需要以下几步:
1.新增MW4530R Profile,在make menuconfig时选择
2.内核中添加MW4530R设备的识别(只是识别,代码还用WDR4300,马甲吗)
3.修改固件内的脚本,加入MW4530R支持,以便正确配置固件
4.编译完成后生成MW4530R的固件

上述操作的第2步我已经做成了patch,这个patch可能会随着openwrt的更新失效。不过我使用的是分支代码,基于不会有太大的改对或增加新设备支持,所以这种可能是比较小的。其它几步的操作要分别对下面的文件进行修改:

 target/linux/ar71xx/generic/profiles/tp-link.mk
 target/linux/ar71xx/base-files/lib/ar71xx.sh
 target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 target/linux/ar71xx/base-files/etc/uci-defaults/leds
 target/linux/ar71xx/base-files/etc/uci-defaults/network
 target/linux/ar71xx/base-files/etc/diag.sh
 target/linux/ar71xx/image/Makefile

在开始之前提些建议给您。先准备好svn代码,然后选择一个设备进行一次完整的编译,这个过程中会下载编译内核、包的源码,这样可以保证制作MW4530固件的过程比较顺利节省时间。另外openwrt源码结构很模块化,所以不用每次修改之后都 make clean然后再make 太耗时,假如你只修改了target文件夹里的内容,只需要make target/linux/clean,然后再make 就可以生效;如果修改了tools的源码只需要 make tools/clean;如果修改了某个package,执行 make package/<包名>/clean 即可。

平时工作娱乐都是用linux,整个过程是在Linuxmint14 64位下进行的。
准备源码过程就不细说了按顺序执行下面命令:

 svn export svn://svn.openwrt.org/openwrt/branches/attitude_adjustment/
 ./scripts/feeds update -a
 ./scripts/feeds install -a

下面所有的命令都以attitude_adjustment为当前目录,下面正式开始。 Continue reading

busybox for openwrt 12.09 rc1(ls支持中文 )

openwrt ls命是busybox提供的,中文通通显示为???,google了一些资料,重新配置编译了一下busybox,中文能正常显示了。

先搭建好交叉编译环境(不在本文讨论范围内),我用的openwrt 12.09 rc1 的源码路由器是WR703N。进入源码目录make menuconfig,进入Base System -> Busybox -> Busybox Settings -> General Configuration 配置页面,按下面所示配置busybox(195101的值是根据参考文章中的十六制值得来的)保存配置。

 [*] Support Unicode                                                                                                                                         │ │  
 [ ]   Check $LANG environment variable                                                                                                                      │ │  
 (195101) Character code to substitute unprintable characters with                                                                                           │ │  
 (195101) Range of supported Unicode characters                                                                                                              │ │  
 [*]   Allow zero-width Unicode characters on output                                                                                                         │ │  
 [*]   Allow wide Unicode characters on output                                                                                                               │ │  
 [*]   Bidirectional character-aware line input                                                                                                              │ │  
 [*]     In bidi input, support non-ASCII neutral chars too                                                                                                  │ │  
 [*]   Make it possible to enter sequences of chars which are not Unicode

然后执行make package/busybox/compile,编译完成后在build_dir/target-mips_r2_uClibc-0.9.33.2/busybox-1.19.4/ 找到新生成的busybox可执行文件,替换掉openwrt的/bin/busybox文件即可。

下面是我自己编译的版本,用之前最好先测试,比如把busybox传到/root目录下,创建ls软链接 ln -s /root/busybox /root/ls,然后执行/root/ls <含中文文件名的文件夹> ,如果可以正常执行并且中文显示正常,再替换掉/bin/busybox。

下载busybox

参考文章:

openwrt+xbmc 媒体中心演示

昨天从淘宝买的4 port 外置电源的usb3.0 hub到了,用于弥补wr703n路由器usb口不够用和电力不足的问题,做了一系列的应用测试,运行稳定,没有出现类似以前移动硬盘读写时突然丢失要重新插拔的情况。我的小心情又开始有点……,就忍不住要拿出来再秀一秀。

我再简单介绍下各个装备,就不上图了,直接看视频吧,如果不明白还可以参照之前我写的一篇文章《菜鸟初玩openwrt》Continue reading

菜鸟初玩 openwrt

在一个月前其实根本不知道openwrt为何物,或许它曾在我眼前出现过,终因无缘被我淡忘。这次奇遇缘起寻找一款支持vpn的路由器,google中出现最多的就是openwrt ddwrt,对两者进行了简单了解,我觉得openwrt可能更合适一点,而且功能远不是当初我能想像的,有人给路由器扩展usb 结合wrt 搞出很多有趣的玩意,这让我想起了几天前刚刚看到的tplink一款3g无线路由器 wr703n ,正好有一个usb口,在openwrt的supported device中查找wr703n 还真找到了。不过wr703n这种配置是有点难受 32m ram 4m flash,随后在淘保找到一个店家,采购了一个ram升级到64m flash升到8m的版本。几日到手后开始了近一个月的研究折腾。 Continue reading