修改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 之外,还有 RaspbmcOpenelec 等其它合适的 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 内容中的这些字符需要转换(全部为纯英文字符,包括结束的分号):

& 转换为 &amp;
< 转换为 &lt;
> 转换为 &gt;
' 转换为 &apos;
" 转换为 &quot;

最后附上我修改过的最新 LiveStreams 1.0.6 版本 XBMC 插件的下载地址:

http://miseal.googlecode.com/files/plugin.video.live.streams-1.0.6.zip

由于这插件只是随便修改的,有任何问题欢迎指正哦。 ^_^