WiFi PDA在线接收Podcast的实践
众所周知,Podcast并非iPod专用,实际上任何一台mp3播放机都可以接收Podcast——只是没iPod方便而已。不过这次我要做的是,用一台带wifi的PDA在线接收Podcast。所谓“在线”是什么意思呢?就是不需要像传统iPod做的那样,先是由iTunes软件自动更新、下载节目,然后再同步到iPod上,而是将带有节目地址信息的播放列表发送到PDA上,再由PDA上的多媒体软件在线连接这些节目,然后播放。
这样做的好处是:
当然,这样做也有缺点:
所谓“WiFi PDA在线接收Podcast”说起来很简单,因为Podcast其实就是一种特殊的RSS,订阅Podcast跟订阅博客差不多是一回事,它们都是通过xml文件作为接口,所以我们要做的就是把Podcast的xml文件转成PDA播放软件能读懂的播放列表文件。
我选择的是Windows Mobile上的万能播放器——TCPMP,它支持一种pls文件格式,其结构如下:
[playlist]
File1=sample.mp3
Title1=sample1
Length1=285
File2=http://someurl/1.mp3
Title2=sample2
Length2=263
File3=no1.mp3
NumberOfEntries=4
Version=2
很简单,不用多作解释。其中[playlist]、文件地址、NumberOfEntries、Version是必须的,其他可以忽略,再打开一个Podcast的订阅文件地址,可以看到其节目一般包含在<channel>
然后随便用哪种编程语言,把这些块分析出来,写到pls文件里就行了。因为我正在学习php,所以就用它来做这事了。惭愧的是,我并没有用DOM或者SAX来解析xml文件,而是用了正则表达式,理由?没有……就是觉得方便一点。反正是个人之用,为达目的不择手段了。
下面是解析的核心代码:
//$xml_url是订阅地址
$f = fopen( $xml_url, ‘r’ );
while( $data = fread( $f, 4096) ) { $xml .= $data; }
fclose( $f );preg_match_all( “/\<item\>(.*?)\<\/item\>/s”, $xml, $itemblock );
foreach( $itemblock[1] as $block )
{
preg_match_all(
“/\x20url=\”(.*?)\”\x20/”, $block, $url );preg_match_all(
“/\<title\>(.*?)\<\/title\>/”, $block, $title );
//为了以后方便更新,还要读出发布日期。preg_match_all(
“/\<pubDate\>(.*?)\<\/pubDate\>/”, $block, $pubDate );//处理读出来的值,将其按格式保存到pls文件里。
//要注意它们都是数组,其[1][0]元素才是我们想要的。
//这里很简单,就不写了。……
}
文件列表出来后,把它发送到PDA,打开wifi,播放,嗯,优美的音乐响起了。
为了方便管理,我还用MySQL储存了我喜爱的Podcast节目,做了简单的自动更新、自动生成列表、删除节目等功能。现在,除了不能像iTunes Store那样方便地查找节目、不能离开网络、不能播放一部分视频之外,一切都很完美了。
以下附图:
Podcast管理界面
生成的播放列表
TCPMP打开列表
(完)
Leave a Reply
You must be logged in to post a comment.



