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

我的最新日志

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

    2008-2-10

    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-2-10

     继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的服务。

  • 麦肯锡:中国IT软件服务外包产业的机遇和挑战(转)

    2008-2-10

    服务的外包和离岸是全球经济发展的大势所趋。继上个世纪制造业全球大转移之后,服务外包与离岸如今已成为不可逆转的新一轮全球产业革命和产业转移趋势。随着部分发达国家的本国适龄劳动力数量持续下滑、各行业面临的竞争和利润压力与日俱增,服务外包和离岸正成为跨国企业全球布局、应对竞争并提升国际竞争力的重要手段。全球财富1000强中95%的企业已经制定了公司离岸战略。平均每周有5到10家企业在可能的离岸目的地进行实地考察。服务离岸在全球化发展中正起着日益重要的作用。麦肯锡估计:2005年,全球离岸(IT应用服务、业务流程外包、IT基础设施服务和设计研发服务)产值已达400亿美元,并将继续迅猛增长。
    同时,服务外包和离岸的新形式和新机会层出不穷,IT基础设施服务和设计研发服务将成为推动离岸继续飞速发展的新动力。随着通信成本不断降低以及电信基础设施不断改善,人员成本在IT基础设施运营中的比重不断提高,领先的跨国企业纷纷开始将IT基础设施服务在全球范围内进行离岸外包,由此节省的IT基础设施运营成本可能达到30%,节省的人力成本则最高可达60%。与此同时,设计研发服务向发展中国家进行离岸也正成为另一个新兴潮流。受离岸目的地/国低成本劳动力、人才储备、接近当地市场和生产等因素的驱动,跨国企业正在将设计研发向东欧、印度、中国等地进行转移。离岸目的地/国将在本国乃至面向全球市场的产品设计研发中发挥日益重要的作用。
    随着市场规模不断增大,众多国家已将大力发展服务外包和离岸确定为提升自身全球竞争力的重要国策,全球市场竞争颇为激烈。印度将IT离岸外包服务和BPO行业的发展定为国家重点产业战略之一,力争到2010年将IT服务行业的规模发展到600亿美元;爱尔兰在发展IT应用服务、BPO的基础上,着重发展高端设计研发服务,吸引“国际创新和投资的最佳力量”来驱动“持续转型”。值得注意的是,由于供给短缺,市场潜力远未被充分释放,潜在市场机遇相当巨大。全球服务可实现离岸的潜在市场规模达到4650亿美元,其中IT应用服务、业务流程外包、IT基础设施服务和设计研发服务分别为900亿、1700亿、850亿和1200亿美元。到2010年,总的潜在市场规模有望增长到6000亿美元,而目前仅有不到10%的服务真正实现了离岸。
    面对这样的全球趋势,中国面临着一个历史性的选择和机遇。
    首先,发展离岸外包服务既顺应了全球经济发展的趋势,又符合中国在世界经济格局中所扮演的角色。更为重要的是,服务外包的发展与中国已建立的制造业优势必将相得益彰,成为推动国民经济长期、均衡和可持续发展的双引擎。同时,我们看到一些跨国企业正在考虑如何通过将其制造中心和服务中心进行整合从而实现更大的协同效应。在这一过程中,制造集中地既可以延伸成为服务中心,而服务集中地亦可延伸成为制造中心。这意味着如果缺乏向服务的积极、主动的延伸,中国的全球制造业领先地位亦可能会受到威胁,而如果能够积极主动地通过发展服务外包,培养人才和自主创新能力,则将引领中国经济向产业链上高附加值的部分进行拓展,进一步巩固中国在全球制造业的领先地位,持续提升中国的全球竞争力。
    其次,发展服务外包将大力促进国民经济的可持续发展以及和谐社会的构建。假设中国经济保持9%的年增长率,到2010年,服务外包产业预计可为中国贡献7%的GDP增长和10%的服务业GDP增长;到2015年这个数字有望分别达到14%和15%。这将有助于帮助中国实现制造型经济和服务型经济并重的健康持续的经济发展目标。更值得注意的是,通过离岸服务外包所获得的GDP增长是绿色的增长,发达国家经验显示服务业的单位能耗仅相当于工业的20%左右。基于国际经验,预计到2010年服务外包可创造大约100万直接和310万间接的稳定、高质量就业机会,为构建和谐社会做出重要贡献。
    最后,发展离岸外包服务将推动国民经济中关键部门和产业的转型,并通过人才、知识和基础设施的聚集,创造一个自主创新的良性循环。通过引进国际领先的服务外包供应商和客户,并开展积极合作, 能够帮助提升中国企业的技术、管理和自主创新的能力;同时培养一批高素质的劳动力和人才以持续推动产业的创新和科技进步。
    综上所述,中国必须尽早树立在全球离岸外包市场内的重要地位。这一基本发展思路已被明确写入《中华人民共和国国民经济和社会发展第十一个五年规划纲要》。近年来,中国在传统服务外包领域已取得一定成绩:软件出口快速发展,一批本地领先的供应商日渐成熟,具有良好基础设施的软件园和科技园不断出现。然而,在众多国家已将大力发展服务外包和离岸作为重要国策、全球市场竞争颇为激烈的背景下,中国尚未确立发展服务外包和离岸的
    重要战略位置。一些全球机构的统计显示:目前中国在全球市场中所占的份额不到10%;与国际领先外包地相比,中国企业在规模、交付能力、品牌、关键客户资源等方面均存在较大差距。
    此时此刻,中国所需要的是“立足独有优势,把握新兴机遇,快速实现跨越式发展”的总体发展思路和指导方针。
    中国在初级人才、基础设施、成本、国内市场、外商投资、与北亚的语言和文化近似性等方面具备得天独厚的优势。以基础设施为例,中国拥有世界级的电信基础设施,可实现99.98%的网络连接率,能够为主要软件基地提供稳定、不间断的双电源供电。大约150个民用机场连接大部分一级和二级城市,超过30个城市拥有国际机场以及国际直达航班,与其他国家相比具有明显的优势。中国拥有超过200万日语、韩语人才,在与北亚的语言和文化近似性方面具有其他国家难以比拟的优势。
    发挥上述独有优势不但有助于中国在较为成熟的服务外包领域赢得应有份额,还能帮助中国在新兴领域内取得先机、把握历史机遇。具体地说,中国应把握五大机遇:
    1.引领北亚市场、开拓欧美市场,发展IT应用服务及业务流程外包
    2.迅速进入IT基础设施服务离岸外包领域
    3.充分利用全球制造业设计研发向发展中国家转移的机遇
    4.促进独立软件商增加在中国的研发投入
    5.鼓励中国大型企业外包非核心IT业务
    比照国际上的关键成功因素及最佳做法,要成功把握“五大机遇”实现跨越式发展,中国还面临人才瓶颈、供应商能力、国际客户资源、中国企业的传统运营模式、缺乏强有力的品牌以及法规和政策支持等六大挑战。因此,若要实现服务外包产业跨越式发展,中国必须采取一系列强有力的措施,突破这些发展瓶颈。具体来讲,中国需要在以下六个方面有所行动:
    1)在政府各层面迅速达成共识,提高对服务外包行业的重要性认识:中国政府近年来对发展服务外包开始高度重视,第十届全国人大四次表决通过的《中国国民经济和社会发展第十一五年规划的纲要》明确提出“建设若干服务业外包基础,有序承接国际服务业转移”;国务院总理温家宝在十届人大五次会议所作政府工作报告中指出“大力承接国际服务外包,提高服务业发展水平”。中国政府需要保持对服务外包的高度重视,在中央政府层面,进一步明确服务外包产业做为国家提升全球竞争力的重点,设定明确的产业发展目标(例如在出口、就业方面的目标)和产业规划;在全国性的重要媒体上宣传行业的战略意义与重要性;由国家领导人从国家战略的高度在多种场合对服务外包进行大力宣传,并将服务外包的发展做为对外双边和多边经贸关系的重要组成部分。在地方政府层面,根据各地的现实条件、比较优势和整体经济发展布局,制定当地的服务外包产业发展规划。中央政府应对各地的规划制定进行切实的指导和协调,以确保国家层面的规划能够落地,同时各地实现优势互补,避免重复建设。
    2)强化推动服务外包产业发展的基础工作:参照国际成功经验,设立在行业内具有领导力和影响力的服务外包行业协会,与各级政府及企业共同致力产业发展,负责如为政府制定行业政策提供建议,为企业引入全球最佳实践提升运营和交付能力,进行国际市场的营销与品牌建设等工作;同时政府应协调相关部门或者中介机构建立和完善服务外包统计体系、统一统计口径、出台针对服务外包的统计制度和管理程序。在近期,宜成立跨部门的政府“专项工作组”,整体协调推进服务外包发展的近期工作,加强各部门的沟通及协调。
    3)促进国际合作,帮助本土服务外包企业做大做强:鼓励以获取国际客户资源、树立品牌形象、培养专业技能为目标与领先的跨国公司建立合资或进行其他方式的合作,或强强联合充分利用互补优势。在短期内,可主要考虑以中国的国内外包市场潜力为吸引,以中国对外资吸引的整体优势为依托,吸引全球领先的外包服务企业(特别是在欧美等中国目前仍处于明显弱势的市场中具有强劲能力的企业)以合资或战略合作等多种形式将其目前在全球其他地区开展的外包服务转移至中国。同时,支持有条件的本土服务外包领先企业探索走出国门,对国外公司或者客户的内部服务部门进行并购。与行业协会、领先的全球企业或咨询机构合作,为并购提供专业的咨询和建议。帮助企业建立良好的融资渠道,建立贷款、信用担保快捷通道,给企业提供更方便的资金支持。
    4)鼓励国内外包示范工程、推动IT运营模式的转变和创新:从各地方政府入手,率先进行服务外包,建立1-2个示范工程并进行大力宣传;鼓励3-5家大型中国企业(如航空、电信、银行等)进行IT服务的外包,或与领先的国际服务外包商通过合资或合作的方式进入IT服务领域。
    5)“请进来,走出去”,打造“中国外包”的国际品牌:制定中国的总体外包品牌战略,明确中国在服务外包领域的价值定位,制定针对全球外包客户和服务提供商的宣传要点,出台具体举措提升对中国在服务外包方面的优势、能力及优惠政策的了解。建立国家级服务外包的权威性论坛,形成执行品牌战略的重要平台,树立中国服务外包业的良好形象,实现与全球外包客户和服务提供商的定期交流。在驻外使领馆中设立专门负责宣传、接洽服务外包事宜的人员或部门。同时,与目前在中国已发包的全球知名跨国企业合作,打造“具有全球号召力”的标志性案例,宣传它们在中国实施外包的成功经验。协调各地服务外包宣传工作,既保证与整体品牌战略一致,又帮助各地强调其鲜明的地方独特优势。
    6)建立公私合作的人才培训机制,加强服务外包人才的培养:涵盖一批高等院校、中等职业技术学校,设计制定和国际接轨的课程体系;努力开发远程教育(e-learning)课程以及制定教员的培养计划;学习国外先进的服务外包人才培训模式,建立全国性服务外包人才认证体系(如包括语言、专业技能、行业知识、项目管理能力等);鼓励公私合作机制,政府提供一定的教育资金并确定政策导向,教育机构(提供培训场所、讲师)、行业协会和企业(提供培训内容、讲师培训等)共同参与;同时鼓励成立第三方服务外包培训机构,面向社会在职人员提供服务外包职业技能培训。
    与此同时,政府的相关部门应在平衡长短期目标的基础上,灵活地出台相关政策,打造有利于服务外包发展的产业环境。具体的措施包括:通过加大宣传力度,及适时宣布法规政策的实施时间表,消除国际上对中国外包,特别是在知识产权保护以及数据隐私方面的顾虑;通过设立一些和国际完全接轨的“特区”,应用国际上普遍接受的法律法规,达到快速实施某些政策的效果;扩展目前仅限于软件公司的优惠政策(例如税收优惠),使之惠及服务外包行业以及相关的配套设施业务; 针对IT基础设施服务,明确其服务外包的行业特色,考虑适当放宽目前使用的针对电信增值服务的管制政策。
    如能有效把握“五大机遇”,积极应对“六大挑战”,中国将有望迅速成为“全球服务外包行业的巨人”,力争在2010年实现收入180亿美元,2015年实现收入560亿美元。在此基础上,中国应力争成为四个“全球中心”-- 北亚综合离岸中心、全球IT基础设施服务管理中心、全球制造研发中心和全球软件研发中心 ;并实现两个“国际领先”,打造一个国际领先的“中国外包”品牌并发展二—三家国际领先的大型服务外包供应商。
    在此次分析研究工作中,我们访谈了政府各部委,如商务部服务贸易司、科技部火炬中心;领先的服务提供商,如博彦科技、文思创新、软通动力、华信、海辉等;领先的服务外包园区如大连软件园等;参考了印度NASSCOM报告及多方研究报告。
  • 国内公司如何发展嵌入式软件系统(转)

    2008-2-10

    嵌入式操作系统和应用软件的开发日益受到业界的重视,北京单片机联谊会因此组织了以 ”嵌入式操作系统及嵌入式应用软件设计”为主题的研讨会,来自企业和高校的大约30人参加了会议。以下是这次会议部分发言摘要:
    何小庆(北京泰克麦软件技术公司总经理):
        嵌入式实时操作系统(RTOS)行业竞争是很激烈的,几年前,公司的数量曾达到上百家,但最终这些公司会通过合并,收购而长大,最近公司的数量呈递减的趋势,规模较小的公司会集中于开发用于单片机或SOC的小的RTOS系统。另外 也出现了一些免费的RTOS 如 嵌入式Linux.
        国内嵌入式软件的使用者有从众心理,为了保险,不出错,都去用别人用过的产品 ,这样不利于软件业的成长。嵌入式软件不同于PC软件,已经不可能出现一家垄断的的情况,实际上选择RTOS的主要因素应该是由应用决定。
        在国内缺少介绍嵌入式软件的普及性书籍,也缺少嵌人式程序,RTOS编写方面的书籍,需要通过普及来促进技术人员对RTOS的了解,就不会发生一轰而上的现象,普及也会促进市场的发展。有了市场,才会有适应市场的产品,
        嵌入式软件公司属于软件服务业,因为它还 远未达到相当的规模和客户数量,无论是这个行业的开发商,还是代理商,都应该正视这个问题。比如在中国要自主开发和销售RTOS,目前困难还很多,主要的薄弱处有两点:第一是同处理器设计生产厂家的合作关系,因为操作系统是要直接与芯片交互的,所以得到处理器设计生产厂家的支持和深入的技术资料是重要的,目前嵌入式处理器设计的核心技术被北美和欧洲掌握,对中国企业不利。第二,RTOS 外围的软件组件有许多是非标准或正在形成标准, 如通信协议,我们要及早加入世界相关组织,否则是很难拿到协议资料和解释,而懂得行业标准是嵌入式软件开发所必需的,否则你开发出的软件就无法与其他设备互连。

    吕京建(中国单片机公共实验室主任)
        我们开发嵌入式软件应多汲取国外的经验。开发嵌入式软件需要专业化的环境和专业化的规范。在Philips,销售员(Technical Sales)、设计员(Designer)、程序员(Programmer)和测试员(Testing)等8个人就是一个软件工厂,他们的工作理念是:”认真写文档、写注释,因为更多的人在读,而不是在写。”认真书写文档已成为了这里的规范。专业的工作环境和专业化的设备使他们在两周内就可完成我们用半年才能完成的软件开发工作。他们所做的一般只是将已有的软件进行拼接即可。在Philips看来,基于8位以上的MCU一定要使用RTOS, 基本工具平台包括CMX的RTOS、Nohau的实时在线仿真器、Tasking或Keil的C编译器、嵌入式软件(中间件)等。我们应该借鉴这种专业化的、工厂化的软件设计方法,避免因一个设计人员辞职,整个开发计划可能因此终止的局面。嵌入式软件工业也要向建筑和机械工业学习,只要有图纸,就可以进行加工。嵌入式软件向工业化发展,RTOS就象现代机械工业的立视图一样是最基本的,五年前有很多人还对C语言是否适用于8位单片机表示怀疑,我认为,RTOS就象今天的嵌入式C语言普遍用于单片机一样,今后会普遍用于各种嵌入式系统之中。

    熊运鸿(华力同创公司副总经理):
        软件开发的思想和技术手段是否先进,直接影响到软件开发的效率,而且造成的差别是巨大的。
        在嵌入式软件领域应该努力推广软件开发自动化技术,或更准确地讲,是推广嵌入式软件开发的”四化技术:可视化、工程化、自动化、团队化”。
        ”可视化”:软件开发过程中,要尽量减少文本方式编程的工作量,而代之以更为直观的图形化软件编程方式。我们提倡的图形化软件开发是以UML(统一建模语言)为基础。它包括需求的捕捉与分析,软件的模块分解和静态结构,以及动态行为描述等,UML代表了软件开发图形化技术的方向。
        ”工程化”:软件开发的阶段包含需求分析、设计代码实现和测试等不同的活动,应该使软件开发工作每前进一步都包含上面的四种活动,并强调设计和对设计的验证,只有好的设计才能导致好的软件。推荐嵌入式软件开发的过程应遵从迭代式的开发流程。
        ”自动化”:经过验证和优化的设计应该能够自动生成优秀的程序和文档,这样,会成倍地提高软件开发的效率。
        ”团队化”:随着软件规模的扩大,嵌入式软件的开发早已不是单个人的行为,而是一个团队的行为。我们引入的美国I-Lagix的Rhapsody软件工具是专门为嵌入式软件开发设计的UML工具,为实现上述”四化”提供了一种支撑平台。
        目前国内高校在嵌入式软件方面的教育是不够,特别是关于UML、软件工程等教育更是不够,关于嵌入式软件开发的软件工程方面的学术研究似乎也是空白。希望有关的专家能呼吁一下,在高校教育的课程设置上以及相关研究上都应该有所加强。这对加强中国在嵌入式软件领域的竞争力无疑是有益处的。

    王龙江(河北大学计算机学院教师):
        我们的学术活动应紧密结合市场才能有强大的生命力,才能有大的发展空间.即然要紧密结合市场,就不仅只讨论学术问题,也应讨论注意技术应用于产品的方法、平台、环境等问题.如技术很好但使用平台和开发环境很差,在开发中很难使用,一样得不到市场的认可和承认。因为开发嵌入式系统和产品是一个系统工程,包括技术、应用平台在内的开发环境在设计过程中都是非常重要的。要使产品开发成功就得每一项技术、每一环节、每一个环境、甚至每一步都不能出问题,否则都将导致产品的开发失败。我们不仅要提供好的技术同时也应提供好的开发环境。因开发环境同技术在走向市场的过程中同样重要的,这一点应引起我们学术界的高度重视。

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

    2008-2-10

    第一部分 中国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-2-10

      一直没空仔细研究下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-1-24

    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.