修改XBMC LiveStreams Python插件以支持中文
本文同步自(最佳显示效果请点击):https://zohead.com/archives/xbmc-livestreams-cn-patch/
最近在闲时捣鼓下 Raspberry Pi 微型电脑板上的开源 XBMC 应用准备看看 HTPC 媒体中心的效果,发现 Raspberry Pi 在安装了 XBian 系统之后可以比较好的实现 XBMC 的基本功能,虽然由于 Raspberry Pi 没有购买一些视频格式的软件解码授权而导致 WMV 或者 MMS 之类的格式无法播放,但对于常用的一些 H264 的高清视频已经足以应付,接上网线之后看高清在线视频点播和直播的效果都还可以。
有关 Raspberry Pi 请参考 [之前] 的文章,有关 XBian 之一专门为 Raspberry Pi 优化的 XBMC 系统可以访问其官网:http://xbian.org/。
注:Raspberry Pi 上除了 XBian 之外,还有 Raspbmc、Openelec 等其它合适的 XBMC 系统可供选择的。而且这些都是基于标准 XBMC 程序修改的,标准插件之类的基本可以通用。
前两天找到一个不错的在线电视直播的 XBMC 插件:LiveStreams,此插件可以由用户自己修改 XML 配置文件增加在线直播的地址,根据实际硬件配置不同,可支持 MMS、RTSP、RTMP 等各种不同的流媒体协议。有关 LiveStreams 的介绍和配置请参考这些链接(特别第二个链接中有详细的截图介绍):
http://forum.xbmc.org/showthread.php?tid=97116
http://www.xbmchub.com/blog/2012/04/26/adding-custom-xml-files-to-the-live-streams-addon/
最新版本的 LiveStreams 插件可以到这里下载:http://code.google.com/p/divingmules-repo/。
在实际使用过程中发现由于 LiveStreams 由于是老外写的,不由自主的就碰到对中文的支持问题,如果添加的 XML 配置文件中节目名称或者节目目录名称包含中文,XBMC 系统中LiveStreams 插件将不能正常工作,直接会出现脚本错误。
简单看了下 LiveStreams 插件的代码,是用 Python 写的,凭着一些简单的 Python 基础,然后集合 Python 的 logging 模块来调试,终于发现 LiveStreams 插件对中文支持不佳的原因,作者在使用 BeautifulSoup(参考 [这里]) 这一个非常知名的 HTML/XML 等解析的库时未考虑非英文环境下的问题,简单做了下修改之后,中文的直播节目和目录名称都可以正常显示了。
顺便再简单说明一下 LiveStreams XML 配置文件嵌套节目目录的方式,这是一个实例 XML 节目配置文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <channels> <channel> <name>Channel 1</name> <thumbnail>http://xxx/chn1.png</thumbnail> <items> <item> <title>TV1</title> <link>mms://xxx.xxx.xxx.xxx/cctv1</link> <thumbnail>http://xxx/cctv1.jpg</thumbnail> </item> <item> <title>TV2</title> <link>mms://xxx.xxx.xxx.xxx/cctv2</link> <thumbnail>http://xxx/cctv2.jpg</thumbnail> </item> </items> </channel> <channel> <name>Channel 2</name> <thumbnail>http://xxx/chn2.png</thumbnail> <subchannels> <subchannel> <name>Sub 1</name> <thumbnail>http://xxx/sub1.png</thumbnail> <subitems> <subitem> <title>Sub TV1</title> <link>mms://xxx.xxx.xxx.xxx/subtv1</link> <thumbnail>http://xxx/subtv1.jpg</thumbnail> </subitem> <subitem> <title>Sub TV2</title> <link>mms://xxx.xxx.xxx.xxx/subtv2</link> <thumbnail>http://xxx/subtv2.jpg</thumbnail> </subitem> </subitems> </subchannel> </subchannels> </channel> </channels>
第一个节目目录 Channel 1 下面没有子目录,只有 TV1 和 TV2 这两个节目,因此 XML 层次是 channel/items/item。第二个节目目录 Channel 2 下有名为 Sub1 的子目录,Sub1 下又有 Sub TV1 和 Sub TV2 两个节目,这种的 XML 层次则是:channel/subchannels/subchannel/subitems/subitem。
需要注意的是 LiveStreams 的 XML 配置文件必须以 UTF-8 编码格式保存,否则非英文字符将无法正常显示。另外由于 XML 本身格式的原因,XML 内容中的这些字符需要转换(全部为纯英文字符,包括结束的分号):
& 转换为 &
< 转换为 <
> 转换为 >
‘ 转换为 '
“ 转换为 "
最后附上我修改过的最新 LiveStreams 1.0.6 版本 XBMC 插件的下载地址:
http://miseal.googlecode.com/files/plugin.video.live.streams-1.0.6.zip
由于这插件只是随便修改的,有任何问题欢迎指正哦。 ^_^
大弓:
Wednesday October 30th, 2013 02:42 PM
请教下博主,我在用livestream这个插件时遇上这样的问题。利用urlsnooper抓取到凤凰卫视的直播地址如下:rtmp://61.182.132.35:1755/157/50756/100024?swax_k=_ver_tm_ar_sig&swax_v=_1.0_1383123240_142_126c44c0e7;这个地址直接放入VLC播放器中能正常播放,但是将这个地址放入livestream的xml文件中添加后就无法播放,xbmc.log里面能找到提示错误“ERROR: RTMP_ReadPacket, failed to read RTMP packet header”及“ERROR: CDVDPlayer::OpenInputStream - error opening”
下面是我自定义的xml文件部分内容:
测试
rtmp://61.182.132.36:1755/ playpath=157/50756/100024?swax_k=_ver_tm_ar_sig&swax_v=_1.0_1383120131_142_f9b15affb9 swfUrl=http://h3.ifengimg.com/34c4a1d78882290c/2013/0219/aplayer_r1_27.swf pageUrl=http://v.ifeng.com/live/#B4030356-977D-4258-A696-9739DB90F590
请问我这样的问题是出在哪?可能的话能否解释下xml文件中Playpath、swfUrl、pageUrl、live这些参数的含义及作用?谢谢!
admin:
Wednesday October 30th, 2013 03:35 PM
一个RTMP地址的格式是这样:
rtmp[e]://host[:port]/app/playpath
因此对于你给的地址应该是:
playpath 为 50756/100024?swax_k=_ver_tm_ar_sig&swax_v=_1.0_1383123240_142_126c44c0e7
pageUrl 就是看直播视频的那个网页的地址了
swfUrl 就是那个网页实际用的SWF播放器的地址
live 表示是否是直播视频
另外保存在XML配置文件中需要注意特殊字符的转义处理,完整的应该是这样:
你可以试试看
PS:有好的 livestreams 频道配置文件欢迎共享哈~~~