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);
}进行获取显示名称