openmcu-ru_4.2.1源码修改


1.修改web界面下显示窗口大小
   修改/opt/openmcu-ru/config/layouts.conf   
#mockup_width=500
#mockup_height=300 
mockup_width=500
mockup_height=300 

2.禁用字幕subtitle功能和视频字幕中文乱码问题

(1)禁用字幕subtitle功能
修改/opt/openmcu-ru/config/layouts.conf
#label_mask = 89
label_mask = 32

(2)视频字幕中文乱码问题
安装文泉驿中文字体,如wqy-zenhei.ttc,将字体复制到/opt/openmcu-ru/font目录下
修改/opt/openmcu-ru/config/layouts.conf
font=wqy-zenhei.ttc

(3)背景和logo图片不显示问题
是因为ffmpeg编译的时候有些选项没有添加,把所有的都加上
重新设置./configure --enable-gpl --enable-version3 --enable-nonfree --enable-shared --enable-ffmpeg --enable-ffplay --enable-ffprobe --enable-ffserver --enable-libx264

3.删除web视频界面上的背景色及字体颜色
在control.js中的div id='pr"+mixer_number+下面删除
background-color:#F2F2F2   修改3处
添加字体颜色:<div id='us 中设置color:#ff0000;font-weight: bold;


4.在control.js中可以打开debug
   修改var debug=0;  为1
   浏览器下打开调试窗口(F12)

5.设置web界面视频刷新时间:
(1) 在html.cxx中将1改为100毫秒
  unsigned long t1=(unsigned long)time(0);
  struct timeval start; //by aphero
  gettimeofday(&start,NULL); 
  t1 = (int64_t)start.tv_sec*1000 + start.tv_usec/1000;

   if(t1-(jpegMixer->jpegTime)>100) // artificial limitation to prevent overload: no more than 1 frame per second
(2) 在control.js中reframe(i)函数中将1999修改时间200ms

6.修改语言:直接修改其他语言为中文,添加zh文件
(1)在html.cxx中GeneralPConfigPage函数下面添加:ZH
s << SelectField("Language", "Select Language", cfg.GetString("Language"), ",ZH,EN,FR,JP,PT,RU,UK");
(2)在template.html文件中修改
var LOCALIZATIONS_AVAILABLE = 'zh|en|fr|jp|pt|ru|uk'; 
(3)在mcu.cxx中添加:
WEBSERVER_LINK_MIME("text/javascript" , "local_zh.js");
 
7.修改科达终端别名为中文时候乱码:
(1)修改\libs\ptlib\src\ptlib\common\contain.cxx文件中
     InternalFromUCS2()
     theArray[count++] = (char)(0xd0+(v>>12));  将d0修改为e0    
     theArray[count++] = (char)(0x80+((v>>6)&0x3f));
     theArray[count++] = (char)(0x80+(v&0x3f));
(2)修改openmcu-ru下的h323.cxx文件中
   把remoteDisplayName = pdu.GetQ931().GetDisplayName();   这条注释掉

----下面是调试过程:--------------------------------------------------------------

跟踪:reg_h323.cxx中RegistrarGk::OnRegistration函数中
display_name = H323GetAliasDisplayName(info.rrq.m_terminalAlias);
    MCUTRACE(0,"@@@@@@@@@@display_name=" << display_name);
 
使用pcmt时候:remote_application=Kdvpcmt 8
需要添加if(remote_application.Find("Kdvpcmt") != P_MAX_INDEX)转换编码
 
0:20.614 @@@@@@@@@@info.rrq.m_terminalAlias=2 entries {
            [0]=h323_ID  4 characters {
              0070 0063 006d 0074                       pcmt
            }
            [1]=dialedDigits "123"
          }
 
1:18.355 @@@@@@@@@@info.rrq.m_terminalAlias=2 entries {
              [0]=h323_ID  2 characters {
                7ec8 7aef                                   
              }
              [1]=dialedDigits "123"
            }
 
 
display_name = H323GetAliasDisplayName(info.rrq.m_terminalAlias);
 
info.rrq.m_terminalAlias为原始格式:
    2 entries {
      [0]=dialedDigits "112"
      [1]=h323_ID  2 characters {
        7ec8 7aef                                   
      }
    }
 
获取H323GetAliasDisplayName时候调用h323pdu.cxx文件中H323GetAliasAddressString(aliases[i]);
返回 return ((const PASN_BMPString &)alias).GetValue();
使用十六进制打印时:终端====0xffffffd7 ffffffbb ffffff88 ffffffd7 ffffffab ffffffaf  不对不是utf8
                  应该是//FFFFFFE7 FFFFFFBB FFFFFF88 FFFFFFE7 FFFFFFAB FFFFFFAF
 
///
十六进制打印代码:
string string_to_hex(const string& str) //transfer string to hex-string
{
    string result="0x";
    string tmp;
    stringstream ss;
    for(int i=0;i<str.size();i++)
    {
        ss<<hex<<int(str[i])<<endl;
        ss>>tmp;
        result+=tmp;
    }
    return result;
}
string src=display_name;#将pstring转换成string
string b_src=string_to_hex(src);
printf("disp=%s\n",src.c_str());
printf("aphero====%s\n",b_src.c_str());
//
pstring类型定义在ptlib中
PASN_BMPString定义在ptclib中asner.cxx文件中
----------------------------------------------------------------
utf-8编码不对:在\libs\ptlib\src\ptlib\common\contain.cxx文件中
PString::PString(const PWORDArray & ustr)
{
  InternalFromUCS2(ustr, ustr.GetSize());
}
PWORDArray转换为PString类型时候调用了InternalFromUCS2()函数,所以编码不正确
终端=pstring_hex====0xffffffd7 ffffffbb ffffff88
应该是0xffffffe7  
修改\libs\ptlib\src\ptlib\common\contain.cxx文件中
InternalFromUCS2()
theArray[count++] = (char)(0xd0+(v>>12));  将d0修改为e0    
theArray[count++] = (char)(0x80+((v>>6)&0x3f));
theArray[count++] = (char)(0x80+(v&0x3f));
目前终端控制台中显示是中文,但是网页中还是乱码
在网页中设置编码为gb2312就可以显示中文名称
 
继续:
通过调试发现:
void MCUH323Connection::SetMemberName()中:
// remoteDisplayName
   
remoteDisplayName = GetEndpointParam(DisplayNameKey, remoteDisplayName);

memberName = remoteDisplayName+" ["+address+"]";
在这个地方将memberName 加入到members[]的js代码中,在web中调用
继续下一步:remoteDisplayName是在void MCUH323Connection::SetRemoteName(const H323SignalPDU & pdu)进行设置的
  // remoteDisplayName
   
remoteDisplayName = pdu.GetQ931().GetDisplayName();
   
if(remoteDisplayName == "" && pdu.m_h323_uu_pdu.m_h323_message_body.GetTag() == H225_H323_UU_PDU_h323_message_body::e_setup)
  {
    
 const H225_Setup_UUIE & setup = pdu.m_h323_uu_pdu.m_h323_message_body;
     
if(setup.HasOptionalField(H225_Setup_UUIE::e_sourceAddress))
      
 remoteDisplayName = H323GetAliasDisplayName(setup.m_sourceAddress);
  }
通过调试输出发现:
pdu.GetQ931:{
            protocolDiscriminator = 8
            callReference = 23852
            from = originator
            messageType = Setup
            IE: Bearer-Capability = {
              88 18 90 a5                                        ....
            }
            IE: Display = {
              bf c6 b4 ef c8 ed d6 d5  b6 cb                     ..........//注意这里是gb2312编码,不是unicode方式
            }
            IE: User-User = {
              20 b8 06 00 08 91 4a 00  04 02 40 04 79 d1 8f be    .....J...@.y...
              8f 6f 7e c8 7a ef 01 80  43 58 22 c0 26 00 22 b8   .o~.z...CX".&.".
              06 4b 64 76 70 63 6d 74  00 38 00 01 01 80 43 33   .Kdvpcmt.8....C3
              00 c0 c8 fd 0a 06 b8 00  02 4d 13 b0 96 8c b7 4c   .........M.....L
              32 aa 56 34 34 34 34 ef  00 cd 0f 98 00 07 00 c0   2.V4444.........
              c8 fd 03 ea 70 11 00 02  4d 13 b0 99 fb c3 52 3f   ....p...M.....R?
              6f 56 34 34 34 34 ef 01  00 01 00 15 12 00 35 00   oV4444........5.
              63 00 66 00 39 00 65 00  62 00 62 00 31 00 3a 00   c.f.9.e.b.b.1.:.
              32 01 00 01 00 01 00 01  40 10 80 01 00            2.......@....
            }
          }
把remoteDisplayName = pdu.GetQ931().GetDisplayName();
  这条注释掉
使用remoteDisplayName = H323GetAliasDisplayName(setup.m_sourceAddress);
  }进行获取显示名称

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值