发布PPTV XBMC视频插件v1.0
本文同步自(最佳显示效果请点击):https://zohead.com/archives/pptv-xbmc-plugin/
最近认识一位朋友想要在 XBMC 多媒体中心软件(http://www.xbmc.org/)上观看 PPTV(http://www.pptv.com/) 视频网站上的视频,看到有 Windows 上的 XBMC PPTV 插件,但都没法在我的 Raspberry Pi 微型电脑板上(板子虽小也支持播放 1080p 高清视频哦)运行,于是想着自己写个能够跨平台的 PPTV 视频的 XBMC 插件,顺便也拿这个练练 Python,HOHO。
既然要跨平台,那首先考虑必须全部用 XBMC 自带的 Python 脚本实现,不能调用 Windows 上 DLL 之类的鬼玩意,而且 Raspberry Pi 的 armhf 系统上也几乎不可能有 PPTV 的动态库可以用的。
基本原理:
通过 Python 插件发送 HTTP 请求时伪装成 iPad 客户端从 PPTV 网站上获取频道列表、视频列表、查询视频,并得到视频的实际 m3u 和 m3u8 地址。后来发现此方法得到的 m3u 和 m3u8 视频地址在 Raspberry Pi 系统中播放有问题,而且不太好直接解决。没办法,咱拿起 Wireshark 抓包神器,终于发现了 PPTV 未公开的 API 方法(其实 PPTV 一直从未公开,哈哈)得到网页 Flash 方式播放的视频地址。不过其中有个视频 key 的问题,没什么太好办法在 Python 中直接得到。最终想到通过 [硕鼠] 网站解决,硕鼠网站得到的 PPTV 视频地址明显有问题,但有个可用之处就是他能通过 Flash 得到 PPTV 的视频 key,那就省点事从硕鼠得到视频 key,从 PPTV 未公开 API 构造视频链接和分段信息(用过 Python 自带的 json 库),最终得到真实的视频地址。
有关 XBMC 的插件编写详细请参考这些链接:
http://wiki.xbmc.org/index.php?title=HOW-TO:Write_plugins_for_XBMC
http://wiki.xbmc.org/index.php?title=Python_development
http://wiki.xbmc.org/index.php?title=Add-on_development
其中遇到的一个问题就是 HTML 的解析问题,刚开始使用的是比较成熟好用的一个 Python 插件:Beautiful Soup。这个插件的最大优势就是对不标准的 HTML 的容错性做的非常好,而且各种查找 HTML DOM 结构的函数也很强大。那就按照 Beautiful Soup 的要求解析 PPTV 的 HTML DOM,结果顺利取得,不久就发现一个问题,在 Raspberry Pi 这种比较弱的嵌入式板子上,下载 HTML 倒挺快,通过 Beautiful Soup 解析查找 HTML DOM 竟然要用去 15 秒左右的时间,这完全无法忍受,可以寻找替代品。
最终在 XBMC 的论坛里发现了比较好的 HTML parser 替代品:Parsedom XBMC Add-on。这是直接包含在 XBMC 库中的一个简单的 HTML DOM 解析扩展,import 之,下载 HTML 然后按照 class、按照 id 解析 HTML 的速度都在 1-2 秒之间,非常满意。后来使用中又发现 Parsedom 中存在的一些问题,查找原因并修正之后无伤大雅,想到干脆去掉 Parsedom 中一些我用不到的代码,直接集成到我的 py 文件中使用 ^_^。
略加奋战,终于在 XBMC 界面上能正常显示了,能显示频道列表了,也能进入频道显示视频列表,结果播放时发现悲剧了,iPad 的 m3u 被 XBMC 自己给分段解析然后尝试播放了,造成文件路径不对无法播放。后来使用手工修改路径的方式,尽管能播放,但造成的“效果”就是每 5-6 秒钟就需要切换一下视频,这对于 Raspberry Pi 这种暂时无法调用外部播放器的系统来说简直没法用。
PPTV 视频 XBMC 插件 1.0 版本功能:
- 支持 www.pptv.com 上基本所有直播和点播视频;
- 支持在插件设置中选择视频质量(与实际 PPTV 视频片源对应),暂时支持:标清、高清、超清、蓝光、iPad 超清;
- 支持按影片类型、时间、更新时间、热度等条件选择过滤视频,并且所有过滤条件全部实时从 PPTV 网站获取,插件中不保存分类;
- 视频列表支持翻页处理(具体每个连续剧的集数列表没有翻页,默认全部列出来,主要感觉 1-40 集这种列表还弄分页没什么必要);
- 不依赖任何 PPTV 的 Windows 程序和库,理论上可以在任何 XBMC 系统上使用
由于 XBMC 不能原生支持中文输入等原因,暂时未支持视频搜索功能,后续将会改进。
备注:
本插件默认的视频质量为高清格式,需要超清或蓝光格式的在插件设置界面中进行修改即可。iPad 超清视频和直播视频分别是特殊的 m3u 和 m3u8 格式(指向 mp4 视频),需要XBMC 系统能正常播放 PPTV m3u 和 m3u8 视频(Windows 下的 XBMC 系统应该可以配置使用外部播放器来支持,不过偶懒得安装木有测试过)。
声明:
此插件只是从 PPTV 网站获取视频内容,所有视频版权均与此网站有关,本插件一概不负责。另外由于 PPTV 网站将来会有变化,我不保证能马上修复并解决可能出现的问题,因为说不定 PPTV 就完全把未公开的 API 给禁用了。
插件介绍的截图:
插件设置界面:
视频列表界面:
具体视频播放界面(放的正是 《麦兜》 哈 ^_^):
本 XBMC 插件的 github 源代码库地址:
https://github.com/zohead/pptv4xbmc
下载 PPTV 视频 XBMC 插件:
http://github.com/downloads/zohead/pptv4xbmc/plugin.video.pptv-v1.0.zip
下载之后拷贝到 XBMC 系统,然后到 XBMC 系统设置中选择压缩包安装即可。我正在申请将此款插件加入 XBMC 的中文插件库,顺利的话安装此插件将会更加简单,并且在以后修改时可以直接在线更新。
各位在使用 PPTV 视频 XBMC 插件中如果发现任何问题,欢迎提出指正哦,另外有问题时最好能描述清楚,能附上看的是哪个视频或者哪个频道下面的话更好。 ^_^
pang:
Monday December 30th, 2013 03:47 PM
楼主厉害 ~
貌似我也用过你的这个插件 巴适!
admin:
Monday December 30th, 2013 04:10 PM
哈哈,这么巧,我昨天才更新了插件的~~~