DM800C中文EPG乱码彻底解决[看有线电视EPG乱码,编译修改C++代码] 作者.Strawberry
(本文使用到的软件,请点此下载http://dl2.dm800sim2.com/sim2/do ... bdvbsi++.so.0.0.rar)
目的彻底解决DM800C中文EPG乱码,使用台标和EPG正确显示中文.
我的方案是:在收到ts流的EPG后当即进行转码。包括频道名称、节目epg长/短描述、web管理界面、录像的文件名、定时器名字等等都不再是乱码了,为了能做到这一点, 花了一周时间,一边搭建官方Enigma2的编译环境,一边熟悉代码。 其中遇到的问题就不一一说了,手上有套DVB中文业务标准(SI)文档,看了看所有的表结构、互相之间所有关系,以及字符GB13000.1编码,等等等……
目前的改动文件:(只有一个)
libdvbsi++.so.0.0.0
================== 分隔线 ==================
安装方法:
请将附件解压后的libdvbsi++.so.0.0.0文件,
用ftp传到/usr/lib/下替换原有文件
原有文件请备份至pc,千万不可改名后留在原目录,否则盒子重启后会失效。
注意,如遇到复制失败的情况。则表明文件正在使用中,此时ftp仍然还是通的,千万不要重新启动盒子。 而是要把备份的原始文件拷贝回去,重新启动一下盒子再试试。
一般来说,如果重新启动了还不行的情况,推荐的做法是,把原有文件备份好,从盒子上删除,
然后把我的so文件名改成“a”,发到盒子的/usr/lib/,等到传送成功以后再改回“libdvbsi++.so.0.0.0”。
(如果连这样都复制不成功,那么请检查nand可用空间是否小于1500kb)
最后重新启动Enigma2
================== 分隔线 ==================
版本更新:
20100422优化b_libdvbsi++.so.0.0.rar
优化代码效率后的版本,公开测试。
注:由于使用dm800编译环境,会造成的dm8000无法观看正在录制的频道的问题。
20100422优化a_libdvbsi++.so.0.0.rar
优化代码效率后的版本,群内内测。
有个bug,字符缓冲区使用错误, -
有时候会显示乱码,但刷新后又正常了。
20100416原始版本_libdvbsi++.so.0.0.rar
最初的一个版本,只在群里内部测试。
较容易产生菜单卡顿,以及小齿轮现象。
================== 分隔线 ==================
下面是自我答疑,不关心实现细节的童鞋们可以跳过:
1、为什么不是在显示的时候进行转码?
a) 之前roy0810大的转码是在Python一级上实现的,需要更改的py文件较多,比较难改彻底,因为部分页面内容是直接由SWIG接口定义的控件直接描画到屏幕,不经过Python。要改完美只能只好改SWIG接口对应的C/C++函数实现代码。
b) 而众所周知,大家用的最多的Gemini2固件是闭源的,去哪里改基于Gemini2的SWIG对应的代码,也就是主程序呢?
c) 官方Enigma2的主程序不是有开源的代码可以改么?答案是,能改。但改了以后抄板不能烧Engima 2.8的版本吧?
d) 有人说用官方Enigma2的主程序改完直接替换掉Gemini2的不就好了,我也想到了。但我替换后主程序无法启动。怀疑Gemini2扩充过主程序功能,导致和官方原版不通用了。
2、为什么要从libdvbsi++.so着手?
a) Python改不彻底,主程序又动不了,我所能想到的就只剩下收epg信息的部分了。
b) 研究了一下,发现真幸运,收epg信息部分竟是一个.so文件(顺便插嘴一句,怎么我最近老是和动态链接库打交道,Win32 dll也是,FlashCS4 rsl也是,这次dm800竟还是 >_< ),这样就有了突破口。
c) 在这里就完成转码操作,对于dm800来说,等于收到的直接就是能被显示的中文字符了,达到我们的效果。
d) 这个文件除了易于替换外,也比较独立。Gemini2的改动基本集中在主程序,应该不涉及至此。实际测试后,Gemini2 4.5,4.7都工作正常。
3、为什么libdvbsi++.so的文件尺寸大了几百k?
a) 厄,原本这个文件是不负责转码的,现在为了做GBK转码,体积当然大啦。(反正我们的机子内存有的是,咱不差钱~ha)
b) 先用着,看看有没什么bug。文件体积还有改进空间的(很大)等以后有时间了再优化吧,我有点癖好完美代码。
4、接下去我的进一步计划是?
要解决高清节目总是需要dreamboxedit修改service_type才能在盒子的频道列表里被列出的问题。
这样重新搜频再也不烦恼了。
此问题可能地区差异较大,需要大家跟帖反馈下各地是否有这个问题,以及原始未改前的service_type分别是多少,我做了统计以后一起改。
想做国人自己的dm800中文固件,原版官方固件烧录到dm800后是否就无法启动了?我用的是新蕾机sim2.01。
有没有厂家提供这方面技术支持?Atmosphere是否有dm800的计划?或这方面有相关研究的爱好者愿意与我一起呢?请与我联系。D.Strawberry
我其实更愿意在主程序里进行编码转换,那样就不光是解决DVB-C的中文问题,星上的也解决了。
要解决由于源代码版本不匹配造成的dm8000无法观看正在录制的频道的问题。这个问题有点怪,而且需要再建立一个dm8000的编译环境,等我空一些了再搭建吧。不过原版8000,我可以在主程序里添加编码转换代码,原版机就是爽 .
目前dm8000和dm800使用的是同一个文件。届时,我会在dm8000区的帖子里贴出dm8000专用的文件。
采用了网友的建议,若遇到当标题为空的epg时,不把event插入队列,直接略过。
这样象134,epg里面的信息是空的,时间却是整天,而星上epg会覆盖外挂epg的问题就可以被避免了。
扫码下方或搜索关注公众号“卫星参数网”,独家内幕新闻!