手机软件测试 嵌入式系统 嵌入式Linux 通信 开源 测试认证 集成测试 外场测试

发布新日志

  • 手机软件竞争格局加剧 - 近期产业新闻

    2008-02-10 10:09:43

    1. 诺基亚收购奇趣科技可能有“四两拨千斤”之效

        对奇趣科技而言,这是最佳结局。奇趣亚洲区首代David Almstrom就此事接受《中国电子报》记者采访时表示:“这对奇趣而言可能是最好的结果,面对微软、Symbian和Google,这个领域竞争太激烈了。”不过目前奇趣中国方面还不知道此桩并购对中国区业务会有何影响,他们也正在和诺基亚中国方面的交流中。可以想见,该并购会影响到奇趣与已有手机合作伙伴如摩托罗拉、LG等的关系,毕竟它们是诺基亚的直接竞争对手。

      从长远看,诺基亚这样一个强有力的公司介入对Mobile Linux的发展是利好。当然,移动Linux的格局会重新改写。从现有情况看,以法国电信和爱可信主导的LiPS论坛的力量在越来越弱化,一些企业正在转向由NTT DoCoMo、摩托罗拉等成立的LiMo基金会。而诺基亚是否会自成一派,还是会随奇趣加入LiMo,成为与Android抗衡的一支力量,现在还不得而知。非常大的可能是,随着Android把平台完全开放出来,诺基亚也很可能把平台开放出来,而这个业界有两个完全开放的平台,对移动Linux的发展无疑有非常大的促进作用。届时,最受影响的将是微软的Windows Mobile。

      这起并购还可能对摩托罗拉产生较大影响。摩托罗拉是奇趣在手机业务上的最重要的合作伙伴,其相当成功的Linux手机“明”就是基于奇趣Qt embeded元上的。其实,早在几年前,摩托罗拉就有过收购奇趣科技的谈判努力,希望开放Linux之上的软件平台,就像今天Google Android的思路一样,但因为价格和一些细节原因没有成功。现在,摩托罗拉不仅失去了这样的时机,自身也陷入并购重组的危机之中。一朝失去机会,就可能永远失去机会。


    2. 诺基亚收购奇趣科技,加快软件战略的部署

    成立于1994年的奇趣科技对开源社区而言并不陌生,作为第二代开源公司,它以双重授权的商业模式为桌面和移动设备提供应用开发平台。其在桌面领域非常成功的Qt开发工具,实现一份源代码在Windows、Mac、Unix、Linux上的跨平台运行,有丰富的类库支持,在全球为众多网络服务商所用,包括Skype、Google Map、Adobe的Photoshop Elements都使用该软件。而它为手机和其他消费类电子提供的嵌入式Linux用户界面和应用程序Qtopia,也是Mobile Linux阵营一支非常重要的力量,中国的联想移动、中兴通讯、大唐移动、禹华、龙旗等都在利用Qtopia进行Linux手机开发,不过迄今为止没有大规模商用案例。

    首先表现在对已有Mobile Linux阵营的冲击。Mobile Linux因各自为政而互不相通,形成了LiMo、LiPS等多个阵营,且各阵营都企图树立商业壁垒,这也导致了Linux手机的规模商用化进程趋缓。而Google Android以更加彻底的开放决心进入移动Linux领域,一下子搅乱了原有企业授权收费的美梦。受冲击最大的,就有奇趣科技和日本的爱可信公司。因此像杨海这样的业内人士才会做出上述判断。

    Google Android平台的冲击其次表现为对诺基亚的Symbian、微软的Windows Mobile这类封闭平台的冲击。任何一个做开发的人都深谙开放对一个生态环境的重要性,尤其是对手机这样的个人消费终端而言。面对Google Android可能获得的巨大成功,诺基亚必须主动出击,收购奇趣科技只是举措之一。


    3. 奇趣科技变节LiPS转投LiMo

    LiMo Foundation(Linux 手机发展基金会)给移动手机Linux平台的竞争队伍加入了新的成员,LiMo计划在周一公布新成员的名单,名单中包括:Trolltech(奇趣科技), Acrodea(创道软件), ETRI(韩国电子通信研究院)), Huawei (华为)和 Purple Labs。在这个团队中,还包括创建者:NTT DoCoMo、Vodafone和Motorola,至今基金会已包括25个成员。
    Trolltech已放弃参与LiPS论坛(Linux Phone StandardsForum),这是一个以Linux电话终端标准为核心的论坛。Trolltech的退出,对于LiMo的工作更有利。Trolltech的CEO Benoit Schillings认为这是基于代码的一个解决方案,而不是一种规范。而Trolltech选择LiMo的原因则是,在LiPS组织开始作出行动之前,LiMo的努力很有可能生产出一件有价值的产品。  
    Trolltech的转变,是因为LiPS论坛选择了Gnome's GTK的用户界面柜架,而不是Trolltech的应用程序竞争平台和Linux电话的用户界面。
    Trolltech对LIPS的变节,预示着在初出茅庐的Linux手机市场,将引起一场激烈的竞争。除了携有不同目标的LiPS 和 LiMo之外,Google最近也公布了基于Linux的Android移动操作平台。 
    当Android和Open Handset Alliance(一个由33家手机制造商、软件商和电信业者组成的 Android 推广联合会)向LiMo的软件发起竞争时,LiMo的首领认为他们的努力在这场竞争中是有优势的。
    LiMo的直接执行官MorganGillis认为,他们与Android最大的区别是,LiMo平台的代码是经过市场证实的的技术,而他们是由LiMo的创建成员Motorola, Samsung, NEC 和Panasonic共同提供的。LiMo简单的重整就可以组成LiMo平台的第一个版本,这是与一个代码没被证实的新软件平台Android,相比较而得出的。LiMo认为Google还得经过两到三年才能批量生产稳定的手机软件。
    LiMo希望在第一季度,公布开放性Linux操作系统的第一个版本,以及给研发者们提供的编程接口。它也希望第一个基于软件的手机平台能占据第一季度的市场。

  • Google手机平台:带来新理念 冲击旧模式(转)

    2008-02-10 09:58:46

     继Apple(苹果)公司后,Google(谷歌)也来了,带着它叫做“Android”的开放式手机软件平台。
      Google的“算盘”和“盘算”

      继Apple(苹果)公司后,Google(谷歌)也来了,带着它叫做“Android”的开放式手机软件平台。

      Google在美国东部时间11月5日宣布成立由34家企业参加的开放手机联盟(OHA,Open Handset Alliance),又如约于11月12日发布了一个软件开发工具包(development kit),全世界成千上万技术人员带着好奇和兴奋下载了Android的SDK(软件开发套件),包括北京时间13日凌晨守候在电脑前的中国工程师。

      “用Google自己的解释,该项目是一个全套手机的软件方案(total mobile soft stack),包括中间件、SDK、关键应用、Linux Kernel四个部分。”北京易路联动公司CEO徐国洪告诉《中国电子报》记者。他也是守在互联网上期待第一时间下载Android的开发工具包看个究竟的工程师之一。

      自5日宣布成立OHA以来,Google就一直在强调其涉足手机领域“不是要做gPhone”,而是要推出一个能开发应用程序的开放式平台,让其他主体设计制造出“上千万部gPhone”。Android平台强调的是“开放性”,与此前也采用开源(opensource)的Linux内核的企业或组织不同,Android还开放了基于Linux内核以上的开发工具,等于说是以中间件的形式推广手机平台,最终提供给上层应用开发者一个统一的内容,从而保证内容的可移植性和多样性(这恰巧与本报前不久刊登的文章观点相符,详见本报10月23日39版《手机操作系统初显中间件特征》一文)。

      对于Google这个以搜索为核心平台的互联网服务提供商而言,其使命是组织全球的信息资源,通过自己的平台让所有人都可以接触到这些信息。目前Google的用户还只是基于PC的传统互联网用户,而通信技术的发展已经可以让互联网从PC移植到手持终端上。Google当然不想错过这一能随时随地提供信息的机会,包括适当地将网络广告嵌入到手机互联网。

      负责Android项目的Google移动平台总监Andy Rubin在接受采访时表示,希望Android在高端、中端、低端各个产品线上都能导入,这其实是Linux与目前流行的诺基亚的Symbian、微软的Windows Mobile等私有操作系统的最大区别。不过此前的Linux手机派系众多,产品也仍处较高价位,没有太好发挥开源的优势,Android的介入首先会对移动Linux(Mobile Linux)阵营带来较大的冲击。

      操作系统的封闭模式将被打破

      Google毕竟是一个有强大实力的企业,Android不仅对Mobile Linux阵营产生强大冲击,对其他手机操作系统而言也意味着游戏规则的改变。

      除了Linux,这个市场上的其他操作系统,如诺基亚的Symbian、微软的Windows Mobile、RIM,都是以封闭的产业模式运转的。Linux也不意味着完全开放,爱可信的ecosystem模式也想走微软的封闭产品模式。而Android带来的则是真正的互联网思维,开放的思维,它将直接冲击Windows Mobile或Symbian的封闭模式。这会给手机行业带来较大的变化,而且是比较利好的变化。

      如果没有开源的Linux,技术上仍然可以实现跨越Symbian、Windows Mobile的统一的API接口,但从商业竞争的角度,却很难真正做到。而Linux开源的本质导致Linux自身必定最后会达成一定的统一。事实证明,手机中间件概念很可能会率先在Linux上出现。而手机产品需要彼此互通的功能特性,使得跨操作系统的中间件或统一API成为可能和必需,Google Android的出现,在加速结束Mobile Linux不统一格局的同时,也为跨OS的统一接口奠定了基础。

      在Google通过Android平台介入手机领域的消息传出后,微软和Symbian方面的人士都纷纷表态“没有看到具体的方案”、“真正做成产品还为时过早”、“本操作系统已经有多少用户多好的业绩”,置疑Google“把触角伸到手机平台领域的能力”。值得提醒的是,Google并不是看上了手机平台的这部分利润,而是通过开放平台提供内容和服务。

      手机平台也许就因为这样被Google开放了,这种猜测一点都不离谱,即便最后Google的产品可能不过关,也始终会被具有同样思维的公司开放。私有操作系统的从业者应该以开放的心态看待移动互联网。

      对手回应

      Symbian:不过又一Linux平台

      Symbian首席执行官Nigel Clifford上周在东京举行的新闻发布会上对谷歌Android软件发表评论说,Android不过是另一种Linux平台,现在手机市场有10个、15个、20个,也许25个不同的Linux平台。有时候看起来Linux分裂的速度比其联合的速度更快一些。Clifford称,Symbian承认谷歌对“开放”的承诺,并且认为这是一件好事。但是,“我可能会说没有免费软件这种东西”。

    Clifford对其他软件与Symbian的竞争并不感到担心。他说,我们是市场的领头羊,我们的目标是保持这个地位。

      微软:难与成熟平台媲美

      微软CEO史蒂夫·鲍尔默上周四公开表示,Google发布的Android移动平台没法与Windows Mobile相提并论。

      鲍尔默说:“Google才刚刚发布Android移动平台,而微软则已经拥有了数百万的用户,拥有伟大的软件和大量的硬件支持。用户也愿意使用Windows Mobile。Android移动平台目前还处在一纸空文阶段,因此没法与Windows Mobile系统进行全面比较。”

      他称,目前有100多家移动运营商的150多款产品在使用Windows Mobile系统。今年,Windows Mobile的授权数量可能达到2000万份。

      专家观点

      王继平:传统软件商业模式被冲击

      Google今天的举措其实代表了软件发展的趋向:把软件从可以买卖、安装的商品概念,变成服务的概念,即利用软件提供一种服务。Google在这个基础上,不但将提供各种各样的互联网服务,而且将把它变成免费的服务,通过广告来获得收入。我认为这是创造了软件发展的一个模式。这可能对传统软件行业的冲击会比较大,比如像微软、Symbian这样的依赖于卖软件的企业的商业模式会受到影响。

      我认为基于Google这样的强大的品牌和经济实力的企业,是可以把这个事情做好的。

      (编者注:王继平现为诚脉科技软件有限公司CEO。他创立的南京移软科技后来被美国PalmSource并购,2005年9月又因爱可信并购PalmSource而并入爱可信公司。)

      移动Linux将重写游戏规则

      OHA绝非第一个意图将Linux推进手机的组织,移动Linux阵营的分散化现象十分严重。“Linux只是一个内核,本身的定义并不完整,因此让产业界以为是一个很容易抓住的机会,纷纷按照自己的设计,发展出了互不连通的Linux手机方案,反而导致了移动Linux领域的分散化。”MontaVista国际业务副总裁Art Landro表示。

      除OHA之外,目前在移动Linux阵营活跃的组织有今年年初由摩托罗拉、NEC、NTT DoCoMo、松下移动、三星和沃达丰集团六家成立的LiMo基金会(Linux Mobile Foundation),和2005年11月由法国电信旗下Orange与收购了PalmSource的日本企业爱可信(Access)为核心的Linux电话终端标准论坛——LiPS论坛(Linux Phone Standards Forum)。这两个组织中,前者旨在协调各方利益,形成一个基于Linux的统一API,后者则是为了建立一个涵盖端到端的移动Linux生态环境(ecosystem)。

      而在它们之前,开放源代码开发实验室(OSDL)和消费电子Linux基金会(CELF,Consumer Electronics Linux Foundation)中已经有专门的小组在进行类似项目。2004年9月,CELF还设立了专门的“Mobile Phone Profile WG”,目标也是确定通用的带手机中间件的API。

      一个又一个联盟或组织接二连三地生成,本身就意味着在Linux上统一API的困难性。OHA和Android有什么特殊的杀手锏么?

      “OHA和其他组织的最大不同在于,OHA是以产品导向为主,OHA是想打造一项产品,而其他组织则是以提供统一规范为主,鼓动别的企业采用他们的规范。”Andy Rubin表示。

      “之所以在手机系统中会分成很多Linux阵营,关键是Linux只是一个kernel,上面的中间件没有统一的定义。Google进来后,中间件这一层也opensource(开源)出来,我认为如果Google这套东西确实可行,LiMo或其他项目就没有太大存在意义了。”徐国洪表示。

      如此说来,Android犹如投入原本貌似平静且死气沉沉的池塘的一块石头,是LiMo等Linux阵营成员自动打破原来默认的游戏规则,还是再对Android产品观望一段时间,现在谁都说不清楚。不过,Google已经宣布第一款Android手机将在明年下半年推出,LiMo也表示2008年上半年将推出第一款基于LiMo软件的手机,LiPS的整套参考设计已经在今年北京通信展上展出了,毫无疑问,明年会是各阵营正面交锋的开始。

    对手回应

      LiMo基金会:LiMo、OHA可互相协作

      LiMo基金会执行董事Morgan Gilis本月5日就Google的手机平台事宜做出回应,表示欢迎Google在移动领域的举措。本报在LiMo主页找到了这份公开声明,现摘译如下:

      LiMo基金会对Google的这一“初步行动”表示欢迎。我们相信Google进入移动领域,并推出OHA联盟有助于移动Linux作为移动领域的基础技术的发展。

      LiMo基金会因移动通信产业而生,致力于提供一个开放的,基于Linux的中间件平台,加速下一代的用户体验。LiMo自2007年1月由摩托罗拉、NEC、NTT DoCoMo、松下移动、三星和沃达丰发起组建以来,现在已经有21家成员。

      LiMo的创建,基于参与组建的各移动通信领域的领导企业有这样的共识:手机上的价值线(value line)已经重构。现在的移动通信产业,软件领域最具差异化价值的部分位于应用和服务层,这些在中间件之上的应用和服务将塑造下一代的用户体验,而用户体验是共通的,它跨越了手机品牌和手机型号。LiMo的角色是提供通用的中间件平台,我们相信相比较商用授权的私有平台,这种中间件平台能更有效地在基于移动Linux技术的开源平台上实现。

      LiMo和OHA其实在移动Linux的生态系统中共享很多会员,没有本质上的或技术上的障碍阻止LiMo和OHA之间展开互相协作。

      专家观点

      徐国洪:“公开”不等于“免费”

      Google的Android手机平台是以开源的方式改变市场游戏规则。但其中有一个概念需要澄清,开源不等于免费。从常规讲,开源的产品也包括了其他公司的专利费。

      如果留意,Google从来没有用free一词描述Android产品,当然这仍不排除它是free的或者极低价格的。但有的公开联盟会声明是“open of charge”,比如阿帕奇在推其服务器的时候,就公开说自己既是opensource,同时也是免费的,而Google没有这样说。Android中用了很多Java的东西,Sun公司是否会收版权费还不清楚。值得注意的是,Sun Microsoft并不是OHA的成员。

      (编者注:徐国洪原是嵌入式浏览器iPanel和国内数字电视机顶盒企业茁壮的创始人,他现在的公司易路联动正在致力于开发适合中国市场的手机中间件产品。)

      晓东观察

      Android对爱可信的影响——Android如果真的在产品上没有什么问题,对爱可信的ecosystem概念会有非常大的甚至毁灭性的打击。爱可信中国公司相关人员在接受《中国电子报》记者采访时表示,从现阶段进展看,爱可信和Orange的产品成熟度、商用化程度更加确定一些,目前还是对自己产品比较有信心。

      Android对奇趣科技(TrollTech)的影响——其实奇趣在今年已经提出了其Qtopia套件不仅基于Linux操作系统,而且也将支持微软Windows Mobile的构想,这其实已经在做跨平台的中间件概念。Android对它而言具有相当冲突性,它是否能抵抗Google这样一个强大的竞争对手,还要走一步看一步。首先是要看Google的产品是否过硬,其次要关注Google的商业模式是什么。

      Android对微软的影响——微软会是受Android冲击最大的。除了正文提到的原因,微软还有点“后院起火”的危险:其拥趸HTC是Android目前的一大支持者,并很有可能成为2008年下半年第一批推出Android手机的企业。从技术上,Windows Mobile是最容易被开发者抛弃的平台。

      Android对Symbian的影响——Symbian相对比较独立,又拥有全球最大的客户群,故Symbian对Google Android的态度几乎是傲慢的。但基于Symbian有S60、UIQ等多个平台,这些平台对Google Android的态度并不一样,其实这些平台本身就在走向中间件化。

      Android对Palm的影响——谁知道会有什么样的影响?这家已经宣布支持Windows Mobile的硬件企业早些时候表示将在Palm OS平台上支援Google的服务。

  • 3G 新增长 新业务 --- 对话高通公司中国区总裁Frank Meng(转)

    2008-02-10 09:20:19

    第一部分 中国3G发展历程

    易观国际:作为的一个重要的技术提供商,高通是怎么看待3G在中国的发展?高通技术如何引领未来3G在中国的发展?

    孟总:提到这点,我们觉得可以首先回顾一下CDMA的发展历史,因为实际上提到CDMA发展历史的话就离不开高通,就等于讲了高通的历史。今年正好是高通成立20周年,这对任何一个公司来讲都是一个漫长的时间,特别是对高通这样的高科技公司。在过去二十年里面通过把CDMA从理论上的技术转成了一个真正能够作为大规模商用的民用通信,或者说公众通信系统,作为标准,作为技术推向全球,我觉得这一点是跟高通的历史分不开的。高通刚成立时,比较占主导的数字技术是TDMA,但是高通的创始人都有很强的技术功底,大部分在70年代初期就开始在做军用通信和卫星工作上面研究过模拟的TDMA和CDMA的各种技术的比较,所以他们在80年代后期就觉得在有效的频谱资源的基础上,真正能够解决大规模民用通信的最好的办法就是CDMA。那时候把CDMA当做一个技术来主推,但遇到的阻力很大,原因在于整个全球既有的利益基础上,制造厂方和运营商在TDMA上面投入的非常多,这时候当新技术出来的时候,就会对原有的技术和利益有很大的冲击。整个业界一开始说理论上CDMA可以做,但是现实不可能做起来。一直到高通在1989年11月向业界做了第一个系统的演示,跟业界证明CDMA作为移动通信是可以实现的,那时候业界的反对者改变了一个说法承认了相信它是可以实现的,但是我们还是不认为它能够真正的做成一个民用的通信设备,因为当时在终端设备上存在一些不便。但是高通公司这些技术人员和管理者凭着他们对CDMA技术的深刻理解,相信随着半导体技术和通信技术的发展,这点是可以实现的。1995年第一个商用CDMA系统在香港建成,1996年开始在韩国、在美国开始建立,这时候CDMA技术才开始在全球中得到一个具体的应用。高通公司在成立的前四年,基本上完全在做CDMA技术的基础的推广工作,十年过去了,大家才开始对3G谈得比较多,用得比较多。从技术提出来到最后作为主流的三个技术,CDMA2000,WCDMA和TD-SCDMA的系统,全球的3G完成了技术上的百家争鸣,大家通过理论和技术证实那种系统最好,现在基本尘埃落定,所以说3G在全球的发展也是经过了漫长时间的。转过来,让我们来看看中国3G,我觉得中国在第一代和第二代移动通信的发展上,其实走得都不是很晚,从运营商的角度来讲实际上走得比较早。像1987年中国开始建第一个移动通信系统,等于服务商开始把这个服务提供给社会大众的时候,那个时候距离世界上一些最先进的市场提供移动通信服务,也不是很遥远,中国二代的技术1994-1995年开始,那时候离欧洲的进程也很接近,到了3G我们觉得中国把新的技术作为运营投入,把它提供的服务贡献给社会大众,这个进程现在看来是落后于其他的国家。所以我们还是希望能够在中国大力推动3G或者移动通信技术的引进,当然我们也非常希望3G在中国有一个非常好的发展。

    易观国际:方才对高通历史的一些讲话,使我最后得出一个结论,高通正是因为对CDMA的执著才取得了现在的辉煌。

    孟总:我想这个是因为当时有很多人跟高通同期研究CDMA技术作为商用、民用通信系统的还有其他一些公司,后来都放弃掉了。你现在到网上查一些80年代后期,90年代初期的文件都能看到,当时大家根本不相信能成功,就算成功了也不可能变化,大部分公司都坚持不下来。只有高通能够坚持十年把一个纸上的技术推向市场,变成标本化。这跟管理团队对技术的理解、对未来的追求,还有一种不懈的努力分不开的。

    易观国际:我下来的问题可能比较敏感,但是我所做的访谈都问了,就是一定要让你做一个决策,未来3G标准在中国整个的财政的发放、布局以及时间,一定要清楚回答的话,您会怎么看这个事情?从高通来讲您觉得这三大标准可能的组合是什么,有什么版本?您觉得哪样的标准会是主流的部署标准?

    孟总:我们觉得中国的情况比较特殊一点,从技术选择上来讲,目前包括从政府、运营商和业界在做测试,做研发。所以我们觉得有可能中国大概会是世界上第一个实现三个技术都同时存在的国家。当然每一个技术有其独特性,技术上讲没有太大差别,但是中国因为跟牌照发放有关系,在某种程度上将,存在一定的政府行为,所以到最后,很有可能是运营商、产业各方面的不同利益的一个折中,所以我们觉得应该三种标准都很有可能在中国部署,这是我们目前的判断。

    易观国际:牌照发放的时间呢?

    孟总:牌照发放时间,我觉得应从主观和客观两个角度看。主观上,我们还是希望牌照能够尽快的发放,因为我觉得对中国的产业,不光运营商和制造商,还有后面很多跟随的软件企业,都有很大的影响。3G牌照不发的话,实际上就有很多未定因素,当然行业里面大家表面上看起来有些无所适从。但最重要的是,有时候大家看不到的一个问题是:在所有的产业后面都有很大的资金需求,最大的到最后影响整个的产业发展的是后面的资金链,就是资本市场。资本市场最怕的是不确定性,如果牌照发了,不管是什么样的模式,我相信资本市场和整个产业都可以很快的适应,把它驾驭到对自己最有利的准备上面。但是如果牌照没发,对很多的企业和他们后面的资金链上的资本市场上的人们来说风险就非常大,所以大家就不太好判断。因此从主观上来讲,我们觉得快一点会好一点;再有对中国产业来讲,如果早一点发的话,机会会多一些。因为这是一个技术转型,从技术转型的角度来讲的话,新兴市场的新兴公司,机会永远会比传统的公司机会大一些。所以我们也希望有一个转型的时间,给中国的企业能多一些机会。这些当然都是主观的,从客观来讲,我们也看到过去两年中国的3G牌照,大家都知道要发,但怎么发成为一个迷。目前我们看到了不同的评论和我们自己做的预测,觉得跟业界大部分都一样,基本上每六个月往后延,但是我们通常也不做具体的预测了。一方面政府的行为和政府政策的非透明性,实际上使我们业界没有办法做出一个比较逻辑的或者合理的推测,所以我们更愿意看到像易观这样的,可以跟大家做一个预测。

    易观国际:最近我也参加了3G各式各样的高峰论坛,无论是学术界还是业界普遍认为,其实3G本身不是一个新技术,相关的标准在很多年以前就已经出台了,另外它的带宽跟我们的真正的移动互联网还相差甚远,您刚才说到3G三个标准,有没有一些竞争性的标准也会存在,比如说HSDPA,您怎么看?

    孟总:从3G来讲,我倒不认为是一个很老的技术。它的时间大概很久了,包括从高通的历史来看,过去20年一直在做这件事,所以你觉得CDMA包括CTMA把标准定下来时间很长,但是通信行业一个技术从理论论证到制成标准,再到推出商用,实际上是一个很漫长的过程。所以我们自己现在看的话,3G的这几个,不管是CDMA2000、WCDMA、还是TD-SCDMA,不算是一个起步,还没有真正到把整个的技术作为一个技术最成熟的时候。因为这几个技术还在自己不断的进化演进,比如举CDMA2000,这三个技术因为都是基于CDMA2000的,他们的进程实际上跟CDMA2000的进程有非常大的相关性。从WCDMA可以看到,CDMA2000的出来了,有WCDMA与它相类似或者相竞争的标准。然后CDMA2000继续往前演进到了Release-O版本,这样WCDMA就出了一个HSDPA 把它原来技术上达不到的基本上跟CDMA2000又同步了,现在CDMA2000下一个进化的是EV-DO版本A,从这两个标准来看,你们可以看到,他们还是在不断的进化和提升的阶段。其他还有很多产业界里面的各个主要技术领先公司,特别是通过高通公司做一些新技术的研究投入,比如说在CDMA2000用做干燥消除,用分机天线,做过播广播的模式都是使CDMA本身的技术不断的往前引进,所以我觉得这些技术在今后相当长的时间里面,越来越作为整个新的主流技术在实现,因为技术永远有不断的创新。但是目前来讲我们还没有看到真正不管在理论上和我们预测的一些值上面能够对现有的CDMA技术有一个革命化的改善或者是创新,比较显著的提高它的效能等等各方面都没有。包括你刚才提到的WiMAX,我觉得WiMAX离具体的商用还有很长的时间,通常讲WiMAX里面包括了两部分,一个是做固定应用的;一个是做移动应用的,做固定应用的标准已经出来了,我们相信今后几年里面可以看到它出来成为商用。但是大家看到WiMAX最感兴趣的还是做移动的应用,目前从标准化的角度说还没有做完,现在估计起码到2006年才能成为标准。不管是CDMA2000还是WCDMA,成为ITO的3G标准以后,真正商用要多少年的时间?所以你可以预见到WiMAX真正商用要多长时间。到那个时候,我们的看法是,它不会变成一个主流技术,也不会做成一个对3GCDMA的移动通信技术的一个非常可考虑的能够参照的竞争者。第一个我们讲优势你没有,因为你要比现在的CDMA2000、WCDMA、TD-SCDMA的时候至少差不多要晚四到五年,部署了多种大量的可能性。第二个我们做了很多的研究,实际上高通公司对各种新技术都非常的专著,都非常有多的研究,我们有几个公司里面从不同的角度来考虑以OFDM这种技术,目前我们得到的结果,没有能够比CDMA技术更好的,特别明显的显著的提高,所以我们觉得这两点会造成它今后不一定会作为主流技术的一个可能。当然,业界会有很多公司因为有各种各样的原因在做,所以我们相信它早早晚晚作为一个技术能够出来,能够商用,在一定程度上可能和现在的CDMA作为主流,一种通信技术上面做一个互补。

    易观国际:刚才我们谈了很多标准的问题,谈了一些相关可能的竞争技术问题。就今天的日韩来讲,他们的3G今天已经开花结果了,中国可能是世界上目前看到的第一个比较庞大的地区国家的部署3G定位。就我们所知,他们的标准不是三个都上,比如说韩国以CDMA为主,日本的市场也是CDMA和WCDMA并轨,你认为中国在可能三个标准共存的情况下,中国将来的3G市场和日韩会有什么分歧特点,特别是在日韩的应用方面,有什么不同的特点呢?

    孟总:实际上我们可以先看一下这几个市场相同的地方,有很多市场虽然有不同点,但是谈到前景的话,一个方面可以考虑他们的经验有没有我们可以借鉴的,我们跟日韩最大的相同点是大家都是属于东方民族的文化,所以从应用角度来讲,我相信有很多相通的地方,对娱乐、家用电子制品的爱好有很多比较相近的地方,所以我想日韩3G的成功实际上可以作为中国3G能够参考的很重要的地方。从不同的方面讲,我觉得在讲到应用之前还是要讲一下系统,因为我是学技术出身,而且真正是做系统出身,所以我自己一直不认为整个电器市场,移动通信市场会像大家平常讲的先有鸡还是先有蛋的问题。因为通常在媒体上或者业界的很多人士都讲,“没有应用,我们为什么要做3G?”等之类的问题。我自己从来不这么认为,因为我是做通信系统出身,从贝尔100多年前发明电话开始,一直市场基本上都是技术引导,应用主导。贝尔发明电话的时候也没有人跟他讲,因为我们要打电话,所以你发明一个电话吧。从移动通信我们比较近的角度讲,特别讲应用,像中国的短信发展那么普遍,也不是因为大家有了需求让运营商把功能开发出来,我相信移动通信整个产业还是技术领先,技术推动。因为我们经常讲科学技术是生产力,本身鉴定这个行业就是把科学技术能力实现,能够体现出来。然后业界有很多很的的优秀人物,人士和公司会把它转换到大众服务的应用上来。所以这点上,我觉得一定要先有网,没有网的话应用无从谈起。说到“网”,跟韩国比较大的差距就是,中国毕竟是地大物博,领土要比日韩面积大得多,对布网角度来说是一个非常大的挑战。扯一个题外话,比如,从电信传播角度的话,2100兆的频率已经很有挑战的,现在3.5G或者更高的,现在理论上可能达到很多,追求很高的峰值,但是可能性其实非常低。所以讲两点依据,网上怎么布都可能和日韩相差比较多;第二个我觉得不同的是,运营商在整个商业链里面起到的角度和力度可能会有些不一样,日本韩国这两个市场有一个比较显著的特点,是运营商对终端是百分之百的控制的,它的终端都是按照他的标准做的,然后他来买,然后再分销出去,跟他的服务一起提供给用户。中国过去基本上是一个百分之百的开发市场,运营商基本完全不介入,一直到近两年,联通、移动都牌示进入到终端,现在中国终端市场大概有10%的是通过运营商走的。对终端的控制力度不一样,也是我们跟日韩相比,在今后整个3G应用和移动通信市场发展上看到的不太一样的地方。从第三个角度,我觉得经济基础是构成上层建设的基础,日韩这两个国家,不管是从人均收入还是GDP要远远高于中国的平均值,所以可以看到他们的ARPU值很高,ARPU值高了以后运营商做的事情多一些。中国的平均数会往下拉一点。但是中国也有中国的特点,因为中国整个地域社会的发展不是非常的平均。我们实际上在东南沿海、在北京、上海这些大城市,有几千万的用户基础。这是一个客户群。但是考虑到全球移动的话,平均数就会被拉下来了,所以在应用这方面,推出应用,推出建网的时候都会有不同的考虑。最后一个关键是你讲到的应用,这一块我自己相信相通的地方比不通的地方会多一些,日韩现在成功的比较多的,我觉得从无线互联网的角度来讲,还是多媒体的应用。我们看到这会是今后比较大的一个发展趋势,因为在原来通信技术上面有很多不能实现的事现在可以实现。看一下现有的中国移动互联网上数据应用比较多的,大家讲的比较多的,一个是铃声下载,一个是图片的下载,实际上在我看这就是多媒体的初级阶段,因为带宽不够,所以只能下一些小的铃声图片。可以等带宽够了以后,如果技术上能够保证运营商用比较低的成本组网,能用比较低的价格把宽带服务提供给消费者,所以我相信这个铃声会更加丰富,比较简单的图片就可以变成动态的画面或者是看电视都可以,所以我们觉得今后的发展方向会朝着多媒体的应用,而且它也会越来越多的作为主流的应用。

    易观国际:我注意到刚才您谈的第二个不同的是整个日韩的电信运营商,他更多地控制着产业链,而今年中国运营商控制的趋势是越来越强的。我的问题是,你认为会不会有一天,今天的中国的运营商会走向控制的模式。

    孟总:我觉得在相当一段时间里面,中国的运营商会影响和控制这个行业。中国的运营商还是比较习惯于过去的经验,确实做得非常的成功,所以终端有很多的种类,在社会上有很多人在走这个终端的生产制造和销售服务。所以我觉得过去的成功也就成了今后一定的包袱。中国的运营商在手机定制的角度上来讲,从技术上本身没有问题,所以他们也开始参与越来越多的定制,但是关键的就是到最后是谁买单。目前来讲,我看到中国的运营商还不太愿意全部把这个事情接过来,全部接过来要有相当大的魄力,要知道自己对终端都负责了,而且对产业链的影响非常大。比如说我们现在完全开放的市场,特别是根据中国的国情,因为很多企业都是国有的,经济规模上不去的话,大家也都是做做而已。如果到了运营商能够选择性地来选择的话,我相信市场上面不会有那么多的供应商,因为他要实现自己的经济效益和经济规模的问题,所以我觉得在中国今后的发展,运营商进入的百分比一定会越来越多。如果说现在是百分之十的话,在3G初期的时候,因为有很多技术原因和市场原因,运营商可能介入更多,甚至百分之百的介入,但是对整个大势来讲的话,我相信在中途不一定能超过50%。

    易观国际:您刚才说的有一些现状我完全同意。今天跟大家间接进行交流,他们谈到的更多的问题是,随着整个电信运营的竞争,中国移动和联通之间互相的竞价,他们觉得将来随着电信和网通拿到牌照,未来的移动和电信运营服务的竞争会变得越来越白热化。比如联通的ARPU值还是相当高的,移动的高端人群好一些,但实际上我们今天看到随着整个联通,包括小灵通的竞争,用户开始用多种的终端,原来的话音开销费被多种终端,被多种的网络给生吞掉了。在这种情况下在您觉得还是认为不会超过50%?

    孟总:我觉得很难超过50%,因为很重要的一点,我觉得一个是他们习惯的做法,还有一个资本市场可能的反映和影响。因为现在没有超过终端的话,像中国移动是世界上大概利润率最高的移动运营商。如果他要在同等程度上介入终端的话,我相信他的利润率在一定时间里面会有影响,他的资本金开支起码会增加,对他的很多运作体制都会有影响。我觉得现在谈的运营商对终端,可能期望理想的就是四两拨千金。我能定,但是我不出现。所以到最后就会成为跟制造商的一个很有意思的博弈过程,到最后会变成怎么样很难讲。因为从传统上的两个模式比较干净:一个模式完全像美国、日本、韩国的运营商百分之百定制,百分之百的采购,你买手机一定是买我的手机,这是一种模式;另外一种模式就是以前在中国比较熟悉的完全开放市场,运营商根本不管,你爱用谁的手机用谁的手机我只管卖卡。这是一个模式。从产业制造来讲,我相信这两个模式都会很好的找到自己的定位。如果做运营商的话,可以这么方面好办,但是怎么样能够变成只有一个用户,你的生意就有可能只跟一个有关系,所以到最后怎么定位,每个企业能不能做,我相信他们都比较好适应。比较难适应的话就是你一定要按照运营商定的走,但是如果运营商不买单的的话中间有很多风险,比如都是制造商来承担的话,有哪几个制造商,在多大程度上能够继续在这里面做下去,这个可能到最后要看,这是一个动态的安排,所以结果也有可能会非常不一样。但我相信会有企业能够适应这种环境。到最后总会要有人做。

    第二 中国3G发展的瓶颈

    易观国际:第二个部分,您怎么看Windows我们认为智能手机在未来几年会有一个爆炸式的增长,智能手机实际上是我们认为宽带互联网变成现实的一个很重要的途径,当然从世界的竞争来讲,是Windows 的操作系统BREW的应用开放;但从微软的特点来讲,它可能先进来,然后再往上走,高通怎么看BREW将来可能跟Windows等应用开发环境的竞争?

    孟总:从知识层面来讲,高通所做的所有的不同技术实际上都是非常开放,兼容性非常强的。像我们的BREW上面能够支持Windows,但是Windows上面并不能支持BREW,所以刚才讲到的BREW第三方的平台,我们从芯片的角度也都在支持。因为今后的发展,不同的运营商为不同的客户群会有不同的应用,从应用方面看,我们觉得相当一段时间里面应该是一个多厂家的环境,因为Windows 有它的特点,它的好处是企业用户非常的多,所以做企业应用的时候相信有很多非常有利的地方。但是它不好的地方,我个人觉得是应该从有线的环境搬到无线的环境里面来,所以他有很多历史包袱,会造成他的一些限制。比如说在手机环境里面,如果功耗很高,对CPU的要求很高,都会对手机的可用性和价格有相当大的制约因素,所以我相信它在很多特定的环境有很多……比如说一些高端的智能手机上面可能能够有一些定位,但是如果是把多媒体应用做出很多面向大众消费者的应用,我自己觉得它要走的路还很长,相信还有很多其他的平台,包括像BREW的话会有很强的竞争优势。

    易观国际:您觉得不是一个逐步替代的关系。

    孟总:我觉得不是一个会替代的关系,都会在产业链里面各有各的地位,所以今后很长一段时间可以看到,有的终端上面既支持BREW,同时支持CDMA,也支持Windows,也可能支持里面的其中之一。我觉得最重要的是假如运营商对终端有诉求和控制的话,如果他们没有就是终端的提供厂商,他们在设计和目标客户群的定位上会加以考虑。

    易观国际:我们刚才谈了很多,围绕着技术的解决方案,包括未来的作为一个重要的应用平台可能的一些竞争和发展。您觉得站在整个今天我们还没有发送3G牌照的截点上,您看到未来的3G的趋势是什么?

    孟总:我觉得最重要的,第一个还是回到我前面讲的,我还是认为网络比较重要,如果没有牌照,没有网的话我们讲的什么都有力使不上,当牌照发了可以建网了的时候,我觉得终端应用这两个是相辅相成的,不太容易能够分开的。因为从3G的很多应用上面,应用实际上跟终端的关系非常强,所以也是移动运营商越来越多地介入终端,因为不介入中端的话很多业务实现不了。所以从两个方面,一个是大众用户的多媒体应用,另外是对企业的应用,因为3G能够提供一个宽带移动互联网的环境,所以对企业应用应该有很多过去实现不了,而现在有很多能实现的事情,所以从这两大方面的应用和支持的终端会是整个行业最重要的一环,

    易观国际:但是我最近刚刚拿了一份测试报告,现在的测试是不过关的,特别是在终端的层面上。

    孟总:你指的是TD-SCDMA。

    易观国际:包括其他的终端,因为对于中国来讲不太可能只上一个标准,通过他们的测试来讲,实际上兼容性的测试也是很重要的测试,TD本身和后台的互相操作性是差的,同时终端之间也是有问题的,需要沟通。那你觉得终端会不会成为像联通跟不上CDMA 1x一样,是一个重要的瓶颈呢。

    孟总:因为技术一直在进步,所以在不同时候我自己觉得CDMA2000几个问题基本上没有了,WCDMA绝大部分没有了,日本欧洲现在看到这些终端都已经变成CDMA。TD-SCDMA因为它有自己特别的地方,所以跟其他两个技术还不太一样,因为这些都是在WCDMA发展历程中,大家都碰到过这些问题,所以我觉得起码CDMA2000和WCDMA到目前的阶段已经变成是现实商用的技术,这点比较重要。因为从三个3G的标准来讲,您不能否认的事情就是这三个技术的成熟性不太一致,CDMA2000肯定比WCDMA成熟,WCDMA肯定比TD-SCDMA成熟,所以从这点讲会有些区别,但总的来讲,终端应该已经过了最困难的时间。终端包括CDMA2000、WCDMA,我相信2001年到2002年的时候是最困难的,2002年后面到2004年终端问题基本上大部分都解决了。

    易观国际:所以您觉得终端不是一个瓶颈。

    孟总:我觉得不是。

    易观国际:那唯一的瓶颈您认为是网络,还是牌照。

    孟总:我觉得是网络还有牌照,因为牌照下来了以后,产业链里面剩下的很多都是技术问题,产业链里面这么多人,我觉得技术问题早早晚晚都能解决,但是牌照的不确定性,不管是从形势的不确定性,还是时间的不确定性,这个是最大的瓶颈。

    易观国际:可以总结一下我们前三个部分您的核心观点,一个是中国未来的3G环境,是第一个也是最大的三种标准,高通对进一步坚持原有的策略。

    孟总:我觉得高通会支持所有3G的标准,包括WCDMA上面我们实际上也做了很多工作,而且现在我们的芯片是世界上客户群最大的一个供应商,所以从高通来讲的话,我们对3G都支持。
    易观国际:高通认为在未来运营的环境中不太可能走向向日韩供应商完全控制产业链的状况。

    孟总:我觉得比较难,大概会是折中的方式。

    易观国际:高通会是一个与其他的应用开发平台共存的,而且不会受到CDMA战略的影响,能够给CP和SP提供更多的空间。

    孟总:对的。

    易观国际:最后一点您认为今天看到的网络可能的两种应用,在带宽的问题解决后,一个是企业,一个是个人的多媒体应用,还有一个是终端的本身质量问题,唯一的瓶颈是牌照的问题。

    第三部分 新亮点,新增长点

    易观国际:在第一个部分我们讲了中国对未来标准的演进,包括刚才我们就最后一个问题展开,因为我们今天也有很多的运营商经常带着很多的问题,相信您刚才的讲解会更好的促进他们的思想。第二,对于高通来讲,大家都知道高通是技术标准的提供商,那么你对中国的市场或者反过来讲,中国3G市场终端是不是对高通有一些特殊的意思,如果有一些特殊意思的话,高通是不是愿意因为这样特殊的意义,在这个大的市场的知识产权的谈判上会给中国一个好的条件。

    孟总:我想有一点我的看法不太一样,就是我觉得高通不是一个技术标准的提供商,我们通常讲高通是一个技术提供商,但是如果给一个标准,特别是在西方,标准是一个自下而上的过程,是产业界里面整个很多公司不同的贡献和大家的努力的折中才实现的标准,所以自己觉得也是一个自下而上的标准话的一个过程。所以不管从CDMA还是从3G来讲,高通在标准化里面都起到了不可忽视的作用。所以从高通在3G产业发展里面大家可能觉得高通是标准提供商。但是我觉得标准是大家的,在国内通常在媒体上或者业内的人士在做评论的时候,我觉得大家通常把标准知识产权和产品三个事权混淆了,这三个实际上是三个不同的事权。所以这点我想强调一下还是不太一样的。从中国市场来讲,我觉得中国是世界上最大的通信市场,这点来讲没有人在再怀疑,而且中国从移动通信角度来讲,大概每年6亿手机的产量,大概有16%-17%是在中国,所以这就是中国本身市场的消耗。所以我想对任何做移动通信,不管是做什么产品,只要在这个产业里面,中国市场都是一个非常重要的市场。然后从整个CDMA在中国的发展,我相信从2002年联通推出CDMA的系统,不管是从知识产权上面,还是从高通为中国知识产业所做的贡献都促使CDMA的发展比较快,现在联通已经是世界上第二大的CDMA运营商。从整个3G的资产知识谈判上讲,影响现在还算正在进行时。所以我这边也不太好进行评论。但总的来讲,我相信这些所有知识产权授权,本身是一个国际上有一个比较通行的游戏规则,像包括高通公司在CDMA2000上面,全球有130多个授权厂商,WCDMA、TD-SCDMA全球也有60多个厂商是我们的授权厂商,这些都是世界上一流的,非常大的公司在投入3G CDMA的全球推广和各种各样的产品制造方面。所以我们相信这是一个业界认可的,可操作的模式,所以我们相信在中国,我们也会继续不断推进3G在中国的发展。

    易观国际:刚才您纠正说高通是一个技术提供商,我觉得这是一个比较准确的点,因为我们看到高通有面向终端的芯片,面向后台基础设施的方案之外还有BREW作为一个重要的应用开发。你怎样看BREW未来整个高通3G的过程中CDMA的引进的作用,特别是BREW跟其他的一些应用开发环境的竞争。我可能问了一串问题。第三个问题,客观上联通的CDMA虽然今天在全球是最第二大,但在整个中国市场的份额来讲是比较小的,这样一种CDMA市场的状况会不会影响BREW作为一个很追求的应用平台开发的前景。

    孟总:我想BREW是高通对移动通信产业所做的除CDMA技术以外的另外一个贡献,就是它为移动运营商提供一个端到端的解决方案。因为从CDMA为大家为整个社会,整个移动通信产业带来的就是能够实现移动通信艺术和宽带互联网的结合。但是我们也看到,真正实现了能够做宽带互联网的接入,但是怎么应用,怎么样能够把他变成消费者,不管是个人消费者还是企业应用,能够真正行使有效的大家能够体验到的一些应用,能够真正变成消费者可用的,实际上消费者对通信技术一个可能理解没有那么深,第二个没有那么多兴趣,因为消费者不会在意你到底是什么技术,对他来讲能不能提供我想要的功能,我们想要的是不是比较方便,比较便宜的能得到,这是业界要做的事情。从高通公司来看,整个业界原来在BREW之前虽然有很多不同的应用,大家提到过比较多,这些应用当然在产业里面有它存在的条件,但是毕竟它不是一个专门为移动通信产业而做出的方案,通常这些方案很多都是从有线互联网转来的,其实在移动互联网上有很多不协调的地方,因为我们终端比较小,所以对功耗有很多很多的要求,所以我们是完全是一个全新的,为了移动环境里面能够做出运营商可以推出来的,消费者会比较容易接受的各种应用,最重要的一条就是一定要有很多的CP和SP里面能够支持。这些支持不是说大家能够纯为开发而开发的,而是真正能让他们收到钱,因为所有的公司存在的目前就是盈利,这点不可否认。没有公司成立的那天是专门为了做一个事情而做的,特别现在CP和SP那么多,大家还是看到里面的商业机会,如果里面没有跟他们的赢利的模式,这些CP和SP实际上是很快的就不行了,所以BREW从过去有四年的发展我们觉得在全球发展得非常好非常快,当然一些绝对的数字比如说像我们最近开的BREW的全球大会上面宣布我们现在有二亿多的下载数量,但是我讲的最重要的数字对产业比较有影响的,对BREW的发展会有影响的,就是做BREW的开发商现在已经累计有3亿5千万美金的累计收入,中国的具体的收入我们并没有具体的统计,但是我们知道有一些BREW的开发商每个月现在是有盈利的,这个具体的数字我相信您可能通过一些业界的公司包括通过联通也可以拿到,确立他们现在已经看到钱了,能收到钱,这点就对他们的技术创新是一个回报,而且也给他们提供了资金,下一步就越来越好,这点比较重要。其他的一些应用,我们觉得一个就是整个应用的环境不是为了移动的环境来做的,所以技术上有很多局限性;再有一个就是为开发商创造的盈利模式不是很清晰,所以会有一些局限。所以从这点来讲的话,我们还是非常看好高通推出BREW能够帮助移动运营商为大众用户和专业用户提出很多很的的应用,这样的话把技术带来的宽带技术和互联网的优势体现出来,再一个整个的商业链上就会有越来越多的应用开发商来加盟。

    易观国际:我们每个月都会对CP和SP摸底,有一个技术的发布。您说的一些情况是事实,CDMA确实有挣钱的SP,但是非常非常的少,特别在移动阵营里面。再加上由于联通可能被拆分的谣言,使得我们今天研究的很多CPSP跟我们讲他们很动摇,比如说像化生,其实他在联通方面做得蛮大的,过去做移动很少,但他现在更想移动的东西,因此他觉得CDMA的用户群总体的盘子比较小。另外耗费非常非常的高,新用户也上,但是他的流失速度非常的快。这就回到我刚才问您的第三个问题,高通坚持这样一个策划会不会对的整个平台产生很大的影响。CDMA要挣钱您说也是非常挣钱的,但是现在的问题是中国的CDMA有挣钱的,非常少,而且挣得比较辛苦,因为整体的用户圈内沟通比移动网络里面开销的数据用户的消费更多。

    孟总:我想从两方面来讲,第一个CDMA像您刚才讲的一点没错。虽然联通已经算是一个比较大的CDMA运营商,但在中国整个的市场份额还是比较小,这个很重要的历史原因……就是我们讲到时间的重要性,因为在中国CDMA网和服务的推出要比USA.晚了大概七年,这本身是一个先天不利的地方。从高通来讲怎么样和产业链和各方大家一起努力,起码争取它的发展速度要高于USA.的发展速度,这个是我们要做的。所以在今后相当一段时间里面我们都会帮助我们的部门重点去做。从另外一个角度讲,BREW的技术本身实际上跟空中接口的技术无关,所以不管是CDMA也好,还是其他的3G技术也好,或者是Windows都可用。因为可能是无线环境里面的一个应用品牌。但是现在还没有更多其他的非CDMA运营商在采用BREW平台,所以在上面还有一些优势没有看到。我们现在看到不管在欧洲亚洲,一些国家的运营商包括一些主流运营商,一开始大家会怀疑,第一个觉得BREW是跟CDMA绑的一起的,第二个是觉得这么多平台的应用,到底新出一个会不会有比较明明显的好处,大家持怀疑的态度。我觉得BREW过去两三年的发展,使得全球的运营商可以开始看到,意识到BREW在这个平台里面真的有它的独到之处,而且是为非常重要的一些CDMA运营商提供很大的,很强的竞争能力,而且提高了他们的盈利能力。像美国的运营商,他们平均的ARPU大概是30多美金,但是他们采用BREW平台服务的ARPU值是60多美金,所以他的数据应用的ARPU值比他们高,所以现在很多的运营商开始意识到这一点,不管是USA.运营商还有现在亚洲的运营商开始在看怎么样把BREW应用移植到CDMA或者是WCDMA之外的领域,这也是我们下一步,在今后相当一段时间里面会努力做的一件事情。

    第四部分 你投资么,你会投向何方?

    易观国际:最后,如果你是投资人,你会投一个什么业务,特别是在3G的背景。

    孟总:我觉得从大的方面讲的话还是会专注在应用的领域,因为在应用的领域机会比较多一些,特别是里面有一些比较好的独特的技术,再往细分一点,我会专注一些跟媒体在移动环境里面应用的一些技术和应用公司。另外我觉得行业应用今后在移动环境里面,有很多要从传统的有线互联网搬到无线互联网,所以新的公司的机会少一点。再一个是多媒体的应用,面向大众消费者的,这上面的一些新的多媒体应用公司机会相对来说会多一些。

  • 交叉编译sip开源包案例几则(转)

    2008-02-10 09:14:35

      一直没空仔细研究下oSIP,最近看到其版本已经到了3.x版本,看到网上的许多帮助说明手册都过于陈旧,且很多文档内容有点误人子弟的嫌疑~~
      Linux下oSIP的编译使用应该是很简单的,其Install说明文档里也介绍的比较清楚,本文主要就oSIP在Windows平台下VC6.0开发环境下的使用作出描述。
      虽然oSIP的开发人员也说明了,oSIP只使用了标准C开发库,但许多人在Windows下使用oSIP时,第一步就被卡住了,得不到oSIP的LIB库和DLL库,也就没有办法将oSIP使用到自己的程序中去,所以第一步,我们将学习如何得到oSIP的静态和动态链接库,以便我们自己的程序能够使用它们来成功编译和执行我们的程序。


    第一阶段:
    ------------------------------------------------------
      先创建新工程,网上许多文档都介绍创建一个Win32动态链接库工程,我们这里也一样,创建一个空白的工程保存。
      同样,将oSIP2版本3.0.1 src目录下的Osipparser2目录下的所有文件都拷到我们刚创建的工程的根目录下,在VC6上操作:
           Project-Add To Project-Files
      将所有的源程序和头文件都加入到工程内,保存工程。
      这时,我们可以尝试编译一下工程,你会得到许多错误提示信息,其内容无非是找不到osipparser2/xxxxx.h头文件之类。
      处理:在Linux下,我们一般是将头文件,lib库都拷到/usr/inclue;/usr/lib之类的目录下,c源程序里直接写#include <xxx.h>时,能直接去找到它们,在VC里,同样的,最简单的方法就是将oSIP2源码包中的Include目录下的osipparser2目录直接拷到我们的Windows下默认包含目录即可,这个目录在VC6的Tool-Options-Directories里设置,(当然,如果你知道这一步,也可以不用拷贝文件,直接在这里把oSIP源码包所在目录加进来就可以了),默认如果装在C盘,目录则为C:\Program Files\Microsoft Visual Studio\VC98\Include。
      这时,我们再次编译我们的工程,顺利编译,生成osipparser2.dll,这时,网上很多文档里可能直接就说,这一步也会生成libs目录,里面里osipparser2.lib文件,但我们这里没有生成:)
      最简单的方法,不用深究,直接再创建一个工程,同上述创建动态链接库方法,创建一个Win32静态链接库工程,直接编译,即可得到osipparser2.lib。
    ------------------------------------------------------
      上面,我们得到了Osip的解析器开发库,下面再编译完整的Osip协议栈开发库,同样照上述方法,分别创建动态链接库工程和静态链接库工程,只是要拷的文件换成src下的osip目录下文件和include下的osip目录,得到osip2.dll和osip2.lib。
      在编译osip2.dll这一步可能会再次得到错误,内容含义是找不到链接库,所以,我们要把前面编译得到的osipparser2.lib也拷到osip工程目录下,并在VC6中操作:
      Project-Setting-Link中的Object/Library Modules:
           kernel32.lib user32.lib ... xxx.lib之类的内容最后增加: osipparser2.lib
      保存工程后再次编译,即可成功编译osip2.dll。
    ------------------------------------------------------
      至此,我们得到了完整的oSIP开发库,使用时,只需在我们的程序里包含oSIP的头文件,工程的链接参数里增加osipparser2.lib和osip2.lib即可。
    ------------------------------------------------------
      下面我们验证一下我们得到的开发库,并大概了解一下OSIP的语法规范。
      在VC里创建win32控制台程序工程,将libosip源码包的SRC目录下的Test目录内的C源程序随便拷一个到工程时,直接编译(工程设置里照前文方法在link选项里增加osip2.lib,osipparser2.lib引用我们之前成功编译得到的静态库文件)就可以运行(带参数运行,参数一般为一个文本文件,同样从Test目录的res目录里拷一个与源文件同名的纯文本文件到工程目录下即可)。
      该目录下的若干文件基本上是测试了Osip的一些基本功能函数,例如URI解析之类,可以大概了解一下oSIP的语法规范和调用方法,同时也能校验一下之前编译的OSIP开发库能否正常使用,成功完成本项工作后,可以进入下一步具体的oSIP的使用学习了。
    ------------------------------------------------------
      由于oSIP是比较底层的SIP协议栈实现,新手较难上手,而官方的示例大都是一些伪代码,需要有实际的例子程序参考学习,而最好的例子就是同样官方发布的oSIP的扩展开发库exosip2,使用exoSIP可以很方便地快速创建一个完整的SIP程序(只针对性地适用于SIP终端开发用,所以我们这里只是用它快速开发一个SIP终端,用来更方便地学习oSIP,要想真正掌握SIP的开发,需要掌握oSIP并熟读RFC文档才行,exoSIP不是我们的最终学习目的),通过成功编译运行一个自己动手开发出的程序,再由浅入深应该是初学都最好的学习方法通过对使用exosip开发库的使用创建自己的SIP程序,熟悉后再一个函数一个函数地深入学习exosip提供的接口函数,就可以深入理解osip 了,达到间接学习oSIP的目的,同时也能从eXoSIP中学习到正确使用oSIP的良好的编程风格和语法格式。
      而要成功编译ExoSIP,似乎许多人被难住了,直接在XP-sp2上,用VC6,虽然你使用了eXoSIP推荐的winsock2.h,但是会得到一个sockaddr_storage结构不能识别的错误,因为vc6自带的开发库太古董了,需要升级系统的Platform SDK,下载地址如下:
    http://www.microsoft.com/msdownl ... PSP2FULLInstall.htm(VC6的支持已经停止,这是VC6能使用的最新SDK)
      成功安装后编译前需加OSIP_MT宏,以启用线程库,否则在程序中使用eXoSIP库时会出错,而编译时也会得到许多函数未定义的Warning提示,编译得到exosip2.lib供我们使用,当然,在此之前需要成功编译了osip2和osipparser2,而在之后的实际使用时,发现oSIP也需要增加OSIP_MT宏,否则OSIP_MT调用oSIP的线程库时会出错,所以我们需要重新编译oSIP了:),因为eXosip是基于oSIP的(同上方式创建静态和动态链接库工程,并需在Link中手工添加oSIP和oSIPparser的lib库)。
    ------------------------------------------------------
      创建新工程,可以是任意工程,我们从最简单的Win32控制台程序开始,为了成功使用oSIP,我们需要引用相关库,调用相关头文件,经过多次试验,发现需要引用如下的库:
             exosip2.lib osip2.lib osipparser2.lib WSock32.Lib IPHlpApi.Lib WS2_32.Lib Dnsapi.lib
      其中,除了我们上面编译得到的三个oSIP库外,其它库都是系统库,其中有一些是新安装的Platform SDK所新提供的。
      至此,我们有了一个简单的开发环境了,可以充分利用网上大量的以oSIP为基础的代码片段和官方说明文档开始具体函数功能的测试和使用了:)
    ------------------------------------------------------
      我们先进行一个简单的纯SIP信令(不带语音连接建立)的UAC的SIP终端的程序开发的试验(即一个只能作为主叫不能作为被叫的的SIP软电话模型),我们创建一个MFC应用程序,对话框模式,照上面的说明,设置工程包含我们上面得到的oSIP的相关开发库及SDK的一些开发库,并且由于默认LIBC的冲突,需要排除MSVCRT[D]开发库(其中D代表Debug模式下,没有D表示Release模式下),直接使用eXosip的几个主要函数就可以创建一个基本的SIP软电话模型。

      其主要流程为:
      初始化eXosip库-启动事件监听线程-向SIP Proxy注册-向某SIP终端(电话号码)发起呼叫-建立连接-结束连接

      初始化代码:
            int ret = 0;
            ret = eXosip_init ();
            eXosip_set_user_agent("##YouToo0.1");
            if(0 != ret)
            {
                    AfxMessageBox("Couldn't initialize eXosip!\n");
                    return false;
            }
            ret = eXosip_listen_addr (IPPROTO_UDP, NULL, 0, AF_INET, 0);
            if(0 != ret)
            {
                    eXosip_quit ();
                    AfxMessageBox("Couldn't initialize transport layer!\n");
                    return false;
            }

      启动事件监听线程:
            AfxBeginThread(sip_uac,(void *)this);

      向SIP Proxy注册:
            eXosip_clear_authentication_info();
            eXosip_add_authentication_info(uname, uname, upwd, "md5", NULL); 
            real_send_register(30);  /* 自定义函数代码请见源码 */

      发起呼叫(构建假的SDP描述,实际软电话使用它构建RTP媒体连接):
            osip_message_t *invite = NULL;  /* 呼叫发起消息体 */
            int i = eXosip_call_build_initial_invite (&invite, dest_call, source_call, NULL, "## YouToo test demo!");
            if (i != 0)
            {
                    AfxMessageBox("Intial INVITE failed!\n");
            }
            char localip[128];
            eXosip_guess_localip (AF_INET, localip, 128);
            snprintf (tmp, 4096,
                    "v=0\r\n"
                    "o=josua 0 0 IN IP4 %s\r\n"
                    "s=conversation\r\n"
                    "c=IN IP4 %s\r\n"
                    "t=0 0\r\n"
                    "m=audio %s RTP/AVP 0 8 101\r\n"
                    "a=rtpmap:0 PCMU/8000\r\n"
                    "a=rtpmap:8 PCMA/8000\r\n"
                    "a=rtpmap:101 telephone-event/8000\r\n"
                    "a=fmtp:101 0-11\r\n", localip, localip, "9900");
            osip_message_set_body (invite, tmp, strlen(tmp));
            osip_message_set_content_type (invite, "application/sdp");
            eXosip_lock ();
            i = eXosip_call_send_initial_invite (invite);
            eXosip_unlock ();                               

      挂断或取消通话:
            int ret;
            ret = eXosip_call_terminate(call_id, dialog_id); 
            if(0 != ret)
            {
                    AfxMessageBox("hangup/terminate Failed!");
            }

      可以看到非常简单,再借助于oRTP和Mediastreamer开发库,来快速为我们的SIP软电话增加RTP和与系统语音API接口交互及语音编码功能,即可以快速开发出一个可用的SIP软电话,关于oRTP和Mediastreamer的相关介绍不是本文重点,将在有空的时候考虑增加相应使用教程,文章前提到的地方可以下载基本可用的完整SIP软电话的VC源码工程文件供参考使用,完全CopyLeft,欢迎转载,但请在转载时注明作者信息,谢谢!

    第二阶段:
    ---------------------------------------------------
      得到了一个SIP软电话模型后,我们可以根据软电话的实际运行表现(结合用Ethereal抓包分析)来进行代码的分析,以达到利用eXoSIP来辅助我们学习oSIP的最终目的(如要快速开发一个可用的SIP软电话,请至前面提到的论坛去下载使用oRTP和Mediastreamer快速搭建的一个基本完整可用的SIP软电话##YouToo 0.1版本的VC源码工程文件作参考)。

      现在从eXosip的初始化函数开始入手,来分析oSIP的使用,这是第二阶段,第三阶段就是深入学习oSIP的源码了,但大多数情况下应该没有必要了,因为在第二阶段就有部分涉及到第三阶段的工作了,而且oSIP的源码也就大多是一些SIP数据的语法解析和状态机的实现,能深入理解了SIP协议后,这些只是一种实现方式,没必要完全去接受,而是可以用自己的方式和风格来实现一套,比如,更轻量化更有适用目的性的方式,oSIP则只起参考作用了。

      eXosip_init()是eXosip的初始化函数,我们来看看它的内部实现:
      首行是定义的 osip_t *osip,这在oSIP的官方手册里我们看到,所有使用oSIP的程序都要在最开始处声明一个osip_t的指针,并使用osip_init(&osip)来初始化这个指针,销毁这个资源使用osip_release(osip)即可。
      我们可以在代码中看到很多OSIP_TRACE,这是调试输出宏调用了函数osip_trace,可以用ENABLE_TRACE宏来打开调试以方便我们开发调试。
      其它就是很多的eXosip_t的全局变量eXosip的一些初始化操作,包括最上面的memset (&eXosip, 0, sizeof (eXosip))完全清空和下面的类似eXosip.user_agent = osip_strdup ("eXosip/" EXOSIP_VERSION)的exosip变量的一些初始值设置,其中有一个eXosip.j_stop_ua = 0应该是一个状态机开关,后面可以看到很多代码检测这个变量来决定是否继续流程处理,默认置成了0表示现在exosip的处理流程是就绪的,即ua是not stop的。
      
      osip_set_application_context (osip, &eXosip)是比较有意思的,它让下面的eXosip_set_callbacks (osip)给osip设置大量的回调函数时,能让osip能访问到eXosip这个全局变量中设置的大量程序运行时交互的信息,相当于我们在VC下开启一个线程时,给线程传入的一个void指针指向我们的MFC应用程序的当前dialog对象实例,可以用void *osip_get_application_context (osip_t * osip)这个函数来取出指针来使用,不过好象exosip中并没有用到它,可能是留给个人自已扩展的吧:)
      
      还能看到初始化代码前面有一段WIN32平台下的SOCK的初始化代码,可以知道eXosip是用的原生的winsock api函数,也就是我们可能以前学过的用VC和WINAPI写sock程序时(不是MFC),用到的那段SOCK初始代码,还有一段有意思的代码,就是jpipe()函数,它们返回的是一个管道,一个有2个整型数值的数组(一个进一个出),查看其代码发现,非WIN32平台是直接使用的pipe系统函数,而WIN32下则是用一对TCP的本地SOCK连接来模拟的管道,一个SOCK写一个SOCK读,这段代码是比较有参考价值的:)
    j = 50;
    while (aport++ && j-- > 0)
    {
      raddr.sin_port = htons ((short) aport);
      if (bind (s, (struct sockaddr *) &raddr, sizeof (raddr)) < 0)
      {
        OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_WARNING, NULL,
        "Failed to bind one local socket %i!\n", aport));
      } else
      break;
    }
    含义即,依次检测50个端口,从static int aport = 10500;即10500~10550端口找出一个可用的本地端口来绑定listen模拟pipe的一对sock。
      eXosip_set_callbacks (osip)没有什么好看的,无非是和oSIP官方文档介绍的一样,设置一大堆的回调函数,关键是回调函数的实现,这也是许多初学者使用oSIP被卡壳的主要原因,不知道oSIP构建的程序是怎样跑起来的,随便选几个回调函数看一下eXosip是怎样实现的,有许多是形如下文的函数:
    static void
    cb_sndbye (int type, osip_transaction_t * tr, osip_message_t * sip)
    {
      OSIP_TRACE (osip_trace
      (__FILE__, __LINE__, OSIP_INFO3, NULL, "cb_sndbye (id=%i)\r\n",
      tr->transactionid));
    }
      即,只是打印一下调试,并没有完整实现什么功能,我们学习时,完全可以用相同的方法,定义一大堆回调函数,并不忙想怎么完全实现,先都是只打印一下调试信息,看具体的应用逻辑根据抓包测试分析和看调试看程序走到了哪一步,调用了哪一个回调,来明白具体回调函数要实现什么用途,再来实现代码就方便多了,当然,如果看透了RFC文档,应该从字面就能知道各个回调函数的用途了,这是后话,不是谁都能快速完全看懂RFC的,所以我们要参考eXosip:)
      
      我们对其中的重要的回调函数进行逐个的分析:
      ---------------------------
      osip_set_cb_send_message (osip, &cb_snd_message) SIP消息发送回调函数
      这个函数可能是最重要的回调函数之一,消息发送,包括请求消息和回应消息,一般情况下,状态机的状态就是由它控制的,发起一个消息初始化一个状态机,回应一个消息对状态机修改,终结消息发送结束状态机……
      看cb_snd_message的函数实现,要以发现,其主要代码是对参数中的要发送的消息osip_message_t * sip进行分析,找出消息要发送的真实char *host,int port的值(这些参数可以省略,但要发送消息肯定需要host和port,所以要从sip中解析),最后根据sip中解析出的传输方式是TCP还是UDP选择最终进行消息发送处理的函数cb_udp_snd_message,cb_tcp_snd_message处理(它们的参数一致,即本函数只是补全一些省略的参数并对消息进行合法性检查)。
      **毕竟eXosip是一个通用的开发库,它考虑了要支持TCP,UDP,TCPs,IPV4,IPV6,WIN32,*nix,WINCE等等多样化的复杂环境,所以,我们可以略过我们暂时不需要的部分,比如,IPV6相关的代码实现等。
      
      由于我们大多数情况下SIP是用的UDP,所以先来看一下cb_udp_snd_message的实现,它从全局变量exosip中获取可用的sock,并尽最大能力解析出host和port(??难道前面的函数还不够解析彻底??如最终仍无port信息则默认设置为5060),使用osip_message_to_str (sip, &message, &length)函数将要发送的格式化的SIP消息转换成能用SOCK传输的简单数据并发送即完成消息发送,代码中有许多复杂的环境探测和错误控制等等等等,我们可以暂时不用过多关注,可以继续向下,结尾处有一个keeplive相关代码,从代码字面分析,可能是SIP的Register消息的自动重发相关代码,可以在后面再细化分析。
      cb_tcp_snd_essage的函数实现要比上文的udp的实现简单很多,主要是环境探测错误控制方面,因为毕竟tcp是稳定连接的,对比一下代码,可以看到主要流程还是将SIP消息转换后,发送到从SIP消息中解析出的host和port对应的目标。
      
      看完两个函数,可以知道,eXosip需要有两个sock,是一个数组,0是给UDP用的,1是给TCP用的,要用SOCK当然要初始化,就是下文要介绍的eXosip的网络相关的初始化了,上面的exosip_init可以看成是这个开发库的系统初始化吧:) 
      至些,我们应该知道了oSIP开发的SIP应用程序的消息是从哪里发出的吧,对了,就是从这个回调函数里,所谓万事开头难,就象开发WIN32应用程序时,找到了WIN32程序的main函数入口下面的工作就好办了,下面就都是为一些事件消息开发对应的处理函数而已了:)

      osip_set_kill_transaction_callback 事务终结回调函数
      对应ICT,IST,NICT,NIST客户/服务器注册/非注册事务状态机的终结,主要是使用osip_remove_transaction (eXosip.j_osip, tr)将当前tr事务删除,再加上一系列的清理工作,其中,NICT即客户端的非Invite事务的清理比较复杂一些,要处理的内容也比较多,可以根据实际应用的情况进行有必要的清理工作:)

      cb_transport_error 传输失败处理回调
      对应于上面说到的四种事务状态机,如果它们在处理时失败,则在这时进行统一处理。
      从代码可知,只是在NOTIFY,SUBSCRIBE,OPTION操作失败才进行处理,其它错误可直接忽略。

      osip_set_message_callback 消息发送处理回调
      根据type不同,表示不同的消息发送状态
      OSIP_XXX_AGAIN 重发相关消息
      OSIP_ICT_INVITE_SENT 发起呼叫
      OSIP_ICT_ACK_SENT ACK回应
      OSIP_NICT_REGISTER_SENT 发起注册
      OSIP_NICT_BYE_SENT BYE发出
      OSIP_NICT_CANCEL_SENT Cancel发出
      OSIP_NICT_INFO_SENT,OSIP_NICT_OPTIONS_SENT,OSIP_NICT_SUBSCRIBE_SENT,OSIP_NICT_NOTIFY_SENT,OSIP_NICT_UNKNOWN_REQUEST_SENT
      我们可以看到,eXosip没有对它们作任何处理,我们可以根据自己需要,比如,重发2xx消息前记录一下日志之类的,扩展一下retransmission的处理方式,发起Invite前记录一下通话日志等等。

      OSIP_ICT_STATUS_1XX_RECEIVED uac收到1xx消息,一般是表示对端正在处理中,这时,主要是设置一下事务状态机的状态值,并对会话中的osip的一些参数根据返回值进行相应设置,里面有许多条件判断,但我们常用的一般是100,180,183的判断而已,暂时可以忽略里面复杂的判断代码。
      OSIP_ICT_STATUS_2XX_RECEIVED uac收到2xx消息,这里主要跟踪一下Register情况下的2xx,表示注册成功,这时会更新一下exosip的注册字段值,以便让eXosip能自动维护uac的注册,BYE的2xx回应是终结消息,Invite的2xx回应,则主要是初始化一下会话相关的数据,表示已成功建立连接。
      其它4xx,5xx,6xx则分别是对应的处理,根据实现情况进行概要的查看即可。
      report_event (je, sip)是代码中用来进行事件处理的一个函数,跟踪后发现,其最终是使用了我们上文提到的jpipe管道,以便在状态机外实时观测状态机内的处理信息。
      
      OSIP_NIST_STATUS_XXX_SENT即对应于上面的uac的处理,这里是uas的对应的消息处理,相比较于uac简单一点。

      前面简单介绍了一下大量的回调函数及它们的概要处理逻辑,可能会比较混乱,暂时不用管它,只需要记得一个大概的形象,知道一个SIP处理程序是通过osip_set_cb_send_message回调函数来实现真实地发送各种SIP消息,并且SIP的标准事务模型是由oSIP实现好了,我们只需要给不同的事务状态设置不同的回调处理函数来处理事务,具体的状态变化和内部逻辑不用管就可以了。

      下面来说一下消息处理回调函数用到的SOCK的初始化函数,即我们上面说的除了系统初始化外的网络初始化函数eXosip_listen_addr:
      从上文知道了,系统将初始化两个SOCK,一个UDP一个TCP,但查看代码发现还有第三个,TCPs的,但好象还不能实用,现在不管它,代码首先是根据传输是UDP还是TCP来设置对应的数组值,并且如果没有提供IP地址和端口号,系统会自动取出本机网络接口并创建可用的SOCK(http_port的方式暂不用考虑)。
      SOCK初始化后,如何开始SIP事务的呢?看到这个调用eXosip.j_thread = (void *) osip_thread_create (20000, _eXosip_thread, NULL),对的,这里启用了一个线程,即,eXosip是调用oSIP的线程函数(没用系统提供的线程函数,是为了跨平台)进行事务处理的状态机逻辑是在一个线程中处理的,这样就明白了为什么一直没能看到顺序执行下来的程序启动代码了,接下去看,线程实际处理函数是_eXosip_thread,这里面的代码中,我们看到了上文提到的状态机控制开关变量while (eXosip.j_stop_ua == 0),即,当j_stop_ua设置为1时,osip_thread_exit ()结束事务处理即程序终结,再接下去看,_eXosip_execute是最终的处理函数了,而且它在程序未终结情况下是一直逻辑在执行,注意,要启用oSIP的多线程宏OSIP_MT。
      
      看到_eXosip_execute的代码中有很多时间函数和变量,仔细看,除去一些控制代码,主要处理函数是eXosip_read_message (1, lower_tv.tv_sec, lower_tv.tv_usec),即取出消息,1表示只取出一条消息,其代码量非常的大,但同样的,其中也许多的控制代码和错误检测代码,我们在查看时可以暂时忽略掉它们。
      eXosip_read_message读取消息时,即没有采用sock的block也没有用非block方式,而是采用了select方式,具体应用可查询fd_set相关文档。
      根据jpipe_read (eXosip.j_socketctl, buf2, 499),我们可以估计,buf2中应该是保存的我们的控制管道的数据,具体作用至些还没有表现出来,应该是用来反映一些状态机内部的警示之类的信息,实际的SIP的处理的状态机的数据是存放在buf中,使用_eXosip_recvfrom获取的,获取后sipevent = osip_parse (buf, i)解析,使用osip_find_transaction_and_add_event (eXosip.j_osip, sipevent)来查询事件对应的事务状态机,找到后就如同其注解所说明的,/* handled by oSIP ! */,即我们上文设置的那一大堆回调函数,至此,我们知道了整个SIP应用所处理的大概流程了。
      如果没有找到事务状态机呢?直接丢弃吗?不是的,如果这是一个回应消息,但没有事务状态机处理它,那它是一个错误的,要进行清理后才能丢弃,而如果是一个请求,那更不能丢弃了,因为UAS事务状态机要由它来启动创建的(回应消息表示本地发出了请求消息,即UAC行为,事务状态机应是由启动UAC的代码初始化启动的),整个逻辑应该是很简单的,但eXosip的实现代码却非常多,可见其花了非常多的精力在保证会话的稳定性和应付网络复杂情况上,我们可以对其进行大量的精简来构建满足我们需求的代码实现。
      先来看错误的回应消息的处理函数eXosip_process_response_out_of_transaction,可以看到其代码就是一大堆的赋值语句,XXX= NULL,即将一大堆的运行时变量清空,再调用osip_event_free清空事件,或者就是一些复杂的情况下,需要通过解析现在的运行时数据,从中分析出“可能”的正在等待回应的对端,并发送相关终结通知消息等等,可以根据实际需要进行简化。
      请求事件的处理eXosip_process_newrequest,首先是对事件进行探测,MSG_IS_INVITE、MSG_IS_ACK、MSG_IS_REQUEST……,对事件进行所属状态机分类,随后使用_eXosip_transaction_init (&transaction,(osip_fsm_type_t) tx_type,eXosip.j_osip, evt->sip)根据探测结果进行状态机初始化,实际调用的是osip_transaction_init,初始化后即将事件入状态机osip_transaction_add_event (transaction, evt),由状态机自动处理后调用相应回调函数处理逻辑了。当然,eXosip为方便快速开发SIP终端应用,在下面又添加了许多自动化的处理代码,来和我们在回调函数中设置的处理代码相区分。

      线程调用的事件处理函数代码最后是
    if (eXosip.keep_alive > 0)
    {
      _eXosip_keep_alive ();
    }
      这段代码印证了上文提到了,keep_alive是用来设置是否自动重新注册,由_eXosip_keep_alive函数来实现自动将eXosip全局变量中保存的注册消息解析后自动根据需要重新向SIP服务器发起Register注册。
      同样,因为注册消息发起是UAC的行为,将它放在这里,可以看出来所有事件消息的事务状态机处理都是在这里,只不过这里只创建UAS的事务状态机,UAC的事务状态机的创建则要继续到下面找了,从我们的YouToo软电话代码中可知,发起呼叫和发起注册分别调用了eXosip_call_send_initial_invite,eXosip_register_send_register这两个函数(另外用到的两个build函数则是分别构建这两个send函数要发送的SIP消息),查看这两个函数可知,UAC的事务处理状态机是在这里进行初始化的。
      eXosip_register_send_register中可以看到是_eXosip_transaction_init (&transaction, NICT, eXosip.j_osip, reg)初始化UAC状态机,实际也同UAS是调用的osip_transaction_init函数,同样使用osip_transaction_add_event (transaction, sipevent)将事件入状态机,状态机随后将自动处理调用相应回调函数处理逻辑了。
      另有osip_new_outgoing_sipmessage(reg),表示发送消息,到这里,我们应该可以理解,真实的发送操作,是要到由状态机处理后,调用了消息发送回调函数才真正地将注册消息发送出去的。
      同注册消息发送,它是NICT状态机,呼叫消息的发送是ICT,由eXosip_call_send_initial_invite处理,_eXosip_transaction_init (&transaction, ICT, eXosip.j_osip, invite)初始化了状态机,之前还有一个eXosip_call_init是用来初始化eXosip的一些参数的,暂时不管它,同样osip_new_outgoing_sipmessage (invite)发送呼叫消息,但实际还是要状态机处理后调用消息发送回调函数真实发送呼叫请求函数的,osip_transaction_add_event (transaction, sipevent)则标准地,将事件入状态机,状态机将能处理随后的应用逻辑调用相应的回调函数了。

      好了,作了这么多的分析,我们了解了eXosip是怎样调用oSIP来形成被我能方便地再次调用的了,可以看到,为了实现最大限度的跨平台和兼容性,代码中有大量的测试代码,宏定义和错误再处理代码,看起来非常吃力,但了解了其主要的调用框架:
      初始化,回调函数设置,UAC和UAS事务处理状态机的启动,事件处理流程等,就可以基本明白了oSIP各个函数的主要作用和正确的用法了,下一步,可以参考eXosip来针对某个应用,去除掉大量暂时用不到的代码,来构建一个简单的SIP软电话和SIP服务器,来进一步深入oSIP学习应用了。 
    ortp的编译:
     
    假如你现在采用的是D盘(本人采用ortp-0.9.1,VC6.0,Windows XP):
    1.在D盘上新建一个ortp文件夹D:\ortp;

    2.把ortp-0.9.1文件夹下的include文件夹整个拷到D盘的ortp文件夹里;

    3.新建VC工程,选Win32 Dynamic-Link Library,Project name:ortp,
      Location:D:\ortp\,然后选An empty DLL project,
      接着在  Tools\options\Directories\include files设置如下:
      C:\PROGRAM FILES\MICROSOFT PLATFORM SDK\INCLUDE
      C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE
      C:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE
      C:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE
      D:\ortp\INCLUDE
      D:\ortp\ortp
      按如上设置即可。
      注:以上Project\Setting按默认设置。
         platform sdk一定要放到最上面,否则会出错。

    4.删除新建的vc工程的默认的source files和header files,将ortp-0.9.1\src\ortp\
      里面的所有*.c和*.h文件拷到D:\ortp\ortp\目录下,即和*.dsw和*.dsp文件放一起。

    5.在vc工程中加入这些文件(.c,.h)
     
    6.还要在D:\ortp\ortp,也就是当前文件夹中添加ortp-config.h,ortp-config-win32.h,glib.h,glibconfig.h这四个头文件。
    其中有些地方有重定义,我做了一些修改。可以到如下地址下载:
    http://www.citiy.com/mainfrm/viewthread.php?tid=3294&fpage=1
    这四个文件也可以从网上下载,google一下便可找到!
     
     
     
     
     
    编译出现的问题的解决方法:
     
    1.在posixtimer.c中加上mmsystem.h
    在port.c中加上winsock2.h
    并且连接头文件winmm.lib和ws2_32.lib

    2.可能会遇到long long类型错误,可以改成long或者unsigned long,相应的1LL也要改成1L或者1UL
    不过这样只是解决了编译的问题,变量如果可以为负那么unsigned long就会不可行,需要具体的去看程序
    而且long的容量有限和作者初衷还是有差别的,不知道大家有什么更好的方法,请联系我,也欢迎讨论!

    3.以下两个函数没有返回值,加上return 0;
    WIN_cond_init()
    WIN_cond_wait()
     
    4.再有就是一些版本输出信息,如ortp.c中
    ortp_message("oRTP-" ORTP_VERSION " initialized.");
    我的做法是改为ortp_message("oRTP-0.9.1 initialized.");
    ortp_min_version_required中的版本信息也没有定义,自己手工加上
    #define ORTP_MAJOR_VERSION 0
    #define ORTP_MINOR_VERSION 9
    #define ORTP_MICRO_VERSION 1
     
    5.对于integral size mismatch in argument错误是因为程序定义的参数类型和windows定义的不一样,
    在调用windows库函数的时候要将变量用windows的类型强制转换一下,
    如:将uint16_t类型的变量转换为WORD类型的(其实都是unsigned short)

    按照如上的方法可以最终编译得到.dll库文件 (照理说应该可以得到.lib和.dll两个文件的,为什么这里得不到.lib文件,希望大虾告之)
    至于要得到.lib文件的话,编译第3步要选择Win32 Static Library就可以了!

    1. 抓取 Source Code :

    Library for SIP :

    libosip2-2.2.1.tar.gz
    http://ftp.gnu.org/gnu/osip/
    libeXosip-0.9.0.tar.gz
    http://download.savannah.nongnu.org/releases/exosip/

    A easy program of SIP_call on oSIP library :
    test.cpp
    http://huisetalage.nl/sip/test.cpp

    2. 安裝 oSIP
    tar zxvf libosip2-2.2.1.tar.gz
    cd ./libosip2-2.2.1
    ./configure
    make
    make install

    預設安裝路徑 :
    /usr/local/lib
    -libosip2.a
    -libosip2.la
    -libosip2.so -> libosip2.so.3.0.0
    -libosip2.so.3 -> libosip2.so.3.0.0
    -libosip2.so.3.0.0
    -libosipparser2.a
    -libosipparser2.la
    -libosipparser2.so -> libosipparser2.so.3.0.0
    -libosipparser2.so.3 -> libosipparser2.so.3.0.0
    -libosipparser2.so.3.0.0
    /-pkgconfig
    -libosip2.pc

    3. 編譯範例 - Parser Via Header

    --- 自己編 ---

    cd ./src/test

    範例程式都在 ./src/test 下
    而 ./src 為 oSIP 的 source code

    gcc tvia.c -o tvia

    error : tvia.c:28:28: osip2/internal.h: No such file or directory

    餵給他 gcc -I[include path] 代表增加 #include 時 search 路徑

    gcc tvia.c -o tvia -I../../include

    error : /tmp/cc1oGZ3o.o(.text+0x5b):
    In function `main': : undefined reference to `osip_malloc_func' /tmp/cc1oGZ3o.o(.text+0x6b):
    In function `main': : undefined reference to `osip_malloc_func' /tmp/cc1oGZ3o.o(.text+0xd1):
    In function `main': : undefined reference to `osip_strncpy' /tmp/cc1oGZ3o.o(.text+0xfd):
    In function `main': : undefined reference to `osip_via_init' /tmp/cc1oGZ3o.o(.text+0x131):
    In function `main': : undefined reference to `osip_via_parse' /tmp/cc1oGZ3o.o(.text+0x14c):
    In function `main': : undefined reference to `osip_via_to_str' /tmp/cc1oGZ3o.o(.text+0x173):
    In function `main': : undefined reference to `osip_free_func' /tmp/cc1oGZ3o.o(.text+0x181):
    In function `main': : undefined reference to `osip_free_func' /tmp/cc1oGZ3o.o(.text+0x1b6):
    In function `main': : undefined reference to `osip_via_free' /tmp/cc1oGZ3o.o(.text+0x1f3):
    In function `main': : undefined reference to `osip_free_func' /tmp/cc1oGZ3o.o(.text+0x201):
    In function `main': : undefined reference to `osip_free_func' collect2:
    ld returned 1 exit status

    可以得知是 linker error
    驗證 :
    先編成 .o 檔
    gcc tvia.c -c -o tvia.o -I../../include
    發現沒有錯誤,但在 linker 就出錯了
    ld tvia.o -o tvia –lc
    所以,老樣子的餵給他
    gcc -l[library name] -L[library path]

    gcc tvia.c -o tvia -I../../include -losipparser2 -L/usr/local/lib

    ./tvia

    error : ./tvia: error while loading shared libraries: libosipparser2.so.3: cannot open shared object file: No such file or directory
    哭說找不到 libosipparser2.so.3 這 library
    這裡基本上可以用複製的(/usr/lib),但我都用以下這招 :
    vi /etc/ld.so.conf
    加入 oSIP 預設安裝路徑 /usr/local/lib
    ldconfig
    更新

    ./tvia

    error : Failed to open (null) file.
    Usage: tvia vias.txt

    哭說沒有這檔案
    find / -name vias.txt
    /usr/src/osip/libosip2-2.2.1/src/test/res/vias.txt
    得到一點,各範例程式需要匯入的 *.txt 都放在 ./src/test/res 下

    ./tvia ./res/vias.txt

    就可以看到 sipparser 的測試


    --- 安裝時編 ---
    ./configure --enable-test

    make

    即可在 ./src/test 下看到已經編譯好的各個檔案

    --- 靜態編譯 ---
    gcc tvia.c -o tvia -I../../include -losipparser2 -L/usr/local/lib --static


    4. 安裝 eXoSIP
    tar zxvf libeXosip-0.9.0.tar.gz
    cd ./libeXosip-0.9.0
    ./configure

    這裡不加入任何參數,在 make 時會一直哭
    所以我們加參數去 disable 一些沒有用到的

    ./configure \
    --disable-phapi \
    --disable-miniua \
    --disable-josua \
    --disable-glib \
    --disable-ms \
    --disable-ortp \
    --disable-gsm \
    --disable-ilbc

    miniua : example
    josua : example
    phapi : softphone 面板上的按鍵
    glib : 圖形 lib
    ortp : rtp
    ms : media streaming
    ilbc : codec
    gsm : codec

    make

    make install

    預設安裝路徑 :
    /usr/local/lib
    -libeXosip.a
    -libeXosip.la
    -libeXosip.so -> libeXosip.so.3.0.0
    -libeXosip.so.3 -> libeXosip.so.3.0.0
    -libeXosip.so.3.0.0


    5. 編譯範例 - 註冊

    --- 自己編譯 ---

    cd ./tools

    與 oSIP 不同,eXoSIP 範例程式都放在 ./tools 下

    gcc sip_reg.c -o sip_reg -leXosip -L/usr/local/lib

    這裡一樣會哭說找不到某個 library
    所以我們用 ldconfig 更新一下

    ./sip_reg

    跳出 help內容
    表示要輸入參數
    Usage:
    sipreg [required_options] [optional_options]
    [required_options]
    -r --proxy sip:proxyhost[:port]
    -u --from sip:user@host[:port]
    -c --contact sip:user@host[:port]
    [optional_options]
    -d --debug (log to stderr and do not fork
    -e --expiry number (default 3600)
    -f --firewallip N.N.N.N
    -h --help
    -l --localip N.N.N.N (force local IP address)
    -p --port number (default 5060)
    -U --username authentication username
    -P --password authentication password

    ./sip_reg \
    --proxy sip:140.125.33.240 \
    --from sip:240100@140.125.33.240 \
    --contact sip:240100@140.125.33.252 \
    --username 240100 \
    --password 240100 \
    --expiry 180

    抓出註冊封包來看
    注意 : 執行後,程式會在 background 執行,所以需要改一下 expiry time 方便觀察


    --- 安裝時編 ---

    ./configure --enable-tools

    make

    --- 靜態編譯 ---

    gcc sip_reg.c -o sip_reg -leXosip -losip2 -losipparser2 -lpthread -L/usr/local/lib --static


    PS. gcc 參數說明
    http://mis.im.tku.edu.tw/~zbwei12b/program/gcc1.html
    http://mis.im.tku.edu.tw/~zbwei12b/program/gcc-2.html

    6. 建立 SIP_call
    g++ test.cpp -o test

    檔名為 *.cpp 且 include header 有 stdafx.h 檔
    所以可以得知發展平台是在 winodows 的 c++ ( vc 之類的)
    所以我們要用 g++ 編譯
    test.cpp:23:20: stdafx.h: No such file or directory
    test.cpp:29:19: conio.h: No such file or directory
    test.cpp: In function `void __exit(int)':
    test.cpp:103: `exit' undeclared (first use this function)
    test.cpp:103: (Each undeclared identifier is reported only once for each function it appears in.)
    test.cpp: In function `int main(int, char**)':
    test.cpp:520: `_kbhit' undeclared (first use this function)
    test.cpp:522: `_getch' undeclared (first use this function)
    說找不到和看不懂一些檔案和程式,修改一下原始碼 :
    vi test.cpp
    刪除 _kbhit
    將 _getch() 改為 getchar()
    //#include "stdafx.h"
    //#include ( DOS 用 - _getch())

    g++ test.cpp -o test

    又跳出 error :
    test.cpp: In function `void __exit(int)':
    test.cpp:103: `exit' undeclared (first use this function)
    test.cpp:103: (Each undeclared identifier is reported only once for each function it appears in.)
    應該是有些 header 檔沒有餵
    利用之前有編譯過其他可以動的程式,如 tvia.c 和 sip_reg.c 的 include header

    tvia.c
    #include "stdio.h"
    #include "stdlib.h"
    #include "osip2/internal.h"
    #include "osipparser2/osip_message.h"

    sip_reg.c
    #include "stdio.h"
    #include "stdlib.h"
    #include "unistd.h"
    #include "netdb.h"
    #include "syslog.h"
    #include "pthread.h"
    #include "eXosip/eXosip.h"

    所以我新增 header :
    vi test.cpp
    #include "stdio.h"
    #include "stdlib.h"
    #include "unistd.h"
    #include "netdb.h"
    #include "syslog.h"
    #include "pthread.h"
    因為 #include "eXosip/eXosip.h" 重覆,所以不加

    g++ test.cpp -o test

    /tmp/ccMdnyE9.o(.text+0x14): In function `__exit(int)':
    : the `gets' function is dangerous and should not be used.
    /tmp/ccMdnyE9.o(.text+0x56): In function `josua_event_get()':
    : undefined reference to `eXosip_event_wait'
    .
    .
    . /tmp/ccMdnyE9.o(.gnu.linkonce.t._ZN5jcall5buildEP12eXosip_event+0xef)
    : In function `jcall::build(eXosip_event*)': : undefined reference to `osip_strncpy' /tmp/ccMdnyE9.o(.gnu.linkonce.t._ZN5jcall5buildEP12eXosip_event+0x11a)
    : more undefined references to `osip_strncpy'
    follow collect2: ld returned 1 exit status
    大概可以猜到是 linker 出錯

    g++ test.cpp -o test -leXosip -losip2

    利用之前編譯 sip_reg 的概念
    餵給他 library
    執行後會出現
    : /tmp/ccCRNT0p.o(.text+0x14): In function `__exit(int)':
    : the `gets' function is dangerous and should not be used.
    基本上已經成功了 compiler
    只是在哭說最好不要用 gets 這 function
    如果真要去除這 warning
    可以將原始碼內的函式 - __exit(int){} 殺掉
    並將有呼叫到 __exit 改為 exit(1)

    ./test
    沒有動作
    只有出現 Hello World!
    所以應該是編譯成功了
    看一下 code

    vi test.cpp
    送 INVITE 位址
    修改以下 :
    i = eXosip_build_initial_invite(&invite,
    "sip:130.139.45.174:5060", //to
    "sip:130.139.44.249:5060", //from
    NULL, "hello");

    進degub mode
    修改以下 :
    //FILE* logfile = fopen( "logfile.txt", "w");
    //osip_trace_initialize( (_trace_level)8, logfile );
    osip_trace_initialize( (_trace_level)8, stdout );

    g++ test.cpp -o test -leXosip -losip2

    ./test

    看一下 code 就知道這支程式是用一些 hot key 來對應動作,如下 :
    a - answering call
    h - hangup
    r - ringing
    c - call
    q - quit

    LINPHONE ON ARM-LINUX (cross-compiling on host for target architecture)
    编译linphone 需要库的支持,这其中就需要osip2,ogg,speex,ortp库的支持,这几种库分别支持各种通讯协议,如osip2支持的为sip协议,ortp支持的为rtp协议(即rtp协议的软件版)。

       其中speex库另需要ogg库的支持,在编译过程中可以看到。

    废话少说,下面开始交叉编译:


    软件包: (在网上下载如下软件包)
    1) linphone-1.2.0
    2) libosip2-2.2.2
    3) libogg-1.1.0
    4) speex-1.1.11.1
    5) oRTP ( linphone 包中自带,如果没有可以下载ortp-0.7.0版本)
    到网站下载 http://www.gnu.org/software/
    其他工具见:http://telestarnotes.blogspot.com/2004_12_01_archive.html

    A) 编译环境设置:
    arm交叉编译工具::
        下载 arm-linux-gcc-3.4.1.tar.bz2 
        直接解压到usr/local 中,或链接到/usr/local中
       1)把arm-linux-gcc-3.4.1.tar.bz2 文件copy到usr/local 下,右击解压即可

      2)任意目录下解压arm-linux-gcc-3.4.1.tar.bz2
       #tar -xvjf arm-linux-gcc-3.4.1.tar.bz2                        //解压
       #export PATH=$PATH:/root/usr/local/arm/3.4.1/bin       //环境变量设置:路径,链接,库
       #export LD=/root/usr/local/arm/3.4.1/bin/arm-linux-ld
       #export LDFLAGS=-L/root/usr/local/arm/3.4.1/arm-linux/lib

     

    B) 交叉编译 libosip2-2.2.2
       #cd libosip2-2.2.2            //到解压后的 libosip 目录下,以下同
       #./configure --prefix=/root/armbuild -host=arm-linux --target=arm-linux --disable-static   //配置文件
       #make                   //编译
       #make install         //安装

    // --prefix=/...       :指定文件编译安装目录
    //--host=.....         :指定编译工具,默认的为gcc,此处为arm-linux(编译到arm上用的)
    //--disable-static   :禁止静态库(.a)链接,编译生成动态库(.so)

    C) 交叉编译 libogg-1.1.0
       #cd ../libogg-1.1.0
       #./configure --prefix=/root/armbuild --host=arm-linux --target=arm-linux --disable-static --enable-fixed-point
       #make
       #make install

    D) 交叉编译speex-1.1.11.1
       #cd ../speex-1.1.11.1
       #./configure --prefix=/root/armbuild --host=arm-linux --target=arm-linux --disable-static --enable-fixed-point --enable-arm-asm --with-ogg=/root/armbuild  --with-ogg-libraries=/roo/armbuild/lib  --with-ogg-headers=/root/armbuild/include/ogg
    //要把/root/armbuild/lib 下的生成的ogg相应的库copy到交叉编译工具/usr/local/arm-linux/lib 下面,speex的编译需要ogg库的支持。
       #make
       #make install
    //--with-ogg                  : 指定ogg生成的库的目录
    // --with-ogg-libraries    : ogg库,若没有,把生成的文件copy目录下面
    //--with-ogg-headers    :指定ogg头文件

    E) 将libspeex编译成功的库文件copy到编译工具下的库中
       #cp /root/armbuild/usr/lib/libspeex.so.2.0.0
    /root/usr/local/arm/3.4.1/arm-linux/lib

       #cd /root/usr/local/arm/3.4.1/arm-linux/lib     //建立链接
       #ln -s libspeex.so.2.0.0 libspeex.so
       #ln -s libspeex.so.2.0.0 libspeex.so.2
    //以上的 步骤 E),可以直接手动把libspeex.so.2.0.0 , libspeex.so, libspeex.so.2三个文件复制到加查编译工具下的库(lib)目录下即可

    F) 交叉编译 linphone-1.2.0:
       在编译linphone之前先将ortp复制到 linphone-1.2.0目录下
       #cd /root/arm/linphone-1.2.0
       #cd oRTP
       ##./configure --prefix=/root/armbuild --host=arm-linux --target=arm-linux --disable-static --enable-fixed-point --disable-glib
    //需要加上 --disable-glib(禁止库),否则会应为缺少gthread 库而无法编译。
       #make
       #make install

    G)将生成的库文件及链接复制到交叉编译工具的库中(同步骤E)
       ##cp /root/armbuild/usr/lib/libortp.so.2.0.0
    /root/usr/local/arm/3.4.1/arm-linux/lib

       #cd /root/usr/local/arm/3.4.1/arm-linux/lib
       #ln -s libortp.so.2.0.0 libortp.so.2
       #ln -s libortp.so.2.0.0 libortp.so

    以此,就可以在没有图形界面(GUI)支持情况下编译linphone

    H)  #cd /root/arm/linphone-1.2.0
       #./configure --prefix=/root/armbuild --host=arm-linux --target=arm-linux  --disable-static --disable-glib --enable-gnome_ui=no --disable-manual
    --enable-ipv6 --enable-alsa --with-osip=/root/armbuild  --with-speex=/root/armbuild
       #make
       #make install
    //--enable-alsa   :使能alsa语音编解码方式,语音传输的另种方式为oss
    //--enable-ipv6   :使能ipv6

    以上的--disable-static 语句使编译不能生成静态库文件,即不能使库和可执行文件和为一体,而生成了另外单独的库支持文件。如果需要把库和可执行文件合成一个文件,那么不要使用这项。

    就此编译完毕,在/root/armbuild/bin 文件中就可以找到可执行文件linphonec,把改文件及相应的库下载到开发板中,
    在sch中相应的目录下输入./linphonec,即可以运行程序
    如不能运行,则缺少库支持,把刚生成的相应的  *.so.*文件复制到开发板的lib目录下即可。
    arm-linux编译osip,ortp-0.7.0,exosip2:

    对osip2,ortp,exosip2 的编译可以生成josua软件

    1)osip2-2.2.1
    2)ortp-0.7.0
    3)exosip2-1.9.1-pre16

    准备:
    在/root下新建文件夹josua


    1)交叉编译osip:
    在/home/libosip2-2.2.1文件夹下编译:
    $CC=arm-linux-gcc CFLAGS=-O2 ./configure  --prefix=/root/josua  --disable-trace --disable-debug --disable-josua --host=arm-linux
    $make
    $make  install

     

    2)交叉编译ortp:
     #cd /home/ortp-0.7.0
       ##./configure --prefix=/root/josua --host=arm-linux --target=arm-linux --disable-static --enable-fixed-point --disable-glib
    //需要加上 --disable-glib(禁止glib库),否则会应为缺少gthread 等库而无法编译。  changed by Myth Wu
       #make clean
       #make
       #make install

    3)交叉编译exosip:

      #cd  /home/libeXosip2-1.9.1-pre16
       #./configure --prefix=/root/josua  --host=arm-linux --target=arm-linux  --disable-static --disable-glib --enable-gnome_ui=no --disable-manual
    --enable-ipv6 --enable-alsa --with-osip=/root/josua  --disable-josua
       #make
       #make install
    //--enable-alsa   :使能alsa语音编解码方式,语音传输的另种方式为oss(一般为oss)       changed by Myth Wu
    //--enable-ipv6   :使能ipv6


    至此交叉编译osip成功,生成可执行文件在/root/josua/bin中,链接库文件在/root/josua/lib中,下载可执行文件及相应的库文件到开发板即可以运行

  • voip bookmark

    2008-01-24 08:29:08

    VoIP bookmarks from Klaus Darilion
     

    Below you will find descrīptions and links to SIP and RTP stacks, applications, test utilities, SIP proxies, SIP PBXs and STUN server and clients. Most of them are open source :-), but not all of them :-(

    If you have any comments please feel free to contact me: --> klaus.darilion at pernau.at <--

    There are also other VoIP related portals and link collections.

    Note: I mainly searched for C/C++ stacks and applications. There also exist a lot of stacks and applications for other programming languages, especially for java. If you are looking for Java stacks/applications, please ask Google (search for: NIST java jain).

     

     

    RTP Stacks (mainly open source C/C++ stacks)

     

    jrtplib: A very nice, simple C++ RTP stack. Works on Windows, Linux.... ; License: Free; Homepage: http://lumumba.luc.ac.be/jori/jrtplib/jrtplib.html. This stack is not symmetrical, but you can use my version of rtpconnection.cpp (for jrtp version 2.8) to make it symmetrical. (send RTP and receive RTP on the same port, send RTCP and receive RTCP on the same port).
    Common Multimedia Library: from UCL London, includes RTP stack; C; License: Free; Homepage: http://www-mice.cs.ucl.ac.uk/multimedia/software/common/
    ortp: C; License: LGPL; Homepage: http://www.linphone.org/ortp/; without RTCP, from linphone
    GNU ccRTP: C++; License: GPL (with linking exception); Homepage: http://www.gnu.org/software/ccrtp/
    LIVE.COM Streaming Media: C++; License: LGPL; Homepage: http://live.com/liveMedia/
    Morgan RTP DirectShow Filters: C++; License: ?; Homepage: http://www.morgan-multimedia.com/RTP/; based on liveMedia library
    RTP from vovida.org: C++; License: VOCAL; Homepage: http://www.vovida.org/protocols/downloads/rtp/
    RTPlib: RTP library from Lucent Technologies/Cloumbia University; C; License: Non-exklusive source code license; Homepage: http://www-out.bell-labs.com/project/RTPlib/
    librtp: C; License: GPL; Homepage: http://gphone.sourceforge.net/template.php3?page=librtp; from Gnome-o-phone
    Microsoft RTC API: The Mircosoft RTC API is a high level SIP and RTP Stack. It's included in Windows XP and also comes with the several Windows Messenger. Version 1.2 introduced a lot of new features is behaves strange when used with other SIP clients. Developer Homepage: http://www.microsoft.com/downloads/details.aspx?FamilyID=ae0bdc75-9f2f-4217-b97f-dfa0adf264aa&displaylang=en.
    sipXmediaLib: Part of pingtel's open source releases for VoIP. License: LGPL; Homepage: sipfoundry.org.
     


    SIP Stacks

    external SIP stack comparison

    dissipate: C++; Linux, requries the qt-library, License: GPL; Homepage: http://www.div8.net/dissipate/; The original dissipate by Billy Biggs.
    dissipate2: C++; Linux, requries the qt-library, License: GPL; Homepage: http://www.wirlab.net/kphone/; A enhanced dissipate, is part of the kphone distribution.
    GNU osip: C; Linux+Windows+...; License: LGPL; Homepage: http://www.gnu.org/software/osip/; Also known as libosip. Note: The interface of osip has been changed and from now on it will be called osip2! Download the tar file from http://osip.atosc.org/download/osip/.
    GNU eXosip: C; Linux+Windows+...; License: GPL; Homepage: http://savannah.nongnu.org/projects/exosip/; The extensible osip: "...It aims to implement a simple high layer API to control the SIP for sessions establishements and common extensions. Once completed, this eXtended library should provide an API for call management, messaging and presence features.... Download the tar file from http://osip.atosc.org/download/exosip/.
    SIP from vovida.org: C++; Linux+Windows+...; License: Vovida Software License; Homepage: http://www.vovida.org/protocols/downloads/sip/
    resiprocate: C++; Linux+Windows+...; Includes now a high level API (DialogUsageManager) which supports refers, ... License: VOCAL; Homepage: http://www.sipfoundry.org/reSIProcate/.
    Microsoft RTC API: The Mircosoft RTC API is a high level SIP and RTP Stack. It's included in Windows XP and also comes with the several Windows Messenger. Version 1.2 introduced a lot of new features is behaves strange when used with other SIP clients. Developer Homepage: http://www.microsoft.com/downloads/details.aspx?FamilyID=ae0bdc75-9f2f-4217-b97f-dfa0adf264aa&displaylang=en.
    sipXtackLib: Part of pingtel's open source releases for VoIP. License: LGPL; Homepage: sipfoundry.org. There is also a high level call library (sipXcallLib), which implements JTAPI in C++.
    libmsip: A C++ SIP stack for Linux developed for the miniSIP project. Homepage: http://www.minisip.org/libmsip/.
     


    RTP Applications

     

    RAT - Robust Audio Tool; Supports a large number of codecs, ... License: Free; Homepage: http://www-mice.cs.ucl.ac.uk/multimedia/software/rat/
    JMF - Java Media Framework: Can receive and send RTP streams; Homepage: http://java.sun.com/products/java-media/jmf/
    MP3/RTP Plugin for Winamp: Homepage: http://www.live.com/multikit/winamp-plugin.html
    Vomit - Voice over Missconfigured Internet Telephones: Plays back captured voice conversation; Homepage: http://vomit.xtdnet.nl
    RTP Tools: Several RTP utilities from the Columbia University; Homepage: http://www.cs.columbia.edu/IRT/software/rtptools/
    UDP Packet Reflector/Forwarder: A tiny tool which forwards or reflects UDP packets. You can also add delay and packet loss. Very useful if you want to test RTP applications. Homepage: http://www.cs.ucl.ac.uk/staff/s.bhatti/teaching/z02/reflector.html. As I was not able to compile this tool I searched and found a binary somewhere in the web. You can download it local
     


    SIP Phones (SIP User Agents)

     

    x-lite, x-pro: A SIP client for Windows; Mac OS and Windows CE, http://www.xten.com/. A really nice SIP UA with a lot of features. The light version is free and really rocks, the pro version not. Supports multiple proxies.
    eyeP Phone Lite: A SIP client for Windows, a FWD version is available for free http://www.eyepmedia.com/eyePPhoneFWD.htm.
    SIPPS: SIP softphone with answering machine and a lot of features. They have also integrated support for nikotel.com for SIP-PSTN termination.http://www.sippstar.com/. A Demo for testing is available. The configuration is a bit weird (what's the difference between a proxy and a redirect server?).
    MSN Messenger: Microsofts Messenger, Version 4.6 allows also connections to other SIP servers than microsofts one. Nice design, works very well. Can be used with the SIP service of iptel.org. Homepage: http://messenger.microsoft.com; local download of Version 4.6 for Windows NT (2000).
    MSN Messenger: Microsofts Messenger, Version 4.7 allows also connections to other SIP servers than microsofts one. Nice design, works very well. Can be used with the SIP service of iptel.org. Homepage: http://messenger.microsoft.com; local download of Version 4.7 for Windows XP.
    Microsoft portrait: Windows SIP client that supports Audio, Video and IM. Uses RTC API 1.2 and therefore has poor compatibility with other SIP clients.http://research.microsoft.com/~jiangli/portrait/.
    Ubiquity User Agent: Java based SIP Client for Windows, very useful, you have to register (free) to get an license; Homepage: http://www.ubiquity.net/useragent.php
    EZ-Phone (Evaluation Version): SIP Phone for Windows; Homepage: http://www.hssworld.com/voip/download.htm
    MySIP: SIP User Agent from Siemens; Homepage: http://www.mysip.ch/
    SJPhone: SIP and H.323 Softphone for Windows, Linux and PocketPC from: http://www.sjlabs.com/. The configuration for SIP is a little bit tweaky. And there must not be another SIP client running on port 5060 or the SJPhone won't work.
    Linphone: A SIP Softphone for Linux (GNOME), needs libosip ans oRTP; Homepage: http://www.linphone.org/
    KPhone: A SIP Softphone for Linux (KDE); Homepage: http://www.wirlab.net/kphone/index.html
    Vovida: Complete SIP Suite for Linux (Uaser Agent, Proxy, ...), very, very big software contruct; Homepage: Vovida.org
    Siphon: Linux SIP Softphone; Homepage: http://siphon.sourceforge.net/index.html
    ActXPhone: An ActiveX-Control SIP Softphone based on the Microsoft Real Time Communications (RTC) API.http://www.pernau.at/kd/voip/ActXPhone/.
    sipXphone: Part of pingtel's open source releases for VoIP. License: LGPL; Homepage: sipfoundry.org. This softphone also requires lots of other libraries from the sipX... software at sipfoundry.org.
    Shtoom: An open source, cross plattform SIP client written in Python. License: LGPL; Homepage: http://www.divmod.org/Home/Projects/Shtoom/index.html.
    Cornfed SIP-UA: A SIP user agent for Linux. License: Free for non-commercial use (binary distribution); Homepage: http://www.cornfed.com/products/.
    MiniSIP: An open source SIP user agent for Linux which runs on PDAs. It is based on several libraries, including libmsip, a C++ SIP stack. Homepage: http://www.minisip.org/index.html.
     


    SIP Test Utility

     

    sipsak: SIP Swiss Army Knife, very useful test utility (Linux); Homepage: http://sipsak.berlios.de/
    SIPNess: Ortena Networks SIP Messenger, very useful test utility for windows; Homepage: http://www.ortena.com/download.htm
    SIP request generator: A web based generator of SIP requests: send SIP requests to SIP UAS and waits for final response: Download at http://obelix.ict.tuwien.ac.at/sip-gen/sip-gen.zip or test it online at Download at http://obelix.ict.tuwien.ac.at/sip-gen/sip-request-gen.php
    NastysipA simple Linux-program from SX-Design that generates bogus SIP-messages and sends them to any peer. Download at http://www.sxdesign.com/index.php?page=developer&submnu=nastysip.
    sipXtest: Part of pingtel's open source releases for VoIP. License: LGPL; Homepage: sipfoundry.org.
    SIP Forum Test Framework (SFTF): A Framework to test SIP devices for common errors. License: GPL; Homepage: sipfoundry.org.
    callflow: a powerful SIP call flow visualizer; Homepage: http://callflow.sourceforge.net/.
    SIP Scenario Generator: a powerful SIP call flow visualizer; Homepage: http://www.iptel.org/~sipsc/.
    SIPp: a powerful SIP performance testing tool sponsered by HP; Homepage: http://sipp.sourceforge.net/.
     


    SIP Applications (Proxy, Location Server)

     

     

    Sip Express Router (ser)

    : Highspeed GNU SIP proxy with a lot of features and a lot of ongoing development. Homepage: http://www.iptel.org/ser/. A really cool SIP proxy - I like it! You can also take a look at the development homepage with web CVS. At the beginning you should read the admin guide and the mailing lists archive.

     

    Ser Media Server (sems)

    : Media Server add-on for ser SIP proxy. Homepage: http://sems.berlios.de/. Supports voicemail, IVR, SIP/PSTN gateway ...

    Asterisk: Linux Software PBX with Gateway, SIP Proxy, Gateway (SIP, H.323, PSTN, ...); Homepage: http://www.asteriskpbx.com/
    sipd: A Linux SIP proxy from SX-Design written in C (GPL): http://www.sxdesign.com/index.php?page=developer&submnu=sipd
    partysip: A Linux SIP proxy based on osip2 (LGPL). Developer homepage is at: http://savannah.nongnu.org/projects/partysip/, you can download tar packages from: http://osip.atosc.org/download/partysip/.
    mysip: A SIP proxy server from Siemens for Windows platforms. Homepage: http://www.mysip.ch/
    Fomine RTC server: A SIP proxy server for Windows which uses its own SIP stack (does NOT need the RTC API) Homepage: http://www.fomine.com/rtc-server.html. The unregistered version can be used up to 5 users.
    sipXpbx: Part of pingtel's open source releases for VoIP. License: LGPL; Homepage: sipfoundry.org. This PBX combines various sipX applications like a SIP proxy (sipXregistry, sipXproxy), a media server (sipXvxml) and lots more.
    yate: Yet Another Telephony Engine - a PSTN gateway. License: GPL; Homepage: yate.null.ro. This gateway supports H.323, SIP and zaptel (->asterisk) based PSTN cards.
     


    STUN server and clients

     

    mystun: STUN server and client library from the iptel.org guys. License: GPL, Homepage: http://developer.berlios.de/projects/mystun/. You have to download the file via CVS.
    Vovida STUN server: STUN server and client library/application for Linux and Windows from the Vovida guys. License: Vovida Software License 1.0, Homepage: http://www.vovida.org/applications/downloads/stun/. The files are hosted at sourceforge.
     


    NAT traversal ALG (application level gateway)

    This applications can be installed on a linux NAT-box. They will rewrite your SIP messages and have some kind of UDP/RTP proxy for the media stream.

    SaRP - SIP and RTP proxy: Perl implementation, License: GPL, Homepage: http://sourceforge.net/projects/sarp/.
    siproxd: Siproxd is a proxy/masquerading daemon for the SIP protocol based on osip. License: GPL; Homepage: http://sourceforge.net/projects/siproxd/

  • 用sipp对Asterisk进行性能测试(转)

    2007-09-30 00:08:44

    测试目标:

    1.  IVR 支持多少路
    2. 
    一对一通话, 支持多少路
    3. 
    不同编解码的性能影响.
    4.
    通话中,录音, 支持多少路.

    测试工具: sipp http://sipp.sourceforge.net/

    辅助工具: Xlite

    SIP rfc: http://www.ietf.org/rfc/rfc3261.txt

    RTP for AV http://www.ietf.org/rfc/rfc3551.txt

    环境:

    CPU: xeon 5110 1.6G*2 , 1 G MEM 物理机
    Asterisk1.4.7

    Asterisk 基本操作:

    启动: safe_asterisk, 或者asterisk -vvvc

    如果是后台启动, 连接监控: astersisk -r

    关闭: 在控制栏输入 stop now

    Asterisk 配置:

    关注两个配置文件(/etc/asterisk):

    sip.conf         // sip 分机号设置      
    extensions.conf   // dail plan
    设置, 控制呼入后是什么动作

    sip.conf 添加2000 个分机号, 以便模拟1000 人呼叫(呼叫,应答)

    [1000]
    type=friend
    host=dynamic
    context=incoming   //
    extensions.conf 中对应
    canreinvite=no   //
    如果设置为yes, 双方通话信息会直接进行, 而不通过asterisk. 设置成no,表示所有交互都通过Asterisk.

    [1001]
    type=friend
    host=dynamic
    context=incoming
    canreinvite=no

    extensions.conf  这里列举了多种呼叫计划, 包括IVR,  拨号通话, 通话录音等.

    [incoming]
    ;play hello world forever
    exten => _XXXX,1,answer()
    exten => _XXXX,2,playback(hello-world)
    exten => _XXXX,3,goto(OneToOne,_XXXX,1)

    ;[typetest]
    ;exten => 1111,1,Wait(2)
    ;exten => 1111,2,Record(/tmp/asterisk-recording:gsm)
    ;exten => 1111,3,Hangup
    ;exten => 1112,1,Wait(2)
    ;exten => 1112,n,Playback(/tmp/asterisk-recording)
    ;exten => 1112,n,Hangup

    ;[typetest2]
    ;exten => _XXXX,1,answer()
    ;exten => _XXXX,2,dial(sip/${EXTEN},10,r)

    ;[typetest3]
    ;exten => 999,1,answer()
    ;exten => 999,2,dial(sip/${EXTEN},10,r)
    ;exten => 999,1,Meetme(1234,i,123456)

    ;[OneToOne]
    ;exten => _XXXX,1,answer()
    ;exten => _XXXX,2,mixmonitor(test${EXTEN}.wav|av(0)V(0))
    ;exten => _XXXX,3,dial(sip/${EXTEN},10,r)
    ;exten => _XXXX,4,Hangup
    ;exten => _XXXX,3,Record(/tmp/asterisk-recording${EXTEN}:gsm)

    ;[IVR]
    ;exten => _XXXX,1,answer()
    ;exten => _XXXX,2,playback(hello-world)
    ;exten => _XXXX,3,goto(IVR,_XXXX,2)

    Sipp 基本操作:

    sipp 涉及三个文档(以呼入后,就不停播放IVR 语音):

    *.bat   批处理命令,方便调用, 其中 -m 参数表示

    sipp -sf a16.xml -inf a16.csv -p 5062 -m 200 -i 172.16.3.199 10.0.1.4:5060 -trace_err

    *.xml   // 具体的操作, 核心部分, 下篇具体介绍xml 文件

    *.csv  // xml 里面引用的参数, 以便发起不同呼叫

    SEQUENTIAL  
    2001;1002;   
    2003;1003;
    2200;1200;

    xml 文件 .

    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <!DOCTYPE scenario SYSTEM "sipp.dtd">

    <!-- This program is free software; you can redistribute it and/or      -->
    <!-- modify it under the terms of the GNU General Public License as     -->
    <!-- published by the Free Software Foundation; either version 2 of the -->
    <!-- License, or (at your option) any later version.                    -->
    <!--                                                                    -->
    <!-- This program is distributed in the hope that it will be useful,    -->
    <!-- but WITHOUT ANY WARRANTY; without even the implied warranty of     -->
    <!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the      -->
    <!-- GNU General Public License for more details.                       -->
    <!--                                                                    -->
    <!-- You should have received a copy of the GNU General Public License  -->
    <!-- along with this program; if not, write to the                      -->
    <!-- Free Software Foundation, Inc.,                                    -->
    <!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
    <!--                                                                    -->
    <!--                 Sipp default 'uac' scenario.                       -->
    <!--                                                                    -->
    <scenario name="Basic Sipstone UAC">

    <!--:下面这一块表示SIPp发送一个INVITE数据包到SIP server(WavesplitterMSP-16)-->
      <send>
        <![CDATA[
       
          INVITE sip:[field1]@[remote_ip]:[remote_port] SIP/2.0
          Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch];rport
          From: [field0] <sip:[field0]@[local_ip]:[local_port]>;tag=[call_number]
          To: [field1] <sip:[field1]@[remote_ip]:[remote_port]>
          Call-ID: [call_id]              
          Cseq: 1 INVITE                  
          Contact: sip:[field0]@[local_ip]:[local_port]
          Max-Forwards: 70                
          Subject: Performance Test       
          Content-Type: application/sdp   
          Content-Length: [len]           

          v=0
          o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
          s=-
          t=0 0
          c=IN IP[media_ip_type] [media_ip]
          m=audio [media_port] RTP/AVP 0
          a=rtpmap:0 G726/8000


        ]]>
      </send>

    <!--:下面这一块表示SIPp在等待SIP server返回一个100的数据包-->

      <recv response="100"> ōptional="true"
      </recv>


    <!--
    :下面这一块表示SIPp在等待SIP server返回一个200的数据包,如果收到,说明ViVoice公司的VENUS NW800视频电话已经接听了,用户已经提起话筒-->

      <recv response="200">
      </recv>

    <!--:下面这一块表示SIPp开始通话-->

      <!-- Packet lost can be simulated in any send/recv message by         -->
      <!-- by adding the 'lost = "10"'. Value can be [1-100] percent.       -->
      <send>
        <![CDATA[

          ACK sip:[field1]@[remote_ip]:[remote_port] SIP/2.0
          Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
          From: sipp <sip:[field0]@[local_ip]:[local_port]>;tag=[call_number]
          To: sut <sip:[field1]@[remote_ip]:[remote_port]>[peer_tag_param]
          Call-ID: [call_id]
          CSeq: 1 ACK
          Contact: sip:[field0]@[local_ip]:[local_port]
          Max-Forwards: 70
          Subject: Performance Test
          Content-Length: 0

        ]]>
      </send>

     <!--:下面这一块表示SIPp开始发送语音RTP stream,在VENUS NW800视频电话上可以听到不知道哪国的老外的声音-->

      <!-- Play a pre-recorded PCAP file (RTP stream)       -->
      <nop>
        <action>
          <exec play_pcap_audio="pcap/g711a.pcap"/>
        </action>
      </nop>

    <!--:暂停10秒钟(10000),一小时, 3600000 等待播放语音完毕-->
    <pause milliseconds="300000"/>

    <!--:下面这一块发送BYE信号,这是挂断电话信号-->

        <send retrans="500">
         <![CDATA[

          BYE sip:[field1]@[remote_ip]:[remote_port] SIP/2.0
          Via: SIP/2.0/[transport] [local_ip]:[local_port]
          From: sipp  <sip:[field0]@[local_ip]:[local_port]>;tag=[call_number]
          To: sip <sip:[field1]@[remote_ip]:[remote_port]>[peer_tag_param]
          Call-ID: [call_id]
          Cseq: 2 BYE
          Contact: sip:[field0]@[local_ip]:[local_port]
          Max-Forwards: 70
          Subject: Performance Test
          Content-Length: 0

        ]]>
       </send>

    <!--:下面这一块表示挂断完毕-->

       <recv response="200">
       </recv>

    </scenario>

    里面的业务逻辑需要自己确认, 最好的方法是通过抓包(比如ethereal), 分析其工作流. 不同情况下, 返回的信息有所不同, 需要相应调整

    上面是个呼入后,播放IVR 的案例, 比较简单.

    下面是register 的例子(要测试通话, 就要先注册分机号)

    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <!DOCTYPE scenario SYSTEM "sipp.dtd">

    <!-- This program is free software; you can redistribute it and/or      -->
    <!-- modify it under the terms of the GNU General Public License as     -->
    <!-- published by the Free Software Foundation; either version 2 of the -->
    <!-- License, or (at your option) any later version.                    -->
    <!--                                                                    -->
    <!-- This program is distributed in the hope that it will be useful,    -->
    <!-- but WITHOUT ANY WARRANTY; without even the implied warranty of     -->
    <!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the      -->
    <!-- GNU General Public License for more details.                       -->
    <!--                                                                    -->
    <!-- You should have received a copy of the GNU General Public License  -->
    <!-- along with this program; if not, write to the                      -->
    <!-- Free Software Foundation, Inc.,                                    -->
    <!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
    <!--                                                                    -->
    <!--                 Sipp default 'branchc' scenario.                   -->
    <!--                                                                    -->

    <scenario name="Basic Sipstone UAC">
      <send retrans="500">
        <![CDATA[

          REGISTER sip:[field0]@[remote_ip]:[remote_port] SIP/2.0
          Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch];rport
          From: [field0] <sip:[field0]@[remote_ip]:[remote_port]>;tag=[call_number]
          To: [field0] <sip:[field0]@[remote_ip]:[remote_port]>
          Call-ID: [call_id]
          CSeq: [cseq] REGISTER
          Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=z9hG4bK-d87543-717507386-1--d87543-;rport     
          Contact: <sip:[field0]@[local_ip]:[local_port]>
          Expires: 1200
          Max-Forwards: 70
          User-Agent: eyeBeam release 3004t stamp 16741
          Allow: INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,NOTIFY,MESSAGE,SUBSCRIBE,INFO
          Content-Length: 0

        ]]>
      </send>
     
      <recv response="100"> ōptional="true"
      </recv>
     <recv response="200" crlf="true">
      </recv>


      </recv>
    </scenario>

    Register 先把被叫号码启动, 查看(2769) 评论(1) 收藏 分享 管理

  • 用sipp进行sip业务测试(转)

    2007-09-30 00:07:19

    sipp.sourceforge.net现在已经很不错了,可以用来进行sip平台的测试工作。
    在我的测试中,sipp两个,一个模拟中继节点送呼叫到sip平台,一个模拟中继节点
    接受来自sip平台的呼叫,主要考察正常呼叫流程下,sip平台对于大话务的承受能力。
    1
    :下载 http://sipp.sourceforge.net/snapshots/sipp.2006-08-18.tar.gz
    apt-get install libssl-dev openssl libncurses5-dev libpcap0.8-dev
    tar xzvf sipp.2006-08-18.tar.gz
    源码中有一个bug: call.cpp, line:242 ,
    if ( use_tdmmap )  // -- add check, <<-- 
    添加这行
    tdm_map[call_ptr->tdm_map_number] = false 
    编译 make pcapplay_ossl
    2
    :编写自己的测试脚本
    3
    :运行命令:
    外呼:
    ./sipp 168.168.10.9:2018 -i 168.168.10.7 -p 5060 -s 168.168.10.9 -inf data_04.csv -d 10 -r 1 -rp 1000 -m 100000 -sf 04_trunk_in_test.xml
    接受:
    ./sipp 168.168.10.9:5090 -i 168.168.10.8 -p 5060 -s 168.168.10.9 -mi 168.168.10.8 -mp 8000 -sf 03_trunk_out_test.xml

    附件:
     $ cat 03_trunk_out_test.xml
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <!DOCTYPE scenario SYSTEM "sipp.dtd">

    <!--

    ./sipp 168.168.10.246:5090 -i 168.168.10.188 -p 5060 -s 168.168.10.246 -mi 168.168.10.188 -mp 8000 -sf 03_trunk_out_test.xml


        -i local_ip
        -p local_port
        -s service_name
        -ap password
        -rsa host:port
        -inf file_name
        -d duration
        -r rate (cps)
        -rp period  : Example: -r 7 -rp 2000 ==> 7 calls every 2 seconds.
        -m calls    : Stop the test and exit when 'calls' calls are processed.
        -l calls_limit: Set the maximum number of simultaneous calls. Once this limit is reached, traffic
                        is decreased until the number of open calls goes down. Default:(3 * call_duration (s) * rate)
        -mp local_port: Set the local RTP echo port number
        -mi local_rtp_ip : Set the local IP address for RTP echo.
        -nr              : Disable retransmission in UDP mode.

    -->
    <scenario name="Trunk out -- Basic UAS responder">
      <!-- By adding rrs="true" (Record Route Sets), the route sets         -->
      <!-- are saved and used for following messages sent. Useful to test   -->
      <!-- against stateful SIP proxies/B2BUAs.                             -->
      <recv request="INVITE" crlf="true" rrs="true">
      </recv>

      <!-- The '[last_*]' keyword is replaced automatically by the          -->
      <!-- specified header if it was present in the last message received  -->
      <!-- (except if it was a retransmission). If the header was not       -->
      <!-- present or if no message has been received, the '[last_*]'       -->
      <!-- keyword is discarded, and all bytes until the end of the line    -->
      <!-- are also discarded.                                              -->
      <!--                                                                  -->
      <!-- If the specified header was present several times in the         -->
      <!-- message, all occurences are concatenated (CRLF seperated)        -->
      <!-- to be used in place of the '[last_*]' keyword.                   -->

      <send>
        <![CDATA[

          SIP/2.0 180 Ringing
          [last_Via:]
          [last_From:]
          [last_To:];tag=[call_number]
          [last_Call-ID:]
          [last_CSeq:]
          Contact: <sip:[local_ip]:[local_port];transport=[transport]>
          Content-Length: 0

        ]]>
      </send>

      <pause milliseconds="5000"/>

      <send retrans="500">
        <![CDATA[

          SIP/2.0 200 OK
          [last_Via:]
          [last_From:]
          [last_To:];tag=[call_number]
          [last_Call-ID:]
          [last_CSeq:]
          Contact: <sip:[local_ip]:[local_port];transport=[transport]>
          Content-Type: application/sdp
          Content-Length: [len]

          v=0
          o=xyhe 53655765 2353687637 IN IP[local_ip_type] [local_ip]
          s=-
          t=0 0
          c=IN IP[media_ip_type] [media_ip]
          m=audio [media_port] RTP/AVP 0
          a=rtpmap:0 PCMU/8000

        ]]>
      </send>

      <recv request="ACK"
            optional="true"
            rtd="true"
            crlf="true">
      </recv>

      <recv request="BYE">
      </recv>

      <send>
        <![CDATA[

          SIP/2.0 200 OK
          [last_Via:]
          [last_From:]
          [last_To:];tag=[call_number]
          [last_Call-ID:]
          [last_CSeq:]
          Contact: <sip:[local_ip]:[local_port];transport=[transport]>
          Content-Length: 0

        ]]>
      </send>

      <!-- Keep the call open for a while in case the 200 is lost to be     -->
      <!-- able to retransmit it if we receive the BYE again.               -->
      <pause milliseconds="4000"/>


      <!-- definition of the response time repartition table (unit is ms)   -->
      <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>

      <!-- definition of the call length repartition table (unit is ms)     -->
      <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>

    </scenario>

    <!-- vim: set ts=4 sw=4 sts=4 et: ->
     $ cat 04_trunk_in_test.xml

    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <!DOCTYPE scenario SYSTEM "sipp.dtd">

    <!--
    ## simple one call test
    ./sipp 168.168.10.242:5090 -i 168.168.10.7 -p 5060 -s 168.168.10.242 -inf data_04.csv -d 10 -r 1 -rp 1000 -m 1 -sf 04_trunk_in_test.xml

    ## 5cps+20s - 2000 calls => 400s
    ./sipp 168.168.10.242:5090 -i 168.168.10.7 -p 5060 -s 168.168.10.242 -inf data_04.csv -d 10 -r 5 -rp 1000 -m 2000 -sf 04_trunk_in_test.xml

    ## 5cps+120s - 5000 calls => 1000s
    ./sipp 168.168.10.242:5090 -i 168.168.10.7 -p 5060 -s 168.168.10.242 -inf data_04.csv -d 10 -r 5 -rp 1000 -m 5000 -sf 04_trunk_in_test.xml

        -i local_ip
        -p local_port
        -s service_name
        -ap password
        -rsa host:port
        -inf file_name
        -d duration
        -r rate (cps)
        -rp period  : Example: -r 7 -rp 2000 ==> 7 calls every 2 seconds.
        -m calls    : Stop the test and exit when 'calls' calls are processed.
        -l calls_limit: Set the maximum number of simultaneous calls. Once this limit is reached, traffic
                        is decreased until the number of open calls goes down. Default:(3 * call_duration (s) * rate)

    file data_04.csv as:
      ==== cut here ====
    EQUENTIAL
    #user_num;callee_num
    85010000;88010000
    85010001;88010001
    85010002;88010002
      ==== cut end  ====
    -->


    <scenario name="trunk in -- bulkcall generator">
      <!-- In client mode (sipp placing calls), the Call-ID MUST be         -->
      <!-- generated by sipp. To do so, use [call_id] keyword.              -->

      <send retrans="500">
        <![CDATA[

          INVITE sip:[field1]@[service] SIP/2.0
          Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
          From: [field0] <sip:[field0]@[service]>;tag=[call_number]
          To: [field1] <sip:[field1]@[service]>
          Call-ID: [call_id]
          CSeq: 1 INVITE
          Contact: <sip:[field0]@[local_ip]:[local_port]>
          Max-Forwards: 70
          Subject: Bulk Call Performance Test
          Content-Type: application/sdp
          Content-Length: [len]

          v=0
          o=[field0] 53655765 2353687637 IN IP[local_ip_type] [local_ip]
          s=-
          c=IN IP[media_ip_type] [media_ip]
          t=0 0
          m=audio [media_port] RTP/AVP 0
          a=rtpmap:0 PCMU/8000

        ]]>
      </send>

      <recv response="100" optional="true"> </recv>
      <recv response="180" optional="true"> </recv>
      <recv response="183" optional="true"> </recv>

      <!-- By adding rrs="true" (Record Route Sets), the route sets         -->
      <!-- are saved and used for following messages sent. Useful to test   -->
      <!-- against stateful SIP proxies/B2BUAs.                             -->
      <recv response="200" rtd="true" rrs="true"> </recv>

      <!-- Packet lost can be simulated in any send/recv message by         -->
      <!-- by adding the 'lost = "10"'. Value can be [1-100] percent.       -->
      <send>
        <![CDATA[

          ACK [next_url] SIP/2.0
          Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
          From: [field0] <sip:[field0]@[service]>;tag=[call_number]
          To: [field1] <sip:[field1]@[service]>[peer_tag_param]
          Call-ID: [call_id]
          CSeq: 1 ACK
          Contact: <sip:[field0]@[local_ip]:[local_port]>
          Max-Forwards: 70
          Subject: Bulk Call Performance Test
          Content-Length: 0

        ]]>
      </send>

      <!-- This delay can be customized by the -d command-line option       -->
      <!-- or by adding a 'milliseconds = "value"' option here.             -->
      <pause milliseconds="10000"/>

      <!-- The 'crlf' option inserts a blank line in the statistics report. -->
      <send retrans="500">
        <![CDATA[

          BYE [next_url] SIP/2.0
          Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
          From: [field0] <sip:[field0]@[service]>;tag=[call_number]
          To: [field1] <sip:[field1]@[service]>[peer_tag_param]
          Call-ID: [call_id]
          CSeq: 2 BYE
          Contact: <sip:[field0]@[local_ip]:[local_port]>
          Max-Forwards: 70
          Subject: Bulk Call Performance Test
          Content-Length: 0

        ]]>
      </send>

      <recv response="100" optional="true"> </recv>
      <recv response="200" crlf="true">
      </recv>

      <!-- definition of the response time repartition table (unit is ms)   -->
      <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>

      <!-- definition of the call length repartition table (unit is ms)     -->
      <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>

    </scenario>

    <!-- vim: set ts=4 sw=4 sts=4 et: ->
  • vi高级技巧

    2007-09-29 23:52:16

     R 以改写方式输入文本
    w 右移一个词
    W 右移一个以空格分隔的词
    b 左移一个词
    B 左移一个以空格分隔的词
    ( 到句子的开头
    ) 到句子的末尾
    { 到段落的开头
    } 到段落的末尾
    :x 保存(如果当前文件修改过)并退出
    Ctrl+G 光标所在位置的行数和列数报告。
    cw、dw 改变(置换)/删除光标所在处的单词的命令(c=change、d=delete)
    /string、?string 从光标所在处向后或向前查找相应的字符串的命令
    :r /etc/passwd 在打开的文件file中光标所在处读入/etc/passwd
    :3r /etc/passwd 从新文件的第3行开始读入/etc/passwd的所有内容
    :3,$s/^/some string / 在文件的第一行至最后一行的行首插入“some string”
    :%s/$/some string/g 在整个文件每一行的行尾添加“some string”
    :%s/string1/string2/g 在整个文件中替换“string1”成“string2”
    :3,7s/string1/string2/ 仅替换文件中的第3行到第7行中的“string1”成“string2”
    --注意: 其中s为substitute,%表示所有行,g表示global

    1.交换两个字符位置
    xp

    2.上下两行调换
    ddp

    3.把文件内容反转
    :g/^/m0/ (未通过)

    4.上下两行合并
    J

    5.删除所有行
    dG

    6.从当前位置删除到行尾
    d$

    7.从当前位置复制到行尾
    y$
    如果要粘贴到其他地方 p 就可以了

    由于vi 是建立在 EX 上的 所以 当键入 : 时就来到了 EX 命令状态

    8. :ab string strings
    例如 ":ab usa United States of America" ,
    当你在文见里插入 usa 时
    United States of America 就蹦出来了

    9. :map keys new_seq
    定义你当前 键盘命令 

    10. :set [all]
    vi or ex 的编辑状态
    如 显示每行 :set nu

    11. 在命令状态下,nyy表示拷贝从光标行起的下n行内容,p表示paste,可刚复制的内容粘贴在光标处的下面。

    12. 单个字符替换用r,覆盖多个字符用R,用多个字符替换一个字符用s,整行替换用S

    13. :%s/old_word/new_word/g
    这个指令是于在整个文件中替换特定字符串

    14.光标控制
    k:上移 nk 上移n行
    j:下移 nj 下移n行
    将光标移到第n行,按下 mk
    将光标移到第m行,按下 "ay'k
    即将第n到m的行存到a寄存器,以此类推,b,c........寄存器等
    这样就可以将你常用的需要复用的内容粘贴到不同的寄存器中以备用
    想粘贴到某处,直接将光标移到某地,按下 ‘ap 即可,以此类推,b,c........寄存器等
    在当前屏幕中
    H 跳到第一行
    M 跳到中间一行
    L 跳到最后一行

    15.表8-2 删除命令
    删除命令操作
    d l 删除当前字符(与x命令功能相同)
    d 0 删除到某一行的开始位置
    d ^ 删除到某一行的第一个字符位置(不包括空格或TA B字符)
    d w 删除到某个单词的结尾位置
    d 3 w 删除到第三个单词的结尾位置
    d b 删除到某个单词的开始位置
    d W 删除到某个以空格作为分隔符的单词的结尾位置
    d B 删除到某个以空格作为分隔符的单词的开始位置
    d 7 B 删除到前面7个以空格作为分隔符的单词的开始位置
    d) 删除到某个语句的结尾位置
    d 4) 删除到第四个语句的结尾位置
    d( 删除到某个语句的开始位置
    d } 删除到某个段落的结尾位置
    d { 删除到某个段落的开始位置
    d 7 { 删除到当前段落起始位置之前的第7个段落位置
    dd 删除当前行
    d /text 删除从文本中出现“text”中所指定字样的位置,一直向前直到下一个该字样所出现的
    位置(但不包括该字样)之间的内容
    d fc 删除从文本中出现字符“c”的位置,一直向前直到下一个该字符所出现的位置(包括
    该字符)之间的内容
    d tc 删除当前行直到下一个字符“ c”所出现位置之间的内容
    D 删除到某一行的结尾
    d $ 删除到某一行的结尾
    5 dd 删除从当前行所开始的5行内容
    d L 删除直到屏幕上最后一行的内容
    d H 删除直到屏幕上第一行的内容
    d G 删除直到工作缓存区结尾的内容
    d 1 G 删除直到工作缓存区开始的内容

    修改命令操作
    c l 更改当前字符
    c w 修改到某个单词的结尾位置
    c 3 w 修改到第三个单词的结尾位置
    c b 修改到某个单词的开始位置
    c W 修改到某个以空格作为分隔符的单词的结尾位置
    c B 修改到某个以空格作为分隔符的单词的开始位置
    c 7 B 修改到前面7个以空格作为分隔符的单词的开始位置
    c 0 修改到某行的结尾位置
    c) 修改到某个语句的结尾位置
    c 4) 修改到第四个语句的结尾位置
    c( 修改到某个语句的开始位置
    c } 修改到某个段落的结尾位置
    c { 修改到某个段落的开始位置
    c 7 { 修改到当前段落起始位置之前的第7个段落位置
    c tc 修改当前行直到下一个字符c所出现位置之间的内容
    C 修改到某一行的结尾
    c c 修改当前行
    5 c c 修改从当前行所开始的5行内容

    .重复上一次修改!

    表8-4 替换命令
    替换命令操作
    s 将当前字符替换为一个或多个字符
    S 将当前行替换为一个或多个字符
    5 s 将从当前字符开始的5个字符替换为一个或多个字符

    vi替换使用规则:
    :g/s1/s/s2/s3/g
    第一个g表示对每一个包括s1的行都进行替换,第二个g表示对每一行包括s1的行所有的s2都用s3替换
    s表示替换,s2是要被替换的字符串,他可以和s1相同(如果相同的话用//代替),s3是替换字符串

    16.
    fx
    往右移动到 x 字符上
    Fx
    往左移动到 x 字符上
    tx
    往右移动到 x 字符前
    Tx
    往左移动到 x 字符后
    (注意:以上四个命令中,其中x是键入的字符)
    ;
    分号,配合 f 和 t 使用,重复一次
    ,
    逗号,配合 f 和 t 使用,反方向重复一次

    17. vi 环境选项 Solaris ksh
    noautoindent nomodelines noshowmode
    autoprint nonumber noslowopen
    noautowrite nonovice tabstop=8
    nobeautify nooptimize taglength=0
    directory=/var/tmp paragraphs=IPLPPPQPP LIpplpipnpbtags=tags /usr/lib/tags
    noedcompatible prompt tagstack
    noerrorbells noreadonly term=vt100
    noexrc redraw noterse
    flash remap timeout
    hardtabs=8 report=5 ttytype=vt100
    noignorecase scroll=11 warn
    nolisp sections=NHSHH HUuhsh+c window=23
    nolist shell=/bin/ksh wrapscan
    magic shiftwidth=8 wrapmargin=0
    mesg noshowmatch nowriteany

    For C-Shell:
    setenv EXINIT "set nu"
    For Bourne or Korn Shell:
    EXINIT="set nu"; export EXINIT
    For Korn Shell Only (alternate method):
    typeset -x EXINIT="set nu"
    在 .profile 里设置 vi 的环境选项 , 以上均测试过

    18.标记文本
      mchar   用字母char标记当前光标的位置
      `char   移至char所标记处
      'char   移至char标记所在行的开头处
      "     移至当前行上一次所在位置(在光标移动之后)――一个双引号
      ''    移至当前行上第一次所在位置的行的开头处(在光标移动之后)――两个单引号

    19.
    同时vi多个文件时,CTRL-SHIFT-6回到上一个文件,在本次vi的文件和上次vi的文件之间切换。
    但是我发现一个BUG:在用CTRL-SHIFT-6切换到上一个文件后,用:args查看多文件vi状态时,
    屏幕底部仍然显示目前vi的是刚才的文件。
    (在HP-UX,Solaris,AIX上通过)
    也可以使用:
    :e#
    进行切换

    20.
    sco 下VI 要在文本前同样的字符加用
    %s/^/要加的内容/g 要在文本后同样的字符加
    %s/$/要加的内容/g

    21.
    如何去掉文本中的 ^M 硬回车?不必用binary传回去再ascii传回来的方式,用shell或者unix语句实现。
    cat filename |tr -d '15' >newfile
    不同的unix系统还存在一些其他不同的命令,如:doscp
    sed 也可以实现这个功能.
    dos2unix filename filename2
    反之
    unix2dos filename filename2
    在vi 中用:$s/^M//g
    ^是crtl-V crtl-M

    22.如何在“unix命令行”下将一个文件的某字符串用另一个串换掉
    sed 's/string1/string2/gp' file1 > file2

    23.将/etc/hosts下所有的地址都ping 2次
    1 #/usr/bin/sh
    2 #grad /etc/hosts and ping each address
    3 cat /etc/hosts|grep -v '^#' | while read LINE
    4 do
    5 ADDR=`awk '{print $1}'`
    6 for MACHINE in $ADDR
    7 do
    8 ping $MACHINE -n 2
    9 done
    10 done

  • 2007年Linux手机软件行业趋势分析(转)

    2007-09-29 23:34:23


    2007年的Linux手机软件在第一季度的喧嚣中开始发力了,作为其发展的关键的一年,想在这里就相关的趋势进行分析,以供行业内外人士作为决策的参考。值得注意的是,本文采用的相关信息都是一手资料,互联网或者转述的信息不在采用之列。

    趋势一:Linux手机软件标准两强之“竞合”
    在今年的3GSM大会后更加清楚地就是,Linux手机软件标准出现了两大阵营:LiMo(www.limofoundation.org )和LiPS Forum(www.lipsforum.org)。虽然这两个组织的在目标和组织结构(董事会,工作组)上有着惊人的类似,然而,LiPS Forum的成立要比LiMo早近1年半,而且这来两个组织的发展策略也是大相径庭的。LiMo是行业联盟性质的非盈利基金会,收费昂贵。采取的是直接发布以现有成熟软件为基础的代码来“标准化”市场,大有来势汹汹,舍我其谁的劲头。但是由于主导企业利益相关度极大,导致这些代码在质量和更新周期上让人生疑。所以大部分企业还是采取观望的态度。然而LiPS Forum(作者:有点老王卖瓜的意思),由于已经成立1年多,所以相对进展较快,更重要的是它完全采用了类似OMA和欧洲其他主流电信标准组织的架构和发展思路,而且从发展的策略上,采取了更加开放的姿态。所以得到了OMA,OMTP,OSDL等相关的组织认可,初步形成了“标准化链”。在成员方面,软件和芯片厂商数量上占优,运营商(法国电信)主导性强。但是缺乏像LiMo创始成员那样的豪华阵容。有意思的是,目标相同,使得这两个组织在合作上形成了可能;然而,采取的策略手段大不相同,所以竞争也在所难免。尽管作者参与其中,甚至影响LiPS和法国电信与LiMo合作的策略,目前还是没有能够找到这两个组织切实的融合点,但是,还是坚信:“两个组织的融合是Linux手机软件行业中最值得期待的事情之一”。
     
    趋势二:Linux手机软件相关公司面临着“重组前的混乱”
    尽管无论从市场还是资本层面上看,Linux手机软件相关公司都应该是在历史上最好的时期了。但是由于手机行业快速更新的特点,使得那些产品没有成熟的公司承担很大的市场机会风险,而产品成熟的公司又面临技术更新的风险。所以,好年景,未必就有好日子。
    现在有两类公司是Linux手机软件的主力,一类是独立软件提供商:如Access/Palmsource,Trolltech,Mizi,Open-Plug,CelUnite;另一类是自主研发的手机厂商/运营商:Motorola,Nokia,NTT DoCoMo/NEC/Panasonic,Cellon,Purple Labs。
    独立软件提供商理应是这一轮Linux手机行情的大赢家,但是逐一看来,倒是更加印证了“成功是给有准备的人的”的道理。Access/Palmsource 和 Trolltech在这两个都是上市公司,财力雄厚,然而产品就不是那么般配了,Access/Palmsource的ALP平台最早2007年底才能装机;Trolltech尽管经营多年QTopia手机软件,但是用户诟病以久的质量问题,也使其难以放手一搏2007年。Open-Plug 技术值得期待,但同样的产品装机时间问题,好在去年拿到1500万美元的投资,又有一线手机厂商客户在手,生存不是问题。CelUnite公司就更有意思了,去年下半年成立(其实是一家同名印度公司,被美国资产管理公司并购),投资人许诺1亿美元投资Linux手机软件,经证实首期3000万美元已经到帐,而且他们和一线手机厂商的关系十分紧密,产品还未发布,收入已经可观了。绝对称得上“黑马”,但是同时要提醒的是,“黑马”如果和“泡沫”结合在一起的时候,事情就不妙了。说到Mizi,可以说是作者最为推荐的公司,他们技术精湛,创新意识十分强,财务保守(十分难得),垄断了韩国Linux手机软件市场。美中不足是,国际化是个软肋,毕竟韩国手机厂商在Linux手机上实力有限,就限制了Mizi盈利和拓展能力。但是,他却成为了绝佳的并购对象。
    自主研发的手机厂商/运营商可谓Linux手机软件的“无冕之王”。他们直接将Linux手机投入市场,造就了Linux目前的大好形势。当然投资也是巨大的,估计整个行业的2/3的投资来自他们。以Motorola和NTT DoCoMo为例,他们各自投入了2-3亿美元才取得了目前的成绩。然而当他们才开始要享受成功的时候,由于通信行业的周期性发展(进入3G和融合),他们面临巨大挑战-“如何维护和升级Linux产品”,看似简单的问题却引发了战略层面的阵痛。对于Motorola来说,这么巨大的投入,只在局部市场取得成功是不可被接受的,所以产品国际化的升级方案 - Linux+Java 被提了出来,然而由于他们没有能够及时解决Linux战略问题(开源战略,法律结构,市场定位),这个方案的技术和市场问题被放大了,最终导致搁浅。NTT DoCoMo面临着其实同样的问题,他们想通过全球化相关技术(基于Linux的MOAP平台),来获得低成本和战略优势。然而,由于开发时缺乏类似考虑,使得产品不得不进行升级才能推广。自然另外一个重要的问题被提出来了:“需要投资多少才能成功地升级产品,难道还要投入2-3亿美元吗?”,这个投资规模对任何一家公司都无法想象的。正是由于这两家公司有着类似的问题,急于找出路,才有了上面提到的LiMo基金会,两家公司都想借助于这个组织进行Linux战略“软着陆”。尽管作者个人信奉:任何复杂问题的完美答案都很简单,但是他们的问题答案也确实太简单了一点。Nokia 770(europe.nokia.com/770)不是严格意义上的手机,他的学名叫“Internet Tablet”,但是明眼人一看就知道,只要他们战略上准备好了,分分钟就变成手机了。作者推崇Nokia的原因是,他们的策略清晰、方法正确、效果良好,无论对于开源社区还是最终用户来说,这款产品都是开源模式/产品在手持设备中应用的典范。可惜的是Nokia要真正全力投入到Linux手机上来的可能性还是可谓“渺茫”,不是技术或者市场、甚至战略原因,更是“政治”因素。
    至于其它公司,就不一一列举了,但是就上述分析而言,很难得出一个清晰的竞争图谱,更象行业重组前的混乱。所以,2007年作者对他们期待不大,但是好戏会不会在2008呢?

    趋势三:Linux手机/嵌入式相关开源社区蓬勃发展
    2007年,开源社区要发言!终于在Nokia、法国电信等公司的持续努力下,开源社区开始意识到Linux手机/嵌入式需求巨大,而且时机成熟。一批开源项目涌现出来,其中Maemo (www.maemo.org),OpenMoko(www.openmoko.org)和 GPE Phone Edition(gpephone.linuxtogo.org)影响较大。由于背后有一些成熟的商业公司作为支持,以及相关的开源项目日趋成熟,他们的成功指日可待。可以参照作者关于开源发展的阶段分析(blog.sina.com.cn/u/4a09ed6f0100048d)来理解。要知道,一个典型的Linux手机软件,需要最少30-40个相关开源项目支持,所以无论如何开源社区是无法绕过的。而且,如果不加合理利用尽快跟上,最终开源社区会淘汰掉大部分的商业开发的产品。

    趋势四:中国力量:“起了一个大早,晚集也未必能够赶上”
    中国公司和个人涉足Linux手机软件开发,甚至有可能是世界上最早的。作者记得的公司有博立斯、移软、凯思昊鹏等都在2001年和2002年前后开始开发Linux手机软件产品,而当时Motorola和NTT DoCoMo正处于调研阶段。这就是为什么说“起了一个大早”。不幸的是,看看今天的Linux手机软件市场,中国公司的影子在哪里?卖的卖,倒的倒。2007年,我们对他们有什么期待呢?结论就显而易见了,“晚集未必能够赶得上”。难道机遇就要这样与我们擦肩而过?
    综上所述,2007年,Linux手机软件行业会有看头。

  • 手机平台设计(转)

    2007-08-25 00:48:33

    三个基本设计模型:C/S模型、插件式设计和MVC模型。随着平台的演化,这些模型已经开始显现出威力。这里我们简单介绍一下,欢迎交流。

     

    C/S模型:把多进程共享的功能集中到服务器中。好处是:

    1.         串行化对临界资源的访问。比如对声音设备的访问,电话、短信、彩信、相机和媒体播放器等等,可能要播放声音或者使用MIC,我们通过一个mplayerservice的后台服务进程来仲裁和调度,保证对声音设备的有序访问。

     

    2.         避免使用共享内存,提高平台的稳定性。共享内存是个好东西,它是在进程之间共享数据最快的方法。但是用得过多,或者用得不好,很容易引起崩溃或者死锁,导致系统的稳定性下降。采用C/S模型可以减少对共享内存的使用。

     

    3.         简化应用程序的开发。我们最大限度的抽取界面无关的代码,这些代码一部分以函数库的形式提供,一部分以服务的方式提供。比如MMI服务进程做了大量的工作,如处理短信的编/解码和管理电话状态等等。这样,MMI应用程序的开发得到很大简化,电话和短信等应用程序的实现都只要两三周时间了。

     

    4.         隔离硬件平台,让应用程序与硬件无关。比如,关机状态的ALARM处理是硬件相关,由于硬件方案没有确定,目前没有确定具体的实现方案。由于这是在ALARM服务进程中处理的,到时候硬件方案确定时,只需要修改alarm服务进程一个地方,相关应用程序都不必关心。

     

    5.         限制用户权限。我们手机平台与其它类似平台的一个很大差别就是,应用程序不在root用户下运行,降低权限可以提高数据的安全性。但有的操作必须在root用户下才能执行,我们让特定服务进程处理这些操作,这样就解决了用户权限的问题。

     

    6.         便于自动测试。服务进程是与界面无关的,大部分功能都可以自动测试。

     

    插件式设计:独立的功能以插件方式提供。好处是:

    1.         隔离功能变化。通过插件方式,增加新功能时,不需要修改现有代码。比如在文件管理器中,把文件发送出去,现在有彩信和邮件两种方式。以后可能还会增加通过MSN或者无线传输发送。采用插件式设计,到时候只要增加两个插件就行了。

     

    2.         方便第三方定制。我们精力有限,可能只实现一些常用功能,其它高级功能可以由第三方进行定制开发,插件式设计为定制开发提供了一种简单的方式。比如基于MMI短信插件,可以方便的进行短信过滤或者远程控制。

     

    3.         简化系统复杂度。把具体的功能从框架中剥离出来,尽管这些插件仍然要自己实现,工作量似乎没有减少,但是分离合理,各个组件的复杂度大为降低,实现起来更为简单。

     

    4.         减小应用程序之间的耦合。桌面是一个很好的例子,它与很多应用程序都有关联,比如电话、名片、短信、彩信、邮件、日程和闹钟等等,基于插件式设计,桌面只是一个框架,具体功能由应用程序提供插件来实现,桌面与它们没有直接的耦合。

     

    MVC模型:用MVC模型分离界面和逻辑代码。好处是:

    1.         分离界面和实现,隔离界面的变化。界面是最容易变化的,在手机中也是如此,SPEC组和测试组在改善可用性时,通常会调整界面,这是一个持续的过程。把实现代码从界面代码中分离出来,从而免受界面修改带来的影响。

     

    2.         保证界面一致更新。这也正是MVC模型的优点之一。在手机中,界面更新一致性的问题,很容易引起麻烦。比如在短信中,新事件列表、短信列表、短信选择和短信阅读等界面,它们都对应同一份数据,一处更新(如删除),要同时更新到相关界面上。通过MVC模型,这种更新变得相当自然。

     

    3.         便于自动测试。分离界面和实现,这是自动测试的前提

  • iSCSI体系简介

    2007-08-21 21:36:49

    iSCSI 详细诠释

    连接到一个TCP/IP网络的直接寻址的存储库,通过块I/O SCSI指令对其进行访问。ISCSI是一种基于开放的工业标准,通过它可以用TCP/IP对SCSI(小型计算机系统接口--一种数据传输的公共协议)指令进行封装,这样就可以使这些指令能够通过基于IP(以太网或千兆位以太网)“网络”进行传输。这一标准的目的是允许使用现有的以太网网络传输SCSI指令和数据,而这一过程完全不依赖于地点。对这一产品的另外一种描述是,它是连接到TCP/IP网络的存储,但可以使用与DAS和SAN存储一样的I/O指令对其进行访问。图例如下:
     
     
    注:
    Server:服务器
    Block IO Protocol:块IO协议
    iSCSI Protocol:iSCSI协议
    IP Network:IP网络
    Ethernet Connection:以太网连接
    ISCSI Storage Appliance:ISCSI存储设备

    iSCSI的初期实现都将在千兆以太网上,但逐渐会向万兆以太网转移。实施iSCSI的时候,通常要与IP网络设备桥接一个或多个Fibre Channel SAN,就像Cisco系统的SN 5420 Storage Router(存储路由器)一样,将处于孤立状态的不同SAN连接起来,即便是相隔很远的孤立的SAN也能被iSCSI连接到现存的设施中。另外,源自于IP技术的优势,iSCSI的数据镜像与远程备份技术也很容易实现。

      与Fibre Channel相比,iSCSI的优势不仅体现在实施成本的降低,而且由于数据网络与SAN之间用到的技术都不复杂,因此减少了培训和人力资源成本。利用服务质量(QoS)与安全上的优势,使得与现有设施共享存储成为了可能。而千兆以太网更是不用改造现有的基础设施,便可获得1Gbps的存储网络。另外,理论上iSCSI还支持存储流量与数据流量共享一个通道,但出于安全的考虑,一般情况下还是将其分离。

      iSCSI工作过程

      首先需要明确几个术语:提出请求的源机器设备称作initiator,请求的目标设备称作target。一个外出的请求是从initiator到target,一个流入的请求是从target到initiator。

      iSCSI的工作方式是这样的:首先,带有SCSI卡的initiator发出一个SCSI命令,命令被封装进第四层的包中并发出,target接到后从中取出命令并执行,接着target再将SCSI命令返回的结果封装进IP包并传送给initiator,最后initiator将数据或命令取出返回给SCSI子系统。整个过程不用人工干预,对最终用户是完全透明的。其中一个或多个TCP会话用来承载数据,控制消息、SCSI命令与iSCSI PDU内的参数。

      安全性

      为保证安全,iSCSI制定了自己的登录序列:首先,initiator设备登录进target设备,如果target设备接到来自initiator的一个没有执行登录过程的iSCSI PDU,就生成一个协议错误,target设备就会关闭连接。接着target会返回一个拒绝iSCSI PDU,最后关闭会话。这是较低级的安全措施,因为它只是保护了通信的初始阶段,并没有提供针对信息包一级的保护。

      还有一些方法也提供了对iSCSI安全的措施,包括使用IPsec。对所有的控制与数据包,IPsec都提供了完整性、重播保护与验证,也提供对单独信息包的加密

    goodcjh2005 2005-11-15 12:09
    iSCSI技术大全

    iSCSI技术大全

    在上世纪末、本世纪初,一提到SAN(Storage Area Network),我们立刻就会想到光纤通道(FC,Fiber Channel)技术,也即那时候的SAN多半单指FC而言。一直到iSCSI问世,为了方便区隔,业界才分别以FC-SAN及iSCSI-SAN的称呼加以分辨。

       当时与SAN相对应的是在多用户网络环境中,采用文件协议(File Protocol)数据存取方式的NAS(Network Attached Storage,网络附加存储)方案。它的出现,为以太网络的成熟及重要,做了最佳脚注。
      日益成熟的因特网进一步成为了IP存储方案成长壮大的最佳腹地及平台,现成的架构、协议、标准、基础设施及管理工具,莫不吸引着寻求最佳存储方案者的目光。此一背景,加上FC SAN“高不可攀”的成本及管理门坎的障碍,另一存储成员iSCSI(Internet SCSI)也来报到了。

       iSCSI的出现,标志着低价化SAN方案的问世,也一偿中小企业建置SAN的美梦。

       从IP SAN到iSCSI SAN
      所谓iSCSI亦即透过IP网络,将SCSI块数据转换成网络封包的一种传输标准,它和NAS一样透过IP网络来传输数据,但在数据存取方式上,则采用与NAS不同、却与FC-SAN相同的块协议(Block Protocal)。iSCSI最早是由IBM及Cisco于2001年制定的,两家并且分别推出了支持iSCSI的产品——IBM IP Storage 200i及Cisco SN5420 Router。

      事实上,为了解决FC-SAN在价格及管理上的诸多门坎,各家早有不同协议的IP SAN的研究开发。这些IP SAN的架构,其实与iSCSI大同小异,只不过并非走标准化的协议(事实上,在iSCSI标准化之前,也没有什么标准不标准的问题),而是各家自行研发的协议,所以基本上各家IP SAN是不兼容的。

       据NetApp表示,该公司早在2001年年底即推出了自家的IP SAN,它采用的是自行开发的VLD协议(Virtual Local Disk),存储上属于Block over IP方式。

       2003年2月,当IBM早已退出iSCSI之际,NetApp宣称推出了iSCSI正式标准制定之后的全球第一台iSCSI产品。

       两大推波助澜的关键促因

       早先在iSCSI尚未标准化之前,只有少数厂商敢投注心力在IP SAN的开发上,但也因为每一家厂商皆开发专属封闭协议的解决方案,所以这些方案之间并无法完全兼容。而当时的市场上,由于发展iSCSI的厂商很少,所以支持的平台及软硬件等基础设施便相当贫乏,这可说是iSCSI发展之初的最大阻碍及瓶颈。

      但接下来的两大事件,却被视为促进iSCSI大行其道的关键因素,那就是iSCSI标准的正式通过,以及微软的正式支持。

       在众所期盼的敦促下,SNIA(Storage Networking Industry Associate,存储网络工业协会)终于在2003年2月正式制定通过了iSCSI标准。而业界莫不把此标准化视为iSCSI发展历程中的最关键因素,自此开始,有愈来愈多的厂商开始进一步开发合乎业界标准的相关产品,iSCSI也开始受到业界目光的青睐。

      在iSCSI的发展过程中,除了正式标准化具有重大意义外,微软紧接在2003年5月于已上市近1个月的Windows Server 2003 中,正式开始支持iSCSI,并提供iSCSI Initiator驱动程序的下载。微软此项深具推波助澜的作法,带动了整个iSCSI业界的发展。所以接下来,不论各类作业平台或软硬件的支持会愈来愈齐备。

       iSCSI之所以被看好的原因不少,首先它根植于IP网络上,所以可以采用现有已非常成熟的管理工具及基础建设,可为企业节省大笔建置、管理及人事成本。更重要的是,懂IP的人才资源非常丰沛,成为助长iSCSI发展的中坚份子。此外,iSCSI在数据传输距离上,几乎没有限制的优点,更紧紧吸引无数企业的目光。

       2005年将是iSCSI出头年

      自从标准化及微软支持解决了iSCSI最大的发展瓶颈之后,iSCSI的全面普及也只是时间早晚的问题而已。但业界对其开始普及的时间点一直莫衷一是。一般调查机构多半认为该时间点应在2006年,但各家厂商却异口同声地认为2005年就有机会看到市场大幅起飞。

      姑且不论这是否是业界的信心喊话或策略性动作,但他们却认为一开始推展的领域会以中小企业为主,至于较高端的存储市场则比较没有机会。尤其对于中小企业为主干的亚太区市场,架设iSCSI SAN将是最经济的SAN解决方案。有些意识到这点的国际大厂,甚至推出了专为亚太地区用户设计的iSCSI产品,典型的例子便是2004年10月HP发布的IP Storage 500/1500。

       10G以太网会是iSCSI茁壮成长的基石

       对于iSCSI的未来发展,NetApp(Network Appliance)及建联科技(Raidsys)都认为SAN与NAS的整合会是一大趋势,两家也已经有相关产品及解决方案的推出。此外,展望未来,iSCSI厂商莫不期盼新一代10G以太网的到来,因为在10G以太网的带动下,iSCSI的理论带宽将会攀升到10Gb的高水平,那么即使未来FC提升到新一代的4Gb,仍然不是iSCSI的对手。如此截然不同的情势逆转,难怪让不少厂商面露既兴奋又憧憬的表情。其中,NetApp甚至表示,2005年即会开始推出支持10G的iSCSI产品,此无异让10Gb高速美梦成真的可能性提高不少。

      但博科(Brocade)通讯系统公司的资深技术顾问却非常怀疑10G以太网推行后,iSCSI性能是否真能获得大幅提升。他表示即使网络带宽达到10G速度,但主机端(Initiator端)及Target端存储装置的I/O,却不一定赶得上这样的速度。如果不能的话,整体效能还是上不来。

       在2005年春季IDF上,英特尔公布的I/O 加速技术 (I/O Acceleration Technology)则驳斥了这种怀疑,进一步扫清了iSCSI应用的性能瓶颈。据悉,这一技术能够使网络数据与服务器应用之间的交互速度提高30%。

       英特尔I/O 加速技术可弥补现有iSCSI TOE技术的不足。TOE指定一个昂贵的专用芯片来卸载协议计算,但它不能完全解决CPU的两个最大负担――系统操作或内存访问。鉴于此,TOE仅会在处理大型数据包有效负载时才会发挥出最明显的作用。

    goodcjh2005 2005-11-15 12:10
    继续

      英特尔通过提高芯片组和网络控制器向内存输入输出数据的响应能力,优化TCP/IP协议,减少处理器介入缓解,从而可以提高iSCSI的性能,并减少了一半服务器处理器的负载。

       微软将在未来Windows Server版本中支持英特尔I/O加速技术,新版操作系统还将包括能够有效平衡多内核CPU之间的网络TCP/IP流量的技术。

    iSCSI与各类型存储方案综合评比

    引:与Fiber Channel(以下简称FC)一样,iSCSI也属于SAN大家庭中的一员,它的问世显然是冲着FC SAN的缺点而来的。长久以来,FC几乎成了SAN的代名词,但由于相关软硬件的建置成本偏高、管理技术及门坎也较高,所以几乎只有中大型企业才有能力做这方面的建置与规划,中小企业限于自身规模,也只有望洋兴叹、徒唤奈何的份。

       无传输距离限制、建置管理成本低是最大特点

       iSCSI最重要的就是能在成本上提出大幅改善的方案,也因此打破了SAN为中大型企业禁脔的藩篱,让中小企业也能享受到SAN所带来的好处及便利。到底是哪些优良特质,让iSCSI成为目前存储业界最热门的话题呢?以下我们做一番简要的归纳及分析:

       构建成本低廉:不论是适配卡、交换机或缆线的购置,iSCSI都比FC便宜许多。其中适配卡部分,只要Host端主机本身内建的一般网络卡或网络芯片,搭配免费下载的iSCSI Initiator驱动程序即可,所以在适配卡方面可以达到完全免费的境界。

       管理门坎及维护成本更低:一般来说,FC SAN多半需要特定的工具软件来操作管理,所以需要对人员进行一定时间的教育训练,而且费用不低。但由于iSCSI乃透过IP网络来传输数据及分配存储资源,所以只要使用网络现有的管理功能即可,相较起来,的确可以省下大笔管理人力及训练成本。节省存储资源、做好集中管理:由于iSCSI与FC同样支持块协议的数据存取模式,所以比采用文件协议(File Protocol)的NAS,更能透过集中管理的方式,有效避免存储资源的浪费,进而节省不必要支出。

      没有距离的限制:由于iSCSI是透过无处不在的IP网络来传输数据,所以理论上,传输距离也可达到无限制的境界,这对于异地数据的传输及灾备等应用相当有帮助。

      传输速度够快:拜GbE网络之赐,理论上,iSCSI的速度可达1Gb,虽然速度仍比不上FC SAN的2Gb,但效能上已超越大部分的NAS。更重要的是,一旦10Gb以太网络普及的时候,iSCSI就可能以10Gb的高速狂飙,甚至比FC SAN的新一代版本——4Gb还要快。

      人才较多:随着因特网的日益兴盛,造就了取之不尽、用之不竭的TCP/IP网络人才,比起门坎较高的FC SAN来说,专走IP网络的iSCSI可谓占尽优势。

    数据碰撞及支持性低等问题成为推展阻力

    goodcjh2005 2005-11-15 12:19
    继续

    天底下没有十全十美的事物,虽然iSCSI的优点不少,而且十分抢眼,但仍有许多待解决的缺点,以下就让我们一起分析看看iSCSI到底有哪些缺陷:

       1. 扰人的噪声碰撞问题:由于iSCSI走的是IP网络,其中当然充斥着来自全球各地的庞大数据及噪声,所以碰撞情形也就在所难免了,如此一来,在数据传输的过程中,就很容易导致延迟的情形发生,大大影响了传输的效能,甚至数据的正确性。针对这类问题,不少厂商专研解决之道,其中像是乔鼎信息(Promise)即宣称,该产品提供的Data Digest功能,可有效解决噪声问题。

      2. 仍有改进空间的效能瓶颈:这方面可分成下列几项来讨论。

    (1) 传输带宽问题:前文已提到,目前的1Gb带宽,尚不及FC的2Gb,这方面待要等到10Gb以太网络普及之后,才有可能赶上。但就目前企业的网络状况来看,GbE以太网络的普及率都有待加强了,所以10Gb何时来临,还是未定之数。

       (2) 流量控制问题:这方面也没有FC来得好。

       (3) I/O端的速度限制:Brocade指出在Host主机及Target存储设备两处的I/O端速度一直不上来,所以即使10Gb以太网络真的普及,I/O端的速度瓶颈仍然会拖跨这个传输效能。

       (4) 软件iSCSI Initiator效能不佳:其乃透过软件仿真来执行SCSI指令,所以会耗费掉大量的CPU资源,造成整体效能的低落。这个问题虽然可以透过安装频率较高的CPU来解决,喽缘乇慊嵊卸钔獾某杀局С觥?lt;/P>

       3. 硬件iSCSI适配卡较贵:如果想要让整体效能有好的表现,那么就必须添置较贵的iSCSI HBA卡或稍贵的TOE(TCP Offload Engine,TCP卸载引擎)HBA卡,整体成本会因而大幅攀升。据Brocade指出,不论是FC HBA卡或FC交换机的价格都在逐步调降中,同时该公司会推出价格颇为低廉的FC交换机,如此一来,在寻求高效能的前提下,iSCSI的成本优势会相对减少。

       4. 支持的平台及软硬件仍少:虽然目前Windows、Linux、UNIX、Netware都已陆续推出软硬件的Initiator,但数量及完备性仍不足,尤其是版本特多的Linux,目前只有SuSE及Redhat有解决方案;其中,SuSE只有软件、Redhat只有硬件。此外,HP-UX及Novell Netware只有软件,SUN Solaris则只有硬件,而且一些平台上的设置十分复杂困难。换句话说,目前只有微软Windows平台具备最完备的支持性。但是目前业界及政府机构的数据中心,有相当数量是采用非Windows操作系统,再加上也有不少公司内部系统是属于多种操作系统环境,所以各平台解决方案的提出,仍是iSCSI急待解决的重要课题。

       5. 令人质疑的安全性:IP网络环境复杂,再加上懂IP的人相对的多,所以安全性也相对地令人质疑。

       6. 无法兼顾效能及跨平台性:前面已提到iSCSI Initiator可分为三种,亦即软件Initiator驱动程序、硬件的TOE HBA卡及iSCSI HBA卡。就效能而言,Initiator驱动程序最差、TOE居中、iSCSI HBA卡最佳。但是iSCSI HBA只能走iSCSI协议,而无法透过NFS(Network File System,SUN制定)或CIFS(Common Internet File System,微软制定)等档案系统协议与应用服务器沟通。但Initiator驱动程序及TOE则同时支持iSCSI、NFS及CIFS三种协议。
    iSCSI、SAN及NAS大比拼


      一般来说,企业在面临iSCSI SAN存储解决方案时,多半喜欢拿FC SAN及NAS与其做一番比较。在此先就FC与iSCSI做一比较,基本两者同属走块协议的SAN架构,只不过前者透过FC,后者藉由IP传输数据罢了,而两者在管理及应用上也大同小异,其间只不过优劣好坏的差异。

      至于SAN与NAS的差异而言,许多iSCSI厂商都认为SAN与NAS是完全不同架构的存储方案,前者支持块协议,后者则支持文件协议,所以拿两个完全不同协议及架构的标准相比,是不太适宜的。

      如果硬要从中做个区别的话,精业公司倒提出了一个简单易懂的区别方法,那就是SAN的精髓在于分享存储设备(Sharing Storages);NAS则在于分享数据(Sharing Data)。总而言之,NAS与SAN因为架构及应用领域的不同,所以不会相互取代,而会共存于企业存储网络之中。

      无论如何,为了让读者进一步了解iSCSI、FC及NAS的差异,在此还是尽量做一番归纳整理,以供读者参考:

      接口技术:iSCSI和NAS一样透过IP网络来传输数据,FC则不一样,数据是透过光纤通道(Fibre Channel)来传递。
      数据传输方式:同为SAN的iSCSI及FC都采用块协议方式,而NAS则采用文件协议。

      传输速度:就目前的传输速度而言是FC(2Gb)最快、iSCSI(1Gb)次之,NAS居末。基本上,FC及iSCSI的块协议会比NAS的文件协议来得快,这是因为在操作系统的管理上,前者是一个“本地磁盘”,后者则会以“网络磁盘”的名义显示。所以在大量数据的传输上,iSCSI 绝对会比NAS快得多。

       资源共享:iSCSI和NAS共享的是存储资源,NAS共享的是数据。

      管理门坎:iSCSI和NAS都采用IP网络的现有成熟架构。所以可延用既有成熟的网络管理机制,不论是建置、管理或维护上,都非常方便及容易。而FC则完全独立于一般网络系统架构,所以需由FC供货商分别提供专属管理工具软件。

      管理架构:透过网络交换机,iSCSI及FC可有效集中控管多台主机对存储资源的存取及利用,善用资源的调配及分享,同时速度上也快于网络磁盘的NAS。

      成本:比起FC而言,以太网络是个十分成熟的架构,而熟悉的人才甚多,所以同样采用IP网络架构的iSCSI及NAS,构建成本低廉、管理容易而维护方便。至于与FC在构建成本上的进一步比较,可见表1。

      传输距离:原则上,三者都支持长距离的数据传输。FC的理论值可达100公里。透过IP网络的NAS及iSCSI理论上都没有距离上的限制,但NAS适合长距小文件的传输,iSCSI则可以进行长距大量资料的传递。

      系统支持:相较起来,iSCSI仍然比较少。FC主要是由适配卡供货商提供驱动程序和简单的管理程序。
    iSCSI市场现状剖析

    goodcjh2005 2005-11-15 12:19
    继续

    对于摩拳擦掌、蓄势待发已久的iSCSI而言,迟迟未能全面普及的主要原因之一,就在于各类平台支持性的不够完备。是否能得到各式平台充份支持的关键,则在于协议的标准化上。有了标准化的协议,各类平台解决方案商才能有所依循地推出符合共通标准的支持及产品,如此可观的市场规模才能建立得起来。

       所幸SNIA协会在2003年2月正式通过了iSCSI标准, iSCSI厂商终于可以开发出彼此兼容的软硬件方案及产品。
      虽然iSCSI已正式标准化,但不一定代表从此就能开花结果,毕竟iSCSI是否能在企业存储市场站稳脚步,仍需看厂商本身的参与态度及开发意愿。没有厂商会对未知的领域投下无谓的投资及心力,而这也是厂商面对iSCSI时驻足观望的原因。

       WinTel的重量级支援

      若这个时候一些大厂愿意站出来登高一呼的话,厂商里足观望的僵局就能被打破。在iSCSI正式标准化之后不久,微软十分看好iSCSI的发展,毅然决然地挺身扮演推动者的关键角色,在2003年2月间,也就是几乎在SNIA协会通过iSCSI标准的同时,便提供iSCSI Beta版驱动程序的在线下载服务。

       接着同年5月,微软在发布Windows Server 2003时对外正式宣称会对iSCSI加以支持。到了7月,微软果然没有食言,紧接推出了支持iSCSI标准的Windows操作系统更新程序,该程序完全免费下载,可同时支持Windows 2000/XP与Windows Server 2003等不同操作系统。此外,微软还推出了代号Chimney的TCP/IP Offload架构,并得到了Alacritech和Adaptec等iSCSI HBA供应商的支持。

      微软坚决支持iSCSI似乎没有停竭之势,2003年11月,在标志着微软积极跨入企业存储市场的重头产品——Windows Storage Server 2003(WSS 2003)之中继续大力支持iSCSI。而2004年4月发表的Microsoft Exchange Server 2003也同时对iSCSI 及NAS加以支持。

      在上述一连串的动作中,微软从个人端的WinXP,到企业服务器的Windows Server 2003,到E-mail Server,再到中小企业Storage Server,全都加以支持,如此巨细靡遗的动作,可以看出微软对iSCSI前景的看好,同时也显露该公司对中小企业存储市场的野心。

      另一个重量级的大厂,也就是身为WinTel王国的另一支柱Intel,也早在2003年2月即推出型号为PRO/1000T IP的TOE(TCE Offload Engine)HBA适配卡。比起微软或其它操作系统厂商提供的iSCSI Initiator软件,Intel PRO/1000T IP适配卡提供了TCP卸载(Offload)的功能,可有效降低CPU的占用率,从而使整体效能有所提升。总而言之,iSCSI有了WinTel两大支柱的重量级支持,势必会带动整个业界的正面回响,并在中小企业存储市场蔚成一股新兴势力。




    支持尚未全面 普及仍需努力

      不过,精业公司却认为,目前市面上的信息中心及各企业的网管单位所采用的操作系统,并非完全局限于Windows系统,反而是充斥着Unix、Linux、SUN Solaris等林林总总的各种操作系统,换句话说,Windows只不过是众多操作系统中的一个罢了。更重要的是,其它操作系统对iSCSI的支持,并没有像Windows如此完备,其中不是只有软件驱动程序,就是只有硬件适配卡的提供,甚至也有完全没任何解决方案的平台。所以虽然微软全面支持iSCSI,但不表示整个市场都已有iSCSI解决方案。

      就整体趋势而言,市场上对iSCSI的支持是不断地在增加之中的。其中,在Linux方面,已有支持RedHat的适配卡,而SuSE也已有Initiator软件的支持。在Unix方面,除了IBM AIX早有支持外,HP-UX也有Initiator软件。至于Sun Solaris则软硬件的支持皆有,Novell Netware 6.5也已提供Initiator软件。最近,Cisco也推出了针对SUN专用的Initiator软件,接下来不久,该公司也会推出支持HP的Initiator软件。

       代表性厂商及代表性方案

      目前市面上,除了各类操作系统的Initiator软件之外,市面上已有愈来愈多厂商推出各种各类的iSCSI相关产品。以下就以iSCSI SAN网络中的组成要件——iSCSI适配卡、iSCSI交换机、iSCSI 存储服务器、iSCSI存储设备、iSCSI 桥接器及iSCSI网关来做逐一的剖析及介绍。

       一、iSCSI适配卡
       iSCSI适配卡大致分成两类,一为TOE HBA卡,一为iSCSI HBA卡,前者价格较便宜,后者效能极佳,但价格非常昂贵。代表性的厂商有Adaptec、Alacritech、Intel、LSI、Qlogic等,其中Intel专注于TOE HBA卡的开发。


    Alacritech iSCSI HBA SESg
    二、iSCSI交换机

    一般来说,在iSCSI SAN的网络架构中,只要用一般Gigabit以太网络交换机就可以运作。但目前已有全新iSCSI交换机的推出,代表性厂商有Cisco、McData、Sanrad(V-Switch)等。其中,Cisco更是这方面的先驱,早在2001年之际,该公司即联合IBM共同推出全球最早的iSCSI解决方案,当时Cisco即推出iSCSI路由器——SN5420。

       三、iSCSI存储服务器

       在iSCSI 存储服务器方面,不但历史最久远,而且代表性的厂商颇多,较具代表性的有IBM、NetApp、EMC、微软、飞康国际及DataCore(SANmelody)等。这方面的开山祖师当推IBM莫属,早在2001年,IBM即推出全球第一台的iSCSI存储服务器——IP Storage 200i,但由于当时的iSCSI尚未标准化,所以业界对该产品及标准的支持性及接受度都非常低,事情发展到最后,就是这只一向飞得太快、太远的大飞象,不得不黯然暂离iSCSI的市场。不过如今,IBM又重回iSCSI的怀抱,并推出了全新产品——TotalStorage DS300。

       向以NAS方案著称于世的NetApp(Network Appliance)早在2003年,iSCSI标准通过之际,即推出支持iSCSI的文件服务器,目前NetApp的代表性产品为F800系列及FAS900系列Server。此外,EMC也在Symmetrix DMX系列方案及新款EMC CELERRA NAS系统中开始支持iSCSI标准。

    其中WSS 2003同时支持NAS及iSCSI,不少厂商藉此与微软合作,推出基于WSS 2003的存储服务器,例如飞康国际(FalconStor)、技嘉及广达等公司都有这方面的iSCSI产品推出。

       四、iSCSI存储设备

      目前最常见的iSCSI存储设备首推磁盘阵列及磁带库。前者的代表性厂商有Adaptec(iSA1500)、HDS(Thunder 9500)、乔鼎信息(Promise VTrak 15200)、建联科技(Raidsys 15200)及普安科技等。

       至于iSCSI磁带库的厂商则有ADIC(Scalar i2000)、SpectraLogic、Quantum、耐特普罗(NetPro Virtual Tape Library)、Overland等。




    Dell EMC AX100i

    五、iSCSI桥接器

      也就是将一般的SCSI设备对iSCSI的转换器,其代表性厂商为ATTO,目前的产品为iPBridge 2500。

       六、iSCSI网关

    iSCSI网关可做为光纤通道协议与iSCSI协议之间的桥梁,目前代表性厂商为博科通讯(Brocade)和McDATA。



    如何构建符合成本/效益的iSCSI方案?

    引:对于有意构建iSCSI SAN的企业来说,面对市面上林林总总的各式iSCSI产品,往往会有无所适从的感觉,而在心中浮现许多待解的问题:例如到底要购买哪些配备?而每个配备在iSCSI SAN中扮演的角色为何?企业内部的旧有配备是否可以融合到iSCSI SAN之中?这些问题关系到了成本、效益、需求及兼容性等层面及环节,接下来笔者会以范例方案的方式,来逐一解决上述的疑问,并希望藉此能给读者们有用的参考信息。

       就一个完整的iSCSI SAN来说,其构成要件大致如下:

       A. iSCSI适配卡(a.Gigabit网络卡)
       B. iSCSI交换机(b.Gigabit交换机)
       C. iSCSI存储服务器
       D. iSCSI存储设备(d.SCSI存储设备)
       E. iSCSI桥接器
       F. iSCSI网关

  • VoIP open source

    2007-08-21 21:20:39

    When a body of independent auditors and experts recommended that the State of California consider open-source software and voice over Internet Protocol telephony (VoIP) as two measures to cut costs in 2004, that was the signal that open source and VoIP should unite. After all, what's better than free software? Open source is better, because you have access to the code. What's better than open source? Open source that's focused on VoIP. That's what you get here — 74 open source apps tucked into categories that you can use "as is" or change to fit your specific VoIP needs.

    The following apps and resources are categorized by SIP, H.323, IAX, and RTP protocols and include clients, libraries, gatekeepers, and any other open source resource available for those specific protocols plus PBX and IVR platforms. You'll also find tools like faxware, voicemail apps, and middleware that applies to one or more of the previously mentioned protocols.

    H.323 Clients (User Agents)

    VoIP traditionally uses H.323, a rather complicated protocol that uses multiple ports and a binary code for data. But apps like FreeSWITCH make H.323 seem like a piece of cake with its all-in-one application. The following H.323 clients are broken down into Multiplatform, Linux, MacOS X, and Windows.

    Multiplatform

    1. FreeSWITCH - FreeSWITCH is a telephony platform designed to facilitate the creation of voice and chat driven products scaling from a soft-phone up to a soft-switch. It can be used as a simple switching engine, a media gateway or a media server to host IVR applications using simple scrīpts or XML to control the callflow. FreeSWITCH runs on several operating systems including Windows, Max OS X, Linux, BSD, and Solaris on both 32- and 64- bit platforms. Note: FreeSWITCH is also multiprotocol, as it works with SIP, IAX2 and GoogleTalk to make it easy to interface with other open source PBX systems.
    2. YATE - Yate (Yet Another Telephony Engine) is a next-generation telephony engine that is the first open source telephony application capable of handling 600 H323 calls; while currently focused on Voice over Internet Protocol (VoIP) and PSTN, its power lies in its ability to be easily extended. Voice, video, data and instant messaging can all be unified under Yate's flexible routing engine, maximizing communications efficiency and minimizing infrastructure costs for businesses. YATE can be used for anything from a VoIP server to an IVR engine. The software is written in C++ and it supports scrīpting in various programming languages (such as those supported by the currently implemented embedded PHP, Python and Perl interpreters) and even any Unix shell. Note: YATE is multiprotocol, as it works with SIP and IAX, and H.323 protocol is stable supported just by Yate. The most used application of Yate is as a SIP-H323 translator because is the only open source stable translator.

    Linux

    1. Ekiga - Ekiga (formely known as GnomeMeeting) is an open source VoIP and video conferencing application for GNOME. Note: Ekiga uses both the H.323 and SIP protocols. It supports many audio and video codecs, and is interoperable with other SIP compliant software and also with Microsoft NetMeeting.

    MacOS X

    1. XMeeting - XMeeting is the first H.323 compatible video conferencing client for Mac OS X.

    Windows

    1. OpenH323 Project - The OpenH323 project aims to create a full featured, interoperable implementation of the ITU-T H.323 teleconferencing protocol that can be used by personal developers and by commercial users without charge.

    H.323 Gatekeeper

    1. OpenH323 Gatekeeper - The GNU Gatekeeper (GnuGk) is a full featured cross-platform H.323 gatekeeper, available freely under GPL license.

    H.232 Radius Platform

    1. BSDRadius - While there are quite large number of Radius servers (including free) available in   the world, little number of them (if any) are developed with VoIP specific needs   in mind. BSDRadius is a RADIUS - compliant AAA (Authentication, Authorization, Accounting) server with CHAP-password authentication for H.323. Platform-independent,   but has not been tested on Windows.

    SIP Clients (User Agents)

    SIP (Session Initiation Protocol) is currently described by the rfc2543SIP is a popular open standard replacement from IETF (Internet Engineering TasForce) for H.323 signaling standard for managing multimedia session initiation. SIP can be used to initiate voice, video and multimedia sessions, for both interactive applications (e.g. an IP phone call or a videoconference) and not interactive ones (e.g. a Video Streaming). It is the more promising candidate as call setup signaling for the present day and future IP based telephony services, as it has been also proposed for session initiation related uses, such as for messaging,   gaming, etc.SIP needs two ports, one for the command exchange and one for the RTP stream which contains the voice. It's easier to work with firewalls than H.323, but you still need to have a proxy running. The following SIP UAs are divided into two groups for Multiplatform and Linux only:

    Multi-Platform

    1. SFLphone - A nifty little default skin (Metal Gear) for SFLphone holds a multi-protocol (SIP/IAX) multi-GUI desktop VoIP phone for use in Desktop environments. The project is being developed on Linux, but should ("and must") be portable to various flavors of BSD operating systems (and maybe win32) with some involvement.
    2. Linphone - With linphone you can communicate freely with people over the internet, with voice, video, and text instant messaging. Linphone is stable under Linux, but FreeBSD and OpenBSD are reported to work.
    3. Minisip - Minisip was developed by Ph.D and Master students at the Royal Institute of Technology (KTH, Stockholm, Sweden). It can be used to make phone calls, instant message and videocalls to your buddies connected to the same SIP network. Runs on multiple Operating Systems (Linux PC, Linux familiar IPAQ PDA, Windows XP and soon Windows Mobile 2003 SE).
    4. OpenWengo - The flagship product of the OpenWengo project is a softphone which allows you to make free PC to PC video and voice calls, and to integrate all your IM contacts in one place. Through their partnership with Wengo, they also offer very cheap PC to telephone and SMS rates. Available for Linux, MacOSX, and Windows.
    5. PhoneGaim - Make phone calls to your friends and family directly from your Linspire computer with the latest software from Linspire. PhoneGaim is built right into Gaim.
    6. sipXtapi - sipXtapi is a comprehensive client library and software development kit (SDK) for SIP-based user agents. It includes SIP signaling support as well as a media framework. A complete and very feature rich softphone can be built easily by adding a graphical user interface on top of sipXtapi. Alternatively, sipXtapi was engineered to be embedded into existing applications adding real-time communications to such applications. sipXtapi is primarily developed under WIN32; however, sipXtapi can be built and used under Linux and MacOs X. WinCE support is in development.
    7. OpenZoep - OpenZoep (pronounced "open soup"), developed by Voipster, is a client-side telephony and instant messaging (IM) communications engine. It supports computer-to-computer (peer-to-peer) VoIP calls, instant messaging, and outbound PSTN and SIP calls to free and premium SIP providers.

    Linux

    1. Cockatoo - Cockatoo is a project that focuses on implementing SIP/SIMPLE as an extension for Thunderbird (XPCOM component/XUL interface) that enables users to phone contacts from an address book and see their presence state. Functionalities are included into Thunderbird as an XPCOM component.
    2. YeaPhone - The goal of the YeaPhone project is to bring VoIP-Software together with the Yealink USB handset (USB-P1K) and at the same time make a PC keyboard and monitor unnecessary. This makes YeaPhone ideal for "Embedded Devices" as these do typically need extra devices for user interaction (in this case the handset) while working very energy efficient.
    3. Twinkle - Twinkle is a soft phone for your voice over IP communications using the SIP protocol. You can use it for direct IP phone to IP phone communication or in a network using a SIP proxy to route your calls.

    Windows

    1. 1videoConference - 1VideoConference allows its Web, Audio/ Video phone, Skype, Msn and Yahoo users to instantly participate in live web conferences without the need for lengthy downloads or complicated installations. Simply drop a small piece of code onto your website and instantly create an online video conference room. All you need is a web cam and an internet connection and seconds later you can show presentations, share applications or users' desktops, hold live webinars, discuss new strategies face to face with business partners, and more...

    SIP Proxies

    1. Open Source SIP - Open Source SIP was created in March 2006 as a project to foster the development of commercially viable SIP applications. The Open Source SIP project is sponsored by Solegy, and draws on over six years of research and development.
    2. Partysip - Partysip is a modular application where some capabilities are added and     removed through GPL plugins. Depending on the list of included plugins, partysip     can be used as a SIP registrar, a SIP redirect server or statefull server, or a SIP service provider (game session, answering machine, etc.).
    3. MjSip - MjSip is a complete java-based implementation of a SIP stack that provides API and implementation bound together into one package. The MjSip stack has been used in research activities by Dpt. of Information Engineering at University of Parma and by DIE - University of Roma “Tor Vergata”. MjSip includes all classes and methods for creating SIP-based applications.
    4. OpenSER - OpenSER is an open source GPL project that aims to develop a robust and scalable SIP server. Spawned from FhG FOKUS SIP Express Router (SER) by two core developers and one main contributor of SER, OpenSER promotes a development strategy open for contributions.
    5. SIP Express Router - SIP Express Router (ser) is a high-performance, configurable, free SIP server. It can act as registrar, proxy or redirect server. SER features an application-server interface, presence support, SMS gateway, SIMPLE2Jabber gateway, RADIUS/syslog accounting and authorization, server status monitoring, FCP security, etc. Web-based user provisioning, serweb, available.
    6. Siproxd - Siprox is an proxy/masquerading daemon for the SIP protocol that handles registrations of SIP clients on a private IP network and performs rewriting of the SIP message bodies to make SIP connections possible via an masquerading firewall. It allows SIP clients (like kphone, linphone) to work behind an IP masquerading firewall or router.

    SIP Protocol Stacks and Libraries

    1. OpenSIPStack - The OpenSIPStack Library is an implementation of the Session Initiation Protocol as described in RFC 3261. The primary goal of the library is to provide application developers with a fully compliant interface to the SIP protocol with scalability and stability in mind. The OpenSIPStack Library has both low level interface and high level interface ideal for use in SIP Proxies, Presence Servers, Softphones and Instant Messaging clients.
    2. The GNU oSIP Library - This library aims to provide multimedia and telecom software developers an easy and powerful interface to initiate and control SIP based sessions in their applications.
    3. The eXtended osip Library - eXosip is a library that hides the complexity of using the SIP protocol for mutlimedia session establishment. This protocol is mainly to be used by VoIP telephony applications (endpoints or conference server) but might be also usefull for any application that wish to establish sessions like multiplayer games.
    4. Vovida SIP Stack - The version is not supported on Win32 platforms, although some community members have shown interest in Windows port.
    5. reSIProcate - The reSIProcate project is part of the SIPfoundry community. The project aims at building a freely available, completely standards based and complete reference implementation of a SIP stack including an easy to use application layer API. The reSIProcate stack is currently used in several commercial products and is very stable.
    6. Twisted - Twisted Matrix Laboratories is a distributed group of open-source developers working on Twisted, an event-driven networking framework written in Python and licensed under the LGPL. Twisted supports TCP, UDP, SSL/TLS, multicast, Unix sockets, a large number of protocols (including HTTP, NNTP, IMAP, SSH, IRC, FTP, and others), and much more.
    7. PJSIP - The PJSIP.ORG website is the home of PJSIP and PJMEDIA, the Open Source, high performance, small footprint SIP and media stack written in C language for building embedded/non-embedded VoIP applications. PJSIP is built on top of PJLIB, and since PJLIB is a very very portable library, basically PJSIP can run on any platforms where PJLIB are ported (including platforms where normally it would be hard to port existing     programs to, such as Symbian and some custom OSes).

    SIP Test Tools

    The following tools basically test SIP applications and devices, but each one is different in how it tests the protocols and in their focuses and additional applications:    

    1. Callflow - Callflow is a collection of awk and shell scrīpts that will capture a file that can be read by ethereal and that will produce a callflow sequence diagram. The scrīpts have been primarily tested with SIP call flows, but should work for other network traffic as well. You can view callflow.svg with the Adobe SVG plugin, or you can view index.html with any web browser. The Callflow directive is a clean little scrīpt complete with a "to-do" list that you can play with.
    2. SipBomber 0.8 - SipBomber is an invaluable sip-protocol testing tool for Linux originally developed by Metalink in 2003 for internal use. It was later released as a GPL open source product.
    3. SIP Proxy - With SIP Proxy you will have the opportunity to eavesdrop and manipulate SIP traffic. Furthermore, predefined security test cases can be executed to find weak spots in VoIP devices.
    4. sipsak - sipsak is a small command line tool for developers and administrators of Session Initiation Protocol (SIP) applications. It can be used for some simple tests on SIP applications and devices.
    5. SIPp - SIPp is a test tool / traffic generator for the SIP protocol. It includes a few basic SipStone user agent scenarios (UAC and UAS) and establishes and releases multiple calls with the INVITE and BYE methods. It can also reads custom XML scenario files describing from very simple to complex call flows. It features the dynamic display of statistics about running tests (call rate, round trip delay, and message statistics), periodic CSV statistics dumps, TCP and UDP over multiple socket or multiplexed with retransmission management and dynamically adjustable call rates.
    6. PROTOS Test-Suite: c07-sip - The purpose of this test-suite is to evaluate implementation level security and robustness of SIP implementations. The focus was set on a specific protocol data unit (PDU), namely INVITE message (a subset of SIP).
    7. Vovida.org Load Balancer - The Load Balancer is a very simple proxy that is useful in SIP-based VoIP installations where there are multiple ingress proxy servers. The Load Balancer permits pooling these servers, thereby eliminating the need to balance user demands for connectivity through a complicated provisioning algorithm. The Load Balancer adds itself to the Via header of requests to enable responses to return before being sent to orginating endpoint. This only works with SIP messages sent over UDP (User Datagram Protocol).   

    IAX Clients (User Agents)

    The open source project Asterisk (see below in PBX platforms) implements a  software based PBX (Private Branch Exchange), or a private telephone switch  that provides switching (including a full set of switching features) for an   office or campus. As an internal protocol to trunk two or more PBX servers, the IAX (Inter Asterisk Exchange) protocol was created. IAX is a lightweight   app based on UDP and bundles call signalling and voice into one data stream. This streaming makes it perfectly suited for connection-based simple firewalls.

    1. IAXComm - iaxComm is a cross-platform application for the Asterisk PBX. It was developed on aWindows XP system.
    2. Kiax - Kiax is an IAX client application which allows PC users to make ordinary VoIP calls to Asterisk servers. It aims to provide a simple and user-friendly graphical interface and desktop integration for calling, contact list, call register management and easy configuration.
    3. QtIAX - QtIAX is based on iaxclient (see below), but files were stripped for a bare bones environment.
    4. MozIAX - MozIAX is a Firefox VoIP extension, a cross platform software IAX2 phone (softphone) to be used with Asterisk.
    5. YakaSoftware - YakaSoftware is the open source code behind the YakaPhone, a simple, Skinnable IAX/IAX2 Softphone from YakaSoftware.

    IAX/PBX Library

    1. IAXClient - IAXClient is an Open Source library to implement the IAX protocol used by The Asterisk Software PBX. Although asterisk supports other VOIP protocols (including SIP, and with patches, H.323), IAX's simple, lightweight nature gives it several advantages, particularly in that it can operate easily through NAT and packet firewalls, and it is easily extensible and simple to understand.

    RTP Proxies

    RTP, or Real-time transport protocol, is the Internet-standard protocol for the transport of real-time data, including audio and video. RTP is used in virtually all voice-over-IP architectures, for videoconferencing, media-on-demand, and other applications. A thin protocol, it supports content identification, timing reconstruction, and detection of lost packets.

    1. Maxim Sobolev's RTPproxy - RTPproxy is a proxy for RTP streams that can help SER (SIP Express Router) handle NAT (Network Address Translation, defined in RFC 1631) situations, as well as proxy IP telephony between IPv4 and IPv6 networks. The code has been extensively tested on FreeBSD, Linux, MacOS and Solaris. It should be relatively easy to port it to any system which has a POSIX layer.

    RTP Protocol Stacks

    1. JRTPLIB - JRTPLIB is an object-oriented RTP library written in C++. The library offers support for the Real-time Transport Protocol (RTP), defined in RFC 3550. It makes it very easy to send and receive RTP packets and the RTCP (RTP Control Protocol) functions are handled entirely internally. The latest version of the library is 3.7.0 (January 2007).
    2. oRTP - oRTP is a Real-time Transport Protocol (RFC3550) stack under LGPL. Written in C, works under Linux (and probably any Unix) and Windows.
    3. GNU ccRTP - ccRTP is a C++ library based on GNU Common C++ which provides a high performance, flexible and extensible standards-compliant RTP stack with full RTCP support. The design and implementation of ccRTP make it suitable for high capacity servers and gateways as well as personal client applications.
    4. Vovida     RTP Stack - Vovida RTP is augmented by a control protocal (RTCP) to monitor data delivery and network statistics. Together they resolve of many of the problems a UDP network enviroment may experience, such as lost packets, jitter, and out of sequence packets.
    5. RTPlib - This library, offered by Bell Labs, is based on the most recent version of the specification, incorporating some of the newest features, including RTCP scalability algorithms.

    PBX Platforms

    1. Asterisk - Asterisk is a popular and extensible open source telephone that offers flexibility, functionality and features not available in advanced, high-end (high-cost) proprietary business systems. Asterisk is a complete IP PBX (private branch exchange) for businesses that runs on Linux, BSD, Windows and OS X and provides all of the features you would expect from a PBX and more. It has support for three-way calling, caller ID services, ADSI, IAX, SIP, H.323 (as both client and gateway), MGCP (call manager only) and SCCP/Skinny.
    2. OpenPBX.org 1.2 RC3 - This release includes the highly anticipated and robust new conference bridge application called NConference. OpenPBX.org RC2 is now generally available as a tarball that includes the ability to run on several BSDs as well as MacOS X. Both are forks of Asterisk with T.38 termination.
    3. Open Source Software PBX - Open Source PBX developed using Perl. OpenPBX.org will be stable, featureful, easy to use, and easy to deploy on a range of operating     systems.
    4. PBX4Linux - PBX4Linux is an ISDN PBX which interconnects ISDN telephones, ISDN lines, and a H.323 gateway. This is a pure software solution except for the ISDN cards and telephones, as it connects to a Linux box. The great benefit is the NT-mode that allows to connect telephones to an ISDN card.
    5. SIPxchange - An enterprise-grade SIP PBX, SIP call manager and router, and SIP Softphone based on 100% SIP and 100% open source software. Produced by Pingtel, SIPxchange product suite runs on commodity server hardware using the Linux operating system, supports a large variety of IP phones and gateways, and seamlessly interoperates with legacy components.
    6. sipX - sipX is a modular server based solution that runs on standard Linux complete with voice mail and auto-attendant. Alternatively, sipX can be used as a high performance Enterprise toll-bypass SIP router. It combines all common calling features, XML-based SIP call routing, voice mail and auto-attendant, Web-based configuration, as well as integrated management and configuration of the PBX and attached phones and gateways. sipX does not require any additional hardware as it interoperates with any SIP compliant gateway, phone or application.

    IVR Platforms

    1. GNU Bayonne - GNU Bayonne 2 was developed starting in 2005, with a special focus on SIP. GNU Bayonne is an integral part of GNU Telephony that offers free, scalable, media independent software environment for development and deployment of telephony solutions for use with current and next generation telephone networks.
    2. CT Server - A client/server library for rapid Computer Telephony (CT) application development in Perl. It uses Voicetronix hardware, and runs under Linux. Supports OpenSwitch cards for building PC PBXes.

    Voicemail Apps

    1. lintad - Linux Telephone Answering Device (lintad) is a fax and voicemail application. Lintad uses a softmodem as a soundcard attached to the phoneline to play greetings and record messages. Messages and faxes are made available to browersers via     Apache and PHP.
    2. Linux Voicemail/OpenUMS - The purpose of this project is to create an open source voicemail/unified messaging system that runs on Linux that has the ability to integrate with business telephone systems.
    3. VOCP System - VOCP is a complete messaging solution for voice modems, with voicemail, fax, email pager, DTMF command shell and Text-to-Speech support, 3 GUIs and  a web interface. Send and receive faxes and voicemail, listen to emails and     execute programs on the host.
    4. OpenVXI - The Open VXI VoiceXML interpreter is a portable open source library that interprets the VoiceXML dialog markup language. It is designed to serve as a reference for parties interested in understanding how VoiceXML markup might be executed.

    Speech Software

    1. The Festival Speech Synthesis System - Festival offers a general framework for building speech synthesis systems as well as including examples of various modules. As a whole it offers full text to speech through a number APIs: from shell level, though a Scheme command interpreter, as a C++ library, from Java, and an Emacs interface. Festival is multi-lingual (currently English (British and American), and Spanish) though English is the most advanced. The system is written in C++ and uses the Edinburgh Speech Tools Library for low level architecture and has a Scheme (SIOD) based command interpreter for control. Documentation is given in the FSF texinfo format which can generate, a printed manual, info files and HTML.
    2. OpenSALT - SALT (Speech Application Language Tags) is a lighweight markup language that integrates speech services into standard markup languages such as HTML. SALT supports the authoring of multi-modal dialogs as well as voice-only dialogs and is suitable for the development of applications across desktop and telephony platforms. SALT is defined through the efforts of the SALT Forum, of which Carnegie Mellon is a contributor. The OpenSALT project makes available a SALT 1.0 compliant open-source browser based on the open source Mozilla web browser and make use of open source Sphinx recognition and Festival synthesis software. Their first Windows release is available for download. A Linux version will follow when a fully featured Windows version is complete. They will subsequently focus on developing a version suitable for mobile devices and a version for telephony-based systems.
    3. CMU Sphinx Projects - The packages that the CMU Sphinx Group is releasing are a set of reasonably mature, world-class speech components that provide a basic level of technology to anyone interested in creating speech-using applications without the once-prohibitive initial investment cost in research and development; the same components are open to peer review by all researchers in the field, and are used for linguistic research as well.

    Fax Servers

    1. HylaFAX - HylaFAX is an enterprise-class system for sending and receiving facsimiles as well as for sending alpha-numeric pages. The software is designed around a client-server architecture. Fax modems may reside on a single machine on a network and clients can submit an outbound job from any other machine on the network. Client software is designed to be lightweight and easy to port.
    2. AstFax - AstFax provides an outgoing email to fax gateway for the Asterisk PBX package. Incoming fax to email can also be configured so your Asterisk server can act as both an outgoing and incoming fax server.

    Development Stacks

    1. OpenSS7 - OpenSS7 provides a robust and GPL'ed SS7, SIGTRAN, ISDN and VoIP stack for Linux and other UN*X operating systems.
    2. ooh323c - Objective Systems Open H.323 for C (ooh323c) is a simple H.323 protocol stack developed in C. The ASN.1 PER messaging code was developed using the ASN1C compiler using a modified version of our core run-time libraries. Additional open source components as well as code developed in-house were added to produce a functioning stack. The goal is to produce a reusable framework that contains the signaling logic to allow channels to be created and terminated for different H.323 applications. ooH323c is now included as an add-on to the Asterisk open source PBX.
    3. ++Skype Library - ++Skype library is a new, modern way to develop platform independent Skype add-on software. The ++Skype is a C++ library of thoroughly designed classes that can help you to build platform-independent add-on software. Be sure to read the documentation, as this software requires several tools and libraries not included in this article.
    4. OpenBloX™ - The OpenBloX™ framework is an Open Source set of directories and files, implementing in a whole or part of the 3GPP and 3GPP2 Diameter specifications. The package contain at minimum the Diameter base protocol as described by IETF RFC 3588 and any extensions provided to support upper layers as specified by the 3GPP specifications, such as Rx, Gx, Ro, Cx, Sh and other 3GPP defined interfaces.

    Middleware

    1. MobiCent - Mobicents is the first and only open source VoIP Platform certified for JSLEE 1.0 compliance. Mobicents brings to telecom applications a robust component model and execution environment. It compliments J2EE to enable convergence of voice, video and data in next generation intelligent applications.
    2. Ernie - Software application that integrates Web 2.0 design principals with next generation communications technologies, including VoIP, presence and web languages such as Python. LAMP developers are Ernie's primary users.
    3. SIP Thor - SIP Thor is based on P2PSIP technology that enables scalability with no single point of failure. SIP Thor is based on P2PSIP, a set of technologies that combines exiting IETF standards like SIP, DNS and ENUM with Peer-To-Peer techniques like distributed hash tables (DHT).
  • VoIP工具和资源

    2007-08-21 21:12:38

    【手机服务】
    - EQO
    - Fring.com
    - MOBIVOX
    - Nimbuzz
    - Raketu
    - Rebtel
    - Truphone
    - Zozoc
    【电话接驳业务】
    - Earth Caller
    - Gizmo Call
    - GrandCentral
    - Jaduka
    - JAJAH
    - Jangl
    - Jaxtr
    - Nonoh
    - RingCentral
    - Sitofono
    - Talkety
    - thinkingVOICE.com

    【语音邮箱】
    - CallWave
    - ConnectMeAnywhere.com
    - Pinger
    - TalkDigits

    【电话软件】
    - Octopz
    - OpenWengo
    - VePhone
    - VoIPCheap
    - VoIPDiscount
    - WengoPhone
    - Yoomba

  • J2ME

    2007-02-11 14:01:59

    MSN近期推出了新版的Mobile http://mclient.msn.com.cn/, 一下子除了windows mobile本身自带的messenger和其他第三方的im以外, 便有多了一个选择. 而且symbian和j2me的版本都有.

    飞信

    1. Mig33 - Mig33 is the best cellphone chatting application.mig33-mig33手机聊天是最好的应用. You can chat with Yahoo and MSN users through mig and can chat with other users in mig33 chatrooms.你可以聊天、雅虎和MSN用户可以通过米格其他用户mig33聊天室聊天. Also you can make cheap international calls and SMS through mig33.您还可以通过mig33便宜的国际电话和手机短信. Mig33 can be downloaded from wap.mig33.com .mig33wap.mig33.com下载.

    2. Mxit - Mxit is Jabber Client for cellphones.mxit-闲聊mxit是为手机用户. Connect to your favorite IM applications, like MSN and ICQ, all from your mobile phone.You can Visit chat rooms, play games, and access fun services.申请连接你最喜欢化生,像注释、ICQ的所有可以从你移动phone.you访问聊天室玩游戏、接入服务的乐趣. It can be downloaded from mxit.co.za/wap可以下载mxit.co.za/无线

    3. Opera Mini - Opera Mini is the revolutionary browser for almost any mobile phone.戏曲小戏迷你浏览器几乎是革命性的任何手机. Opera Mini gives you access to your favorite Web sites on your favorite phone.The webpages are compressed by the Opera servers before serving them to the Opera Mini browser so it makes browsing on cellphone upto 10 times faster.歌剧给你进入你最喜欢的小网站,你最喜欢的网页压缩phone.the由歌剧他们在职前服务器歌剧迷你手机浏览器浏览零零因此使得10倍. Opera Mini can be downloaded from mini.opera.com .小歌剧mini.opera.com下载.

    4. Litefeeds - You you can read your favourite RSS feeds on your mobile using the Litefeeds RSS reader for cellphones.litefeeds你可以看你喜欢你移动转播饲料用litefeeds转播读本电池. You need Litefeeds account before using this service.你需要使用这项服务之前litefeeds帐户. fter creating account you can install the Litefeeds RSS reader by opening http://litefeeds.com/m from your cellphone’s wap browser.你可以安装到1.78%,创造了litefeeds转播开幕http://litefeeds.com/m读者从你的手机的WAP的浏览器.

    5. Shoot & Send - Shoot and Send is Free Mobile Multimedia Messaging software.拍&送拍并送免费流动多媒体讯息软件. You can take a picture with your camera phone and send it to a Skype user, to an e-mail account, or to another mobile phone, Use your mobile phone to chat with Skype users, ecord a voice message with your mobile phone and send it to a Skype user, to an e-mail account, or to another mobile phone.拍照可以和你的照相机把它送到了Skype公司的电话用户,一个电子邮件帐户,或另有手机,用你们的手机聊天Skype公司用户淮南语音讯息,你把它送到了手机用户Skype公司,以电子邮件帐户还是另有手机一部. You can sent an invite to your cellphone from shootsend.com containing the download link.你可以从手机发出了邀请贵shootsend.com载下载连接.

    6. JBenchmark - A graphical benchmark for java phones and PDAs.jbenchmark-图形基准爪哇电话和掌上电脑. It measures the performance of Java (J2ME) enabled phones and PDAs, by running 5 small tests.它表现爪哇措施使电话和掌上电脑(J2ME)兼容,运行5小的考验.

    7. Wayfiner - The application starts up displaying a globe representing the planet on the screen of your mobile.wayfiner-启动应用展示地球行星的屏幕代表你移动. Select an area or city for a closer look.选择一个地区或城市一探究竟. European and North American maps are extremely detailed and you’re able to zoom down to street level.欧洲和北美的地图非常详细,你可以缩放到街头.

    Download to Mobile : Open wap.GetJar.com with your mobile -> Quick Download -> enter Quick Download Code 7779移动下载:公开wap.getjar.com你移动>快速登录->进入快码7779下载

    8. Flurry - FREE Mobile Email and RSS.手忙脚乱免费电子邮件和移动转播. Supports Gmail, Yahoo!, Hotmail, AOL and all POP3 and IMAP services.支持邮件、雅虎、Hotmail等,都与美国线上的IMAPPOP3和服务. Data traffic is compressed and messages are stored on your phone, saving you time and money.数据压缩、交通信息储存在您的电话,您节省时间和金钱.

    Download to Mobile : Open wap.GetJar.com with your mobile -> Quick Download -> enter Quick Download Code 4839移动下载:公开wap.getjar.com你移动>快速登录->进入快码4839下载

    9. Mobispine - FREE mobile Instant Messenger & Blog application that is easy to use and easy to share.mobispine免费移动即时信使&博客申请即使用方便、易于分享.

    Download to Mobile : Open wap.GetJar.com with your mobile -> Quick Download -> enter Quick Download Code 5178移动下载:公开wap.getjar.com你移动>快速登录->进入快码5178下载

    10. Reporo - Applications for FREE Texting, Picture Messaging, Instant Messenger, Chatrooms, News ,Sport updates.reporo-申请免费测试中,照片短信,瞬间使者,聊天室、新闻、体育更新. Connect to MSN Messenger, Yahoo, AOL, ICQ and Google.连接注释信差、雅虎、美国在线、ICQ及谷歌. Send free international SMS.送免费国际短信.

    Download to Mobile : Open wap.GetJar.com with your mobile -> Quick Download -> enter Quick Download Code 8165移动下载:公开wap.getjar.com你移动>快速登录->进入快码8165下载

  • 解决私网拨打公网问题-STUN设置

    2007-01-25 23:10:08

    知识前提:STUN 代表UDP数据包简单地穿过NAT(Simple Traversal of UDP over NAT)。这是一个协议,当一个IP电话机在NAT后面时,IP电话机可以使用这个协议检测到NAT的存在,并判断NAT的类型。一个IP电话机如果支持 STUN协议,它就可以发送一系列的STUN查询,到公共的因特网上的STUN服务器,这样就可以得到NAT上映射到话机的公网IP地址和端口。IP电话机就可以智能地修改SIP/SDP消息中的私有IP地址。这样SIP信令和RTP多媒体数据就可以成功地穿过NAT,而不需要修改NAT的任何配置。
    STUN代表了对大多数NAT的解决方法,但是不适合于对称的NAT。也就是说,绝大多数的SOHO路由器都是非对称的NAT,在这种情况下,使用STUN是成功的。但是STUN协议不能穿过对称的NAT。如果你的路由器是对称的NAT,则不要使用STUN。

    问题:公网终端正常,NAT后的终端无法看到和听到公网终端图像与声音。

    解决方法之一是使用STUN技术:
    http://bgp.potaroo.net/ietf/rfc-pdf/rfc3489.pdf
    简单来说,STUN解决的过程如下:
    1、将STUN Client放在NAT后的终端中。
    2、该终端在发送OLC之前调用STUN  Client,去连接位于公网的任一台STUN Server.
    3、STUN Server与STUN Client进行STUN Messgae交互(STUN Server将对应的RTP/RTCP经NAT转换后的地址告之STUN Client)。
    4、该终端在打开本地逻辑通道时,使用STUN Client已经发送过的地址作为RTP/RTCP地址。并且在填写OLC时将STUN Client得到的NAT转换后的地址填写到OLC报文中。比如:STUN Client使用192.168.1.4:40000与192.168.1.4:40001 与STUN Server通讯;得到的经NAT转换后的地址为:221.12.27.14:2000与221.12.27.14:2039;那么终端在打开本地的RTP/RTCP就指定为40000与40001,同时OLC中地址替换为221.12.27.14:2000与221.12.27.14:2039。
    5、这样公网的终端将会把数据发到221.12.27.14:2000与221.12.27.14:2039上,NAT会送到192.168.1.4:40000与192.168.1.4:40001上。
    在这里,提及了4种NAT类型,上面使用STUN的结果会有不同:
    ● 如果STUN Server和被叫不是同一主机,那么只有Full Cone类型的NAT才能成功。
    ● 如果STUN Server和被叫是同一主机(也就是被叫终端安装STUN Server),但STUN Server使用的端口与本地OLC的端口不同,那么Restricted Cone NAT类型的也能成功。
    ● 如果STUN Server和被叫是同一主机,而且STUN Server使用的端口与本地OLC的端口相同,那么都能成功。
    OpenH323 在其class H323EndPoint/class H323_RTP_UDP/class RTP_UDP中已经加入了STUN Client支持,你只需要调用H323EndPoint ::SetSTUNServer(…),就可以完成Client的功能。其STUN Client的代码在PWLIB中:http://cvs.sourceforge.net/viewcvs.py/openh323/pwlib/src/ptclib/pstun.cxx
    虽然OpenH323没有提供STUN Server的支持,但是找到一个成熟的STUN Server/Client并添加到OpenH323中并不是一件难事:http://sourceforge.net/projects/stun/ 是不错的选择。
    http://sourceforge.net/projects/stun/的代码放入PWLIB中编译,并相应的修改OpenH323,以支持STUN Server。

Open Toolbar