关于近期工作的一些感想

    昨天终于将困扰自己接近一个月的一个问题解决了,心情既激动又有点无奈,激动的是自己一直以来的坚持得到了回报,无奈的是克服这个问题实在的花费了巨大的代价,走了很多不必要的弯路。但不管怎么样,这个问题让自己获益良多,值得记录下来,作以参考。

  • 问题:
    其实很简单,我们搭建的Spark的SIP语音插件互相之间可以打通但是没有声音。
  • 解决问题的思路和过程:

    首先我们先是通过网络查找有无人遇到这方面的问题,有很多人看似遇到了同样的问题,但是网上没有现成的解决方案。

    不得已,只能自己解决这个问题,那么首先是确认问题在哪个方面,我们起初怀疑是SIP服务器端的原因,于是就用其他的SIP语音客户端作测试,结果是X-lite等SIP语音插件可以和X-lite自身客户端和Spark语音插件打通并且有声音,这样来看,应该不是服务器端设置的问题。

    然后我们怀疑是openfire服务器端的问题,但是经过研究发现openfire服务器不涉及到SIP语音过程中,而只是提供SIP账号和Spark账号的映射,具体的SIP通讯过程还是在客户端与SIP服务器端之间进行的。

    我们又把目光集中到SIP协议上,经过网络抓包,我们研究了SIP协议头,对比了成功的通讯和上述不成功通讯的差别,结果发现SIP协议在接通后的一段时间内自动挂断,这里让我们百思不得其解,另外抓包时发现不成功的通讯的RTP流完全不通,这里由于对于协议不了解,只好去学习SIP协议和RTP协议,但是仍然没有结果。

    无奈之下,我们只好开始研究Spark的SIP客户端源码,在这个过程中,又要去学习java的JMF多媒体框架,但是最终发现代码没有问题,可RTP流就是无法接通。

    问题到这里遇到了死胡同,只好另外再想办法,于是我们又找了另外一个开源的Java SIP客户端jitsi,这个客户端互相之间是可以打通并且有声音的,于是想通过研究它的源码来解决上面的问题,可是由于对于底层的运行机理不了解,依然没有搞清楚问题。

    到这步实在是没辙了,于是就考虑直接剥离jitsi客户端的SIP模块,然后将Spark客户端的SIP插件重写,可是这也不是一件轻松的活,因为jitsi应用了Apache的felix这样一个基于osgi的动态模块框架,因为涉及到模块之间的依赖关系而使剥离模块很困难。

    恰好到此时,我碰巧用别的机器做了一下测试,结果竟然有声音!因为之前一直是我和一个同事的机器之间在测试通讯,没有成功,结果在别的机器上竟然是通的!这让我想到了被我们忽略的网络环境,然后测试了一下,果然,有的机器之间有声音,有的机器之间没有声音,因为我们公司的网络环境并不稳定!我们之前的解决思路有一大部分是错误的!幸好及时发现这个问题,不然可能是沿着之前错误的道路越走越远。

  • 教训和收获

    回顾上面这个问题的解决过程,我们在前几步就出现了失误,不应该一直在同样的两台机器上测试,而应该充分考虑网络的个别差异,这也可以说是一种巧合,可是严谨的解决问题的思路应该尽量避免这种巧合给我们工作带来的影响,在解决一件事情时要充分考虑各方面的因素,在我和我同事的工作中,一些非常“难以解决”的问题,一般并不是一些很高深的技术难题,恰恰相反,反而可能是一些与技术没有什么关系但是却不易注意的小问题。

    当然,在教训的背后,也让我收获了很多东西,首先是信心,要对自己有信心,以现在看来,对于不了解linux、sip、rtp、xmpp,网络知识匮乏的我们,能够把一个完整的SIP服务搭建起来并且运行,实在是一件不可想象的事情,可是一步一步的也被我们搞出来了,可见所有问题在正确的方法下都是可以解决的,解决问题的关键不在于问题本身,而在于自己对解决这个问题有没有信心和决心,只有这样,你才会在不断地挫折之中逐渐找到正确的答案。

   

   

   


SIP电话Click2Call。检测网络上的电话号码,并将其转换为sip、tel、callto(点击呼叫链接) SIP PHONE CLICK TO CALL是Chrome的Click2Call浏览器扩展程序。 这个点击通话应用程序非常简单轻巧。 它与Skype的操作非常相似,在安装后,它会在浏览器中读取所有电话号码,并设置它们以供您点击通话。 -与VoIP电话,IP电话系统集成,将呼叫传递到计算机中安装的SIP软件。 只需将URL放在浏览器中,就可以使点击通话电话系统正常工作。 -阅读您正在浏览的任何页面上的html,并将每个电话号码转换为链接到URL“ sip:PHONE-NUMBER”,“ tel:PHONE-NUMBER”或“ callto:PHONE-NUMBER”或您选择的任何特殊协议。 -SipCaller是唯一支持特殊和自定义协议的ClickToCall应用。 可以与任何种类的SoftPhone集成。 只需将您的软件电话设置为协议处理程序,然后在SipCaller应用程序中输入即可。 -支持HTTP GET请求以与自定义VOIP服务器集成。 输入带有$ NUMBER占位符的服务器链接。 要打个电话,只需单击一个电话号码,Click2Call应用程序会将请求发送到您的VOIP服务器。 =====================-更新历史--v2016.5.20:-支持特殊和自定义协议以与任何类型的软电话集成。 -支持带有自定义URL和电话$ NUMBER占位符的HTTP GET请求。 拨打电话的新方法:单击电话号码将http请求发送到您的VOIP服务器。 v2016.4.1:-添加了选项页,单击SipCaller按钮以切换协议-支持所有使用该协议的软件电话:sip,tel,callto v1.5:-检测大多数数字格式-在sip URL中传递+或00,因此适用于全球呼叫v1.3:-检测更多电话号码格式v1.2:-错误修正v1.0:-首次发布待办事项:-实施新的电话号码检测工作流程。 -实施新的工作流程以在大多数网站和CRM平台上工作,例如maps.google.com,gmail,yahoo,outlook.com ... =================== =====-关于作者---由VNProDev团队开发。 我们开发了浏览器插件插件和扩展程序,只是为了娱乐并在我们的空闲时间帮助其他人。 如果您有问题或功能要求,请随时在此处给我们留言或发送电子邮件至support@vnprodev.com-欢迎您! =================== ---使用条款---我们的浏览器扩展服务收集并存储有关特定网页的匿名信息,调试有关扩展如何工作的信息这些网页。 该扩展程序收集的信息完全是匿名的,无法个人识别。 我们使用这些信息来改善扩展程序的工作流程并修复错误。 我们不会将其用于任何商业目的,也不会将其出售给任何第三方公司。 VNProDev.com不需要您向我们提供信息即可使用我们的大多数服务。 因此,您始终可以选择不提供此类信息。 您可以使用浏览器扩展服务中的“选项”菜单来禁止浏览器扩展服务报告匿名信息。 如果支持,则可以在浏览器扩展服务的“选项”菜单中进行配置。 如果您选择使用我们的浏览器扩展服务,则与VNProDev.com有关隐私的任何纠纷均受本通知和我们的使用条款的约束,包括损害赔偿的限制,纠纷的解决以及越南法律的适用。 如果您对VNProDev.com的隐私有任何疑问,请[与我们联系]并提供完整的描述,我们将尽力解决该问题。 我们的业务在不断变化,我们的隐私声明和网站使用条款也将发生变化。 但是,我们信守我们所作的承诺,并且绝不会实质性地改变我们的政策和做法,以使它们在未经受影响的客户同意的情况下,对过去收集的客户信息的保护程度降低。 支持语言:English
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值