修改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

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

2 条评论 在此博文.
  1. 大弓:

    请教下博主,我在用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这些参数的含义及作用?谢谢!

  2. admin:

    一个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配置文件中需要注意特殊字符的转义处理,完整的应该是这样:

    rtmp://61.182.132.36:1755/157 playpath=50756/100024?swax_k=_ver_tm_ar_sig&amp;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 live=true
    

    你可以试试看
    PS:有好的 livestreams 频道配置文件欢迎共享哈~~~

发表评论





*