DM800C中文EPG乱码彻底解决[编译修改C++代码] 作者:D.Strawberry
浏览:4679 发布日期:2014-08-27

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的问题就可以被避免了。

扫码下方或搜索关注公众号“卫星参数网”,独家内幕新闻!

卫星参数网公众号