| 统计 |  
blog名称:人在旅途 日志总数:175 评论数量:505 留言数量:13 访问次数:1678233 建立时间:2005年12月7日 |   
 
生命是过客,人在旅途。奶奶是信基督教的,没啥文化,却养育了四子二女,还带过九个孙辈。老人家对生命的看法就是“人都是客人,迟早要回去的。”就以《人在旅途》来纪念她。 
  
  
 
| « | November 2025 | » |  | 日 | 一 | 二 | 三 | 四 | 五 | 六 |   |  |  |  |  |  | 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |  |  |  |  |  |  |  |  
  |   
| 公告 |  
  本人上传的源程序中可能引用或使用了第三方的库或程序,也可能是修改了第三方的例程甚至是源程序.所以本人上传的源程序禁止在以单纯学习为目的的任何以外场合使用,不然如果引起任何版权问题,本人不负任何责任.  |    |   
   
 
  | 
      本站首页    管理页面    写新日志    退出 
调整中... 
 [SIP技术]mjSip学习笔记 |  
人在旅途 发表于 2006/3/13 15:38:48  |    
1.URL:http://www.mjsip.org/
  2.它也是用JAVA编写的,唯一要求的外部库是客户端使用的JMF(只要安装了JMF就可以了,编译和执行都不用特殊处理).它比SUN的JAIN的STACK简单,而且新,上次RELEASE估计在2005年十月份,所对应的SIP功能也比JAIN多,包括支持REFER等消息格式.它也提供源程序,源程序结构比JAIN简单多了,三个部分:包括SIP的STACK和SIP的SERVER和SIP的客户端.它也有BIN的下载,服务器和客户端配置都很简单,基本上看着配置文件内部说明就可以了.从我看到该网站到学习下栽编译测试和分析LOG基本上不用一天工作时间就完成了.
3.不过它的MAKE文件是GNU的不是ANT的,对NETBEANS来说使用不便,不过由于它结构简单,我很方便的用NETBEANS5.0生成了三个PRJ(STACK,SERVER,UA),再从源程序中拷贝JAVA文件和配置文件到这三个PRJ中,很方便地就再编译和执行成功了.
这三个NETBEANS5.0的PRJ源程序和项目文件在这里:500)this.width=500'>MjSIP.rar(只用于学习,版权问题盖不负责,请去http://www.mjsip.org/查询).
4.它的SERVER缺省运行在STATELESS中,当然也可是STATEFUL的.
5.和JAIN的SAMPLE一样,大概是JMF的缘故它的UA在通话中也有很大的延迟,大约一秒多吧.
6.可惜没有商业开发的免费许可(要购买).
7.测试了下,一次INITE对话大概要用0.2秒多点时间,其他简单的TRANSACTION只要用0.1妙左右.
8.2006年4月13日,发现各致命的错误:
   当INVITE或REGISTER等消息因为认证(407,401)而被打回后,再加入了认证HEADER
再送时,消息的BRANCH值仍然和第一次的一样.这样一来就和第一次同一个TRANSACTION了(尽管程序是NEW了个新TRANSACTION,但它是用上次消息经过加工后NEW的,所以BRANCH值仍然是上次旧的),而RFC要求是两个不同的TRANSACTION,这样一来服务器就可能因为新消息仍然属于旧TRANSACTION而拒绝响应.
   我在ExtendedInviteDialog.onTransFailureResponse中把旧消息的BRANCH值更新了下(在BaseMessage.refreshBranch()中增加了更新函数),测试了下INVITE或REGISTER的情况,正常.
  |  
  阅读全文(70912) | 回复(52) | 编辑 | 精华 |   
| 回复:mjSip学习笔记 |  
| 
 fchenscut(游客)发表评论于2006/3/28 19:04:29  |     原来在同一台电脑上运行两个CommandLineUA是要指明端口的才可以连接的.
  |  
  个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |   
| 回复:mjSip学习笔记 |  
| 
 feige(游客)发表评论于2006/3/28 17:27:46  |    不好意思再次打扰拉,我UA联系对方,对方的电话铃可以响,但就是无法听到双方的声音。每次都输出JMFAudioLauncher: launching JMF-Audio...streams is [Lcom.sun.media.multiplexer.RawBufferMux$RawBufferSourceStream;@7be8c2 : 1sink: setOutputLocator rtp://192.168.68.16:13596/audio/1DataSink createdDest= rtp://192.168.68.16:13596/audio/1 , RTPDataSink openedStart sendingTrying to realize the player然后就停在这啦,看了他的Log后也不太清楚:SipProvider-5060: received new SIP messageSipProvider-5060: DEBUG: transaction-id: 076936213286@192.168.68.13-1-INVITE-192.168.68.13:5060-z9hG4bK33916SipProvider-5060: message passed to transaction: 076936213286@192.168.68.13-1-INVITE-192.168.68.13:5060-z9hG4bK33916TransactionClient#2: changed transaction state: T_TerminatedSipProvider-5060: removing SipProviderListener: 076936213286@192.168.68.13-1-INVITE-192.168.68.13:5060-z9hG4bK33916SipProvider-5060: 1 listeners: 076936213286@192.168.68.13-z9hG4bK87252771-null, ExtendedInviteDialog#1: inside onTransSuccessResponse(076936213286@192.168.68.13-1-INVITE-192.168.68.13:5060-z9hG4bK33916,msg)ExtendedInviteDialog#1: inside onTransSuccessResponse(tc,msg)ExtendedInviteDialog#1: changed dialog state: D_CALLSipProvider-5060: removing SipProviderListener: 076936213286@192.168.68.13-z9hG4bK87252771-nullSipProvider-5060: 0 listeners: ExtendedInviteDialog#1: new dialog id: 076936213286@192.168.68.13-z9hG4bK87252771-as6b8f728dSipProvider-5060: adding SipProviderListener: 076936213286@192.168.68.13-z9hG4bK87252771-as6b8f728dSipProvider-5060: 1 listeners: 076936213286@192.168.68.13-z9hG4bK87252771-as6b8f728d, AckTransactionClient#3: id: 076936213286@192.168.68.13-1-INVITE-192.168.68.13:5060-z9hG4bK92778AckTransactionClient#3: createdAckTransactionClient#3: startSipProvider-5060: using transport udpSipProvider-5060: Resolving host address '192.168.68.16'SipProvider-5060: Sending message to udp:192.168.68.16:5060上面是他的部分log其实我的目的是想利用MJSIP提供的电话转接功能我之前用Jain-Sip-Applet-Phone已经实现了Phone to Pc 和Pc to Phone但 Refer功能做不出来,我按照SIP中对Refer的定义写了Refer,但每次执行完毕后refer-by一方已经收到了Accepted信息,但refer-to一方死活就是没有任何反应,我感觉Accepted好像是VOIPServer发送过来的,不知搂主有没有这方面的经验,还望给予帮忙,先谢谢啦
以下为blog主人的回复:
 这位朋友,抱歉没空细看的的LOG,不过我曾经把关于声音的选项全打开或者仅打开第一个enable选项,然后在两台电脑这间甚至和另一个HARDPHONE之间通话就没问题了.也许楼上的朋友的回复对你有帮助,我在语音方面也时常碰到问题,好在我的目的象你一样不是语音而是SIP消息,我把MjSIP的程序改了下(新程序MjSIP_REFER.rar)在UA处实现了Unattended-Refer功能,测试了下成功了,希望对你有帮助(请注意,我在MjSIP的SERVER环境测试后,为了进行和其他SERVER和HARDPHONE的测试,我对UA程序继续尽心了修改,比如增加了ALLOW头,对NOTIFY的响应顺序的更改...,这些修改应该没啥坏影响,但也要预防万一.),顺便提一下我测试的时候,作为REFER的发起者UA是DISABLE了语音功能的.还有后来我在其他SIP的SERVER测试REFER功能时也没成功,原因有两个,一是某些HARDPHONE不支持Unattended-Refer功能,当被REFER者象第三方发送INVITE消息后收到RING而不是OK后,它就测出当前的REFER是Unattended-Refer而不是Attended-Refer,于是它就终止执行了.第二个是因为某些SIP的SERVER会代理REFER命令,把REFER命令转化为很多INVITE命令,这大概是为了兼容一起版本的UA吧.
  |  
| 个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |   
| 回复:mjSip学习笔记 |  
| 
 fchenscut(游客)发表评论于2006/3/28 16:10:25  |    谢谢blog主人的回复.我问过导师了,他几乎也是这样说的.
不过我还有个问题.我想先测试一下是否可以传输简单的消息,使用了命令行界面的那个程序,在一台电脑上运行两个CommanlineUA,但是两个CommanlineUA都不能检测出对方的存在,所以没有能够通讯.
您可以给我什么帮助吗?
 
以下引用fchenscut(游客)在2006-3-28 11:57:16的评论:
请问可以在单机上面尝试连接两个ua的吗?我现在不行.我很难找到两台电脑来测试.
以下为blog主人的回复:
 只要你有单片机端的SIP的UA程序就可以,MjSIP不可以吧,它是JAVA程序.当然现在手机上也能运行JAVA程序了,也许可以吧,不过我想很难吧.
  |  
| 个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |   
| 回复:mjSip学习笔记 |  
| 
 fchenscut(游客)发表评论于2006/3/28 11:57:16  |    
很抱歉,下面那条打错字了.
请问可以在单机上面尝试连接两个ua的吗?我现在不行.
我很难找到两台电脑来测试.
以下为blog主人的回复:
 只要你有单片机端的SIP的UA程序就可以,MjSIP不可以吧,它是JAVA程序.当然现在手机上也能运行JAVA程序了,也许可以吧,不过我想很难吧.
  |  
| 个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |   
| 回复:mjSip学习笔记 |  
| 
 acoria(游客)发表评论于2006/3/24 10:51:53  |    谢谢
我现在正在学JAVA,但是刚开始不久,总是出很多问题,而且现在上网还极不方便......
  |  
| 个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |   
| 回复:mjSip学习笔记 |  
| 
 feige(游客)发表评论于2006/3/23 12:21:10  |    请问,我用UA打电话到一个IPPhoe,为何听不到声音我的配置如下:#        MjSip UA configuration file# ___________________________________________#via_addr=192.168.68.13host_port=4000transport_protocols=udpoutbound_proxy=192.168.68.16:5060from_url="2223" <sip:2223@192.168.68.16>username=2223realm=192.168.68.16passwd=debug_level=8log_path=logmax_logsize=2000contacts_file=config/contacts.lstdo_register=yes#do_unregister=yes#do_unregister_all=yeskeepalive_time=8000#call_to=sip:192.168.68.16:5060  #accept_time=0#hangup_time=20#redirect_to=sip:192.168.68.16:5060#no_offer=yes#transfer_to=sip:192.168.68.16:5060#transfer_time=10#re_invite_time=5#recv_only=yes#send_only=yes#send_tone=yes#send_file=yes audio=yes #audio_port=13333 #audio_avp=0 audio_codec=gsm #audio_sample_rate=4000   #audio_sample_size=2 #audio_frame_size=500#video=yes#video_port=3002#video_avp=101 use_jmf=yes#use_rat=yes#use_vic=yes#bin_rat="c:\program files\mbone\rat"#bin_vic="c:\program files\mbone\vic"#bin_rat=rat#bin_vic=vic
以下为blog主人的回复:
 如果UA进入了CALL状态,可能是RTP流没有建立起来,可在标准输出查看有没有AUDIO建立的LOG,再就是去看看MESSAGE的LOG中的INVITE消息和OK响应中的SDP的部分,看看UA和IPPHONE所要求的RTP参数是否匹配.
如果UA没有进入了CALL状态,可看看MESSAGE的LOG为啥没建立CALL.
另外我用这个UA的经验是它只在UA启动后第一个CALL中能进行语音交流,第二次CALL开始就两边都没声音了,建议再从新启动UA.
耳几和PHONE的设置和插头都设对了吗?
试试把AUDIO的设置全放开?
  |  
| 个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |   
| 回复:mjSip学习笔记 |  
| 
 acoria(游客)发表评论于2006/3/22 16:04:23  |     
请问你最后运行的是ua.jar那个文件吗,是不是要先把JAR文件创建为可执行文件?
谢谢
以下为blog主人的回复:
 java程序不需要变成可执行文件就可执行,用JAVA.EXE.当然也可变成可执行文件,不过那是要TOOLS的,而且都是不免费的.
同学,建议你先学JAVA.
  |  
| 个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |   
| 回复:mjSip学习笔记 |  
| 
 fchenscut(游客)发表评论于2006/3/20 11:54:39  |    
我未作任何修改,用netbean来编译运行成功,谢谢提供者.
谁要尝试的,请将jmf要安装好哦.
 
以下为blog主人的回复:
另外要注意为了在NETBEANS下运行,我还把CONFIG和LOG搬了地方;还有生成JAR的名字也被改了,和原来的不一样了. 
  |  
| 个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |   
| 回复:mjSip学习笔记 |  
| 
 acoria(游客)发表评论于2006/3/20 10:51:25  |    
你好,问个基础问题,编译和执行MJSIP需要安装的程序是不是一共有:sdk               eclipse或者netbean               tomcat(这个是必须的吗?)               数据库如mysql等需要吗?
另外,安装了eclipse还需要安装ant吗,eclipse里面是不是自带ant的?
多谢!
以下为blog主人的回复:
 我是在JDK1.5和NETBEANS5.0下运行的,不用tomcat,mysql,但要装JMF,NETBEANS5.0自带ant,eclipse没有试过.
  |  
| 个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |   
| 回复:mjSip学习笔记 |  
| 
 acoria(游客)发表评论于2006/3/17 9:03:42  |    非常感谢!
但我现在还是觉得找不到方向,想不出来以哪种途径在SIP PHONE基础上添加一点security功能......
  |  
| 个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |   
  |