WiFi PDA在线接收Podcast的实践

众所周知,Podcast并非iPod专用,实际上任何一台mp3播放机都可以接收Podcast——只是没iPod方便而已。不过这次我要做的是,用一台带wifi的PDA在线接收Podcast。所谓“在线”是什么意思呢?就是不需要像传统iPod做的那样,先是由iTunes软件自动更新、下载节目,然后再同步到iPod上,而是将带有节目地址信息的播放列表发送到PDA上,再由PDA上的多媒体软件在线连接这些节目,然后播放。

这样做的好处是:

  • 无需下载。PDA能用的空间比较拮据,不像iPod或者其他播放器那样动辄几G几十G,而Podcast节目(尤其是视频)一般都很大,为了新节目删除老节目总是很痛苦的。
  • 同时带来的优点是:更新、同步很快。因为只更新、发送大小仅数K的播放列表,所以不用再忍受iTunes慢吞吞的下载速度和同步速度。
  • 为PDA带来新用法,这正是我最开心的。
  • 当然,这样做也有缺点:

  • 无需下载节目使用就意味着你必须处于有wifi网络的环境,所以不能想像如同iPod那样在公交车上也可以听Podcast。
  • 受限于国内网络的状况,一部分的Podcast视频节目不能很流畅地观看。这个挺要命的。
  • 所谓“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>下的<item>块里,节目地址在<url>块,节目标题在<title>块,够了,目前我们只要这两个信息。

    然后随便用哪种编程语言,把这些块分析出来,写到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打开列表

    TCPMP打开列表

    (完)

    Leave a Reply

    You must be logged in to post a comment.

    Theme Brought to you by Directory Journal and Elegant Directory