東川印記

一本東川,笑看爭龍斗虎;寰茫兦者,度橫佰昧人生。

使用openfire+jitsi搭建视频聊天03

2014年12月18日星期四



三星手机已Root,每次DDMS打开都没权限....
用RE太费劲,cmd也很麻烦....
  1. adb shell
  2. su
  3. root@kingwolf:/ # chmod 777 /data
然后逐级改权限.......


java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

鉴定发现,如果使用
import android.app.FragmentManager;
import android.app.FragmentTransaction;
这一套就没有上面问题,如果使用v4套装,即
import android.support.v4.app.Fragment;
就会出现该问题....

解决:
frame里布局全都使用
mRootView = inflater.inflate(R.layout.professor_issue, container,false);
然后在frame 销毁的时候将mRootView置空......
参考
http://blog.csdn.net/walker02/article/details/7995407
http://5200415.blog.51cto.com/3851969/1360288

ubuntu稳定性垃圾

frame问题跟1.0RC更新丢失.....


困扰已久的崩溃问题
自从ubuntu12.04上 从x32迁移到x64后频繁出现的崩溃问题.
senrsl@senrsl-ubuntu:~/android/adt-bundle-linux-x86_64-20140702/eclipse$ ./eclipse
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007fb1e49822a1, pid=4419, tid=140405408589568
#
# JRE version: Java(TM) SE Runtime Environment (7.0_71-b14) (build 1.7.0_71-b14)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.71-b01 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C  [libsoup-2.4.so.1+0x6c2a1]  soup_session_feature_detach+0x11
#
# Core dump written. Default location: /home/senrsl/android/adt-bundle-linux-x86_64-20140702/eclipse/core or core.4419
#
# An error report file with more information is saved as:
# /home/senrsl/android/adt-bundle-linux-x86_64-20140702/eclipse/hs_err_pid4419.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
据说更新jdk到1.8.20就没这问题,更新后崩溃的更爽快了.....

openfire中文乱码....
发离线消息发现数据库存的都是问号....
然后
参考http://nopainnogain.iteye.com/blog/737361
创建数据库改为
    create database openfire default character set utf8 default collate utf8_general_ci

当你原来就创建好数据库时,你可以用:

 alter database openfire default character set utf8 default collate utf8_general_ci;

初始配置数据库连接,改为
jdbc:mysql://127.0.0.1:3306/openfire?useUnicode=true&characterEncoding=utf8
ps:在页面上配置数据库连接后应当去配置文件查看存储的连接字符串是否正确....
我用的版本存储文件一直多一个amp;导致继续乱码....

如果是改已初始化的,改配 置文件
/home/senrsl/test/jisti/openfire_src/target/openfire/conf/openfire.xml
将连接语句修改
<database>
<defaultProvider>
<driver>com.mysql.jdbc.Driver</driver>
<serverURL>jdbc:mysql://127.0.0.1:3306/openfire?useUnicode=true&amp;characterEncoding=utf8</serverURL>

测试, 乱码消失
<message id="14169192125001135048792" to="13838383838@senrsl-ubuntu" from="13222222222@senrsl-ubuntu/jitsi-1vncsre" type="chat"><body>在这个问题上采取行动起来我觉得是一种方法的是我想给我们提供服务工作在年之前他的名字命名和& amp; amp; amp; amp; amp; amp; amp; amp; lt;/body><thread>qXqe34</thread><x xmlns="jabber:x:event"><offline/><composing/></x><activexmlns="http://jabber.org/protocol/chatstates"/></message>


eclipse多个console分别打印设置

我们主要使用Pin Console和New Console VIew来使用Eclipse的多个Console的,例如:

  1. 启动服务器端程序(F11或Ctr+F11),启动成功后,点击Pin Console按钮;
  2. 然后New Console VIew,新建一个Console,再启动客户端程序;
  3. 此时你会发现服务器端和客户端各自有自己的Console的,再有其他的程序如法炮制即可;

PS:主要针对 已经没有可再用的Terminated状态的Console,再新建Console。如果有Terminated 状态的Console就没必要新建了,建了也是公用的。
关闭console自动弹出
使用eclipse时经常会用到最大化窗口,而如果此时是开着tomcat等服务的话,一段后台有打印什么东西出来都会自己弹出 console挺烦人的。可以使用以下操作关闭这个功能.

Preferences-〉 Run/Debug-〉Console里边

取消勾选 Show when program writes to standard out(当console中有值时弹出)前的选项

 Show when program writes to standard error(当console中有错误时弹出) 前 的选项


新版本直接走大版本号了....

这几天莫名其妙听歌的软件全都加载不上歌了.....
虚拟机里的歌不行了,电台也不行了....
然后,发现ubuntu的Rhythmbox在14.04下就是一个坑
自带的几个http偶尔可以放,mms放不了,百度谷歌解决方案全都不行.....
纠结几天之后,在ubuntu软件中心挨个的下了试,只好用VLC了.....

上月这时候因为打包时65536问题无奈从eclipse 迁移到android studio,折腾一周发现是android studio里gradle插件bug,当时版本0.14.0,然后顺应bug问题修改了一些文件,可以debug.....一月后的今天更新了 gradle到0.14.2,发现问题修复了.....然后以往bug版的配置文件打不起包来了.....


openfire打包
打包环境ubuntu14.04x64;目标环境CentOS6.4;
默认build的里installer.rpm不成功
BUILD FAILED
/home/senrsl/test/jisti/openfire_src/build/build.xml:1125: Warning: Could not find file /home/senrsl/test/jisti/openfire_src/${jre.bundle.location} to copy.
然后度娘说要用install4j....

胡乱配置一番,打出来的包


PopupMenu不显示android:icon;
原因是在源码里配置了显示图标的开关,但是却没有调用打开开关


在Helper类里配置的开关


mPopup是private,继承重写一个PopupMenu的思路无望,只好反射,这也是google提供的多数方法

开启的代码
  1. try {
  2.             Class<?> classPopupMenu = Class.forName(popupMenu
  3.                     .getClass().getName());
  4.             Field f = classPopupMenu.getDeclaredField(
  5.                     "mPopup");
  6.             f.setAccessible(true);
  7.             Object menuPopupHelper = f.get(popupMenu);
  8.             Class<?> classPopupHelper = Class.forName(menuPopupHelper
  9.                     .getClass().getName());
  10.             Method setForceIcons = classPopupHelper.getMethod(
  11.                     "setForceShowIcon", boolean.class);
  12.             setForceIcons.invoke(menuPopupHelper, true);
  13.         } catch (Exception e) {
  14.             e.printStackTrace();
  15.         }

ubuntu14.04x64安装google earth.
一开始安不上
然后
http://askubuntu.com/questions/366438/how-to-install-google-earth-64bit-in-ubuntu-13-10-ia32-libs-dependency-error

This is only a workaround until Google Earth is repackaged.

Google Earth Build Package

  1. Download Google Earth x64 .DEB
  2. Open Terminal, Copy & Paste Following Command And Press Enter

    sudo apt-get install libc6:i386 lsb-core  
  3. Open Downloads Folder

  4. Right Click On Google Earth .deb package & Select Extract Here
  5. Open the folder where files are extracted.
  6. Open the DEBIAN Folder
  7. Open the control file with gedit
  8. Remove this whole Line: Depends: lsb-core (>= 3.2), ia32-libs
  9. Now Click Save, & Exit Control File
  10. Now Delete The Original Google Earth .DEB Package You Downloaded

  11. Create A Folder called getfix, Now Move The Extracted Google Earth Folder Into The getfix Folder

Now we Are Going To Rebuild The Google Earth .deb Package:

  1. Open Terminal, copy/paste the following command then press Enter:

    dpkg -b ~/Downloads/getfix/google-earth-stable_current_amd64  
  2. Copy/paste the following command (this will install the repackaged .deb)

    sudo dpkg -i ~/Downloads/getfix/google-earth-stable_current_amd64.deb
安上后执行崩溃
[1211/162132:ERROR:nss_ocsp.cc(581)] No URLRequestContext for OCSP handler.
[1211/162132:ERROR:nss_ocsp.cc(581)] No URLRequestContext for OCSP handler.
[1211/162132:ERROR:nss_ocsp.cc(581)] No URLRequestContext for OCSP handler.
[1211/162132:ERROR:nss_ocsp.cc(581)] No URLRequestContext for OCSP handler.
[1211/162132:ERROR:nss_ocsp.cc(581)] No URLRequestContext for OCSP handler.
[1211/162132:ERROR:nss_ocsp.cc(581)] No URLRequestContext for OCSP handler.
[1211/162132:WARNING:backend_impl.cc(1875)] Destroying invalid entry.
[1211/162132:WARNING:backend_impl.cc(1875)] Destroying invalid entry.
[1211/162132:WARNING:backend_impl.cc(1875)] Destroying invalid entry.
[1211/162132:WARNING:backend_impl.cc(1875)] Destroying invalid entry.
[1211/162132:WARNING:backend_impl.cc(1875)] Destroying invalid entry.
[1211/162132:WARNING:backend_impl.cc(1875)] Destroying invalid entry.
[1211/162132:WARNING:backend_impl.cc(1875)] Destroying invalid entry.
[1211/162133:WARNING:backend_impl.cc(1875)] Destroying invalid entry.
[1211/162133:WARNING:backend_impl.cc(1875)] Destroying invalid entry.
[1211/162133:WARNING:backend_impl.cc(1875)] Destroying invalid entry.
[1211/162133:WARNING:backend_impl.cc(1875)] Destroying invalid entry.


Another crash happened while handling crash!
好吧,问题保留.....

视频通话....

摄像头的旋转(顺时针,30分钟方向为0)
配置    0        90      180         270        360
前置
本地    270    0        90          180         Err
远端    90      90       90          90
后置
本地    270    0        90           180        Err
远端    270    270    270        270

好吧,还是先把屏幕横过来吧....

eclipse bug老问题
  1. senrsl@senrsl-ubuntu:~/android/adt-bundle-linux-x86_64-20140702/eclipse$ ./eclipse
  2. #
  3. # A fatal error has been detected by the Java Runtime Environment:
  4. #
  5. #  SIGSEGV (0xb) at pc=0x00007f68349822a1, pid=18274, tid=140088853415680
  6. #
  7. # JRE version: Java(TM) SE Runtime Environment (7.0_71-b14) (build 1.7.0_71-b14)
  8. # Java VM: Java HotSpot(TM) 64-Bit Server VM (24.71-b01 mixed mode linux-amd64 compressed oops)
  9. # Problematic frame:
  10. # C  [libsoup-2.4.so.1+0x6c2a1]  soup_session_feature_detach+0x11
  11. #
  12. # Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
  13. #
  14. # An error report file with more information is saved as:
  15. # /home/senrsl/android/adt-bundle-linux-x86_64-20140702/eclipse/hs_err_pid18274.log
  16. #
  17. # If you would like to submit a bug report, please visit:
  18. #   http://bugreport.sun.com/bugreport/crash.jsp
  19. # The crash happened outside the Java Virtual Machine in native code.
  20. # See problematic frame for where to report the bug.
  21. #
  22. senrsl@senrsl-ubuntu:~/android/adt-bundle-linux-x86_64-20140702/eclipse$
症状以前是隔三差五崩溃,现在只要想让他提示就会崩溃了....

这是个老问题.....
这次,又试了试试了无数遍的
-Dorg.eclipse.swt.browser.DefaultType=mozilla
结果竟然不崩了.....
在eclipse.ini最后一行加个这个

....这个也看运气了...

回声消除Acoustic Echo Cancellation (AEC)
这个是个大问题.....
语音通话,俩手机开了外放杂音不断,啸叫不断.....
先看原理

Copy & Paste
    回声产生的原因: 本地产生的音频信息通过网络传输到远端, 远端音频信号通过反射再由远端麦克采集到远端系统,再通过IP网络传输本地,本地播放后,再由本地麦克采集到,这就构成了类似闭环正反馈,当延时较小时, 信号不断加强,就会导致啸叫现象产生,当延时较大,就会产生回音。 
回音消除的基本原理是用等幅等频率但反相的 信号与采集的信号相叠加,当通过网络或者物理反射获得音频信号与等频率反相的信号相叠加,就可以去除回声。问题的关键就是获取这个反相的信 号,回声信号的产生主要由: 1.本地环境的反射  2.通过网络在远端播放后,音频反射后由远端麦克采集到并传输到本地扬声器外放后,再由本地麦克采集到,从而形成闭环正反馈。
       本地物理反射: 声学信号在本地物理多路径反射,从信号上讲类似一个衰减延时的滤波器;
       网络反射:  网络传输到远端,远端播放后,再经过远端物理反射后,再进入远端麦克后通过网络传输到本地扬声器,再进入本地麦克,在正反馈,也是一个衰减延时网络。
      回声的产生由这两种因素产生,两种效果叠加后,就是一个衰减延时滤波器,我们需要利用本地播放音频信号与远端回传信号,来设计滤波器。回音消除的关键就是 这个自适应滤波器的设计。

解决方案
研究了下,现在比较通行的就三套方案
1,Android自带的继承于AudioEffect的三个 AcousticEchoCanceler,AutomaticGainControl和NoiseSuppressor,但是这个,一个是要求 的API比较高,兼容性差,其次是效果并不明显....
  1.     /**
  2.          * Configures echo cancellation and noise suppression effects.
  3.          */
  4.         @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
  5.         private void configureEffects()
  6.         {
  7.             logger.error("声音效果配置");
  8.             if(!AndroidUtils.hasAPI(16))
  9.                 return;
  10.             AudioSystem audioSystem
  11.                     = AudioSystem.getAudioSystem(
  12.                             AudioSystem.LOCATOR_PROTOCOL_AUDIORECORD);
  13.             // Creates echo canceler if available
  14.             if(AcousticEchoCanceler.isAvailable())
  15. //            if(true)
  16.             {
  17.                     AcousticEchoCanceler echoCanceller
  18.                     = AcousticEchoCanceler.create(
  19.                             audioRecord.getAudioSessionId());
  20.                 if(echoCanceller != null)
  21.                 {
  22.                     echoCanceller.setEnableStatusListener(this);
  23.                     echoCanceller.setEnabled(audioSystem.isEchoCancel());
  24.                     logger.error("回声抑制启用结果Echo cancellation: "
  25.                                     + echoCanceller.getEnabled());
  26.                 }
  27.             }
  28.             //自动增益
  29.             // Automatic gain control
  30.             if(AutomaticGainControl.isAvailable())
  31. //            if(false)
  32.             {
  33.                 AutomaticGainControl agc
  34.                     = AutomaticGainControl.create(
  35.                             audioRecord.getAudioSessionId());
  36.                 if(agc != null)
  37.                 {
  38.                     agc.setEnableStatusListener(this);
  39.                     agc.setEnabled(audioSystem.isAutomaticGainControl());
  40.                     logger.error("自动增益控制启用结果Auto gain control: " + agc.getEnabled());
  41.                 }
  42.             }
  43.             // Creates noise suppressor if available
  44.             if(NoiseSuppressor.isAvailable())
  45. //            if(true)
  46.             {
  47.                 NoiseSuppressor noiseSuppressor
  48.                     = NoiseSuppressor.create(
  49.                             audioRecord.getAudioSessionId());
  50.                 logger.error("噪音抑制类获取"+noiseSuppressor);
  51.                 if(noiseSuppressor != null)
  52.                 {
  53.                     noiseSuppressor.setEnableStatusListener(this);
  54.                     noiseSuppressor.setEnabled(audioSystem.isDenoise());
  55.                     logger.error("噪音抑制启用结果Noise suppressor: "
  56.                                     + noiseSuppressor.getEnabled());
  57.                 }
  58.             }
  59.         }
2,speex的音效处理(撕逼克死).

3,webrtc的 VoiceEngine模块
AEC问题新开帖解决!!!

Samsung S4 I9500救砖
好像是双清了一下,然后S4变砖了....
教程http://www.shuame.com/faq/restore-tutorial/332-i9500.html
下载
驱动
    SAMSUNG_USB_Driver_for_Mobile_Phones_1.5.9.0.exe
刷机工具
    Odin3.exe
固件


手机进挖煤模式
    手机在关机状态下按住 音量下键+HOME键+电源键 ,出感叹号提示界面后,再按一下音量上键,进入挖煤模式,再插入数据线连接电脑!

安驱动,打开Odin3,
识别到了手机


Option里的不要动,依次选择PIT,BL,AP,CP,CSC,然后Start


卡到了Set Partition......
重启进入windows,然后刷,依旧卡这,不选pit,还是卡这......
然后又把另一台S4进挖煤模式,发现这俩product name不一样....
这才明白,好的那个是联通定制版(GT-I9500CHN),要刷的这个是韩版(SHN-E300L).....
好吧,去下韩版ROM五件套....http://www.shuaji.net/samsung/S4_I9500/E330L /2014072520020.html


韩版的下载完成,发现是个tar文件E300LKLUFNE4_E300LLGTFNE4_E300LKLUFNC1_HOME.tar
然后据说这么大个的tar文件或者md5文件就是一体包,直接把他放到AP(PDA)里就行....
虚拟机里刷这个直接蓝屏,貌似内存不足...
重启,进win,然后刷机,OK!!!
精致美图:刷机成功ODIN


刷机的时候手机,果然是韩版的......

刷完,终于见到欢迎页面了.....

2014年12月18日11:02:52

--
senRsl
2014年11月17日16:30:07

没有评论 :

发表评论