<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="http://feeds.qzone.qq.com/rss.xsl" version="1.0"?>
<rss version="2.0" xmlns:qz="http://qzone.qq.com">
<channel>
<title><![CDATA[飞鱼]]></title>
<description><![CDATA[LOVE faye and 薇宁]]></description>
<link>http://571350.qzone.qq.com</link>
<lastBuildDate>Tue, 24 Nov 2009 14:55:59 GMT</lastBuildDate>
<generator>Qzone</generator>
<language>zh-cn</language>
<copyright>Copyright (C), 2005-2008, Tencent Tech. Co., Ltd.</copyright>
<pubDate>Thu, 29 Oct 2009 07:41:30 GMT</pubDate>

<item>
<title><![CDATA[语音编码的带宽计算]]></title>
<link>http://571350.qzone.qq.com/blog/1256802090</link>
<description><![CDATA[<br>语音编码的带宽计算<br><span style="font-weight:bold"><wbr /></span><wbr /><span style="font-family:'Times';line-height:1.8em;">VOIP Bandwidth consumption naturally depends on the codec used.  <br>VOIP</span><wbr />消耗的带宽一般取决于所使用的语音编码<span style="font-family:'Times';line-height:1.8em;">.<br><br>When calculating bandwidth, one can't assume that every channel is used all the time. Normal conversation includes a lot of silence, which often means no packets are sent at all.So even if one voice call sets up two 64 Kbit RTP streams over UDP over IP over Ethernet (which adds overhead), the full bandwidth is not used at all times.  <br></span><wbr />计算带宽时<span style="font-family:'Times';line-height:1.8em;">,</span><wbr />不能假设每一个通道都处于使用状态<span style="font-family:'Times';line-height:1.8em;">.</span><wbr />正常的通话过程包括一系列的静音<span style="font-family:'Times';line-height:1.8em;">,</span><wbr />也就意味着并不是一直都有包在传送<span style="font-family:'Times';line-height:1.8em;">.</span><wbr />所以一个语音呼叫建立两个经过<span style="font-family:'Times';line-height:1.8em;">UDP,IP</span><wbr />和以太网的<span style="font-family:'Times';line-height:1.8em;">64Kbit</span><wbr />的<span style="font-family:'Times';line-height:1.8em;">RTP</span><wbr />流<span style="font-family:'Times';line-height:1.8em;">(</span><wbr />总开销<span style="font-family:'Times';line-height:1.8em;">),</span><wbr />全部带宽并末一直被使用<span style="font-family:'Times';line-height:1.8em;">.<br><br>A codec that sends a 64kb stream results in a much larger IP network stream. The main cause of the extra bandwidth usage is IP and UDP headers. VoIP sends small packets and so, many times, the headers are actually much larger than the data part of the packet.  <br></span><wbr />一个传送<span style="font-family:'Times';line-height:1.8em;">64kb</span><wbr />流的语音编码很大程度上都是<span style="font-family:'Times';line-height:1.8em;">IP</span><wbr />网络流的结果<span style="font-family:'Times';line-height:1.8em;">.</span><wbr />额外的带宽使用主要是<span style="font-family:'Times';line-height:1.8em;">IP</span><wbr />或<span style="font-family:'Times';line-height:1.8em;">UDP</span><wbr />头的增加<span style="font-family:'Times';line-height:1.8em;">.VOIP</span><wbr />只传送少量的包<span style="font-family:'Times';line-height:1.8em;">,</span><wbr />很多时候<span style="font-family:'Times';line-height:1.8em;">,</span><wbr />实际上是包头远远大于包数据<span style="font-family:'Times';line-height:1.8em;">.<br>Codec      BR      NEB<br>G.711    64 Kbps 87.2 Kbps<br>G.729     8 Kbps 31.2 Kbps<br>G.723.1 6.4 Kbps 21.9 Kbps<br>G.723.1 5.3 Kbps 20.8 Kbps<br>G.726    32 Kbps 55.2 Kbps<br>G.726    24 Kbps 47.2 Kbps<br>G.728    16 Kbps 31.5 Kbps<br>iLBC     15 Kbps 27.7 Kbps  <br>BR = Bit rate<br>NEB = Nominal Ethernet Bandwidth (one direction) <br></span><wbr />根据我的使用经验，<span style="font-family:'Times';line-height:1.8em;">8K</span><wbr />的<span style="font-family:'Times';line-height:1.8em;">G.729</span><wbr />加上<span style="font-family:'Times';line-height:1.8em;">IP</span><wbr />封装后达到<span style="font-family:'Times';line-height:1.8em;">32K,</span><wbr />为了防封杀，还有的用户使用<span style="font-family:'Times';line-height:1.8em;">IP Sec</span><wbr />设备将语音做成<span style="font-family:'Times';line-height:1.8em;">VPN</span><wbr />，这样<span style="font-family:'Times';line-height:1.8em;">G.729</span><wbr />加上<span style="font-family:'Times';line-height:1.8em;">IP</span><wbr />封装，再加上<span style="font-family:'Times';line-height:1.8em;">VPN</span><wbr />会达到<span style="font-family:'Times';line-height:1.8em;">60</span><wbr />多<span style="font-family:'Times';line-height:1.8em;">K</span><wbr />。<br>注<span style="font-family:'Times';line-height:1.8em;">:</span><wbr />头三段中文是我自己译过来的<span style="font-family:'Times';line-height:1.8em;">,</span><wbr />所以读起来并不怎么准确<span style="font-family:'Times';line-height:1.8em;">,</span><wbr />而且会感觉别扭<span style="font-family:'Times';line-height:1.8em;">,</span><wbr />呵呵<span style="font-family:'Times';line-height:1.8em;">.</span><wbr />多多包涵了<span style="font-family:'Times';line-height:1.8em;">.</span><wbr />有兴趣的朋友可以再译一次<span style="font-family:'Times';line-height:1.8em;">.</span><wbr />以供借鉴<span style="font-family:'Times';line-height:1.8em;">.</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;"> </span><wbr /><br>集群通软交换电话<span style="font-family:'Times';line-height:1.8em;">-</span><wbr />所需带宽说明<span style="font-family:'Times';line-height:1.8em;"> </span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">VoIP</span><wbr />所需要的带宽，通常取决于它所使用的<span style="font-family:'Times';line-height:1.8em;">codec</span><wbr />编码方法。在计算带宽时，不能假定每个通道总是在使用之中。通常的会话过程中包括大量的静默时段，就是不发送任何数据包。<span style="font-family:'Times';line-height:1.8em;"> <br></span><wbr />一个会话建立了两个<span style="font-family:'Times';line-height:1.8em;">64kbps</span><wbr />的<span style="font-family:'Times';line-height:1.8em;">RTP</span><wbr />流，在<span style="font-family:'Times';line-height:1.8em;">UDP/IP/Ethernet</span><wbr />上<span style="font-family:'Times';line-height:1.8em;">,</span><wbr />并非在所有的时间都使用全部的带宽。<br>一种编码方法发送<span style="font-family:'Times';line-height:1.8em;">64kbps</span><wbr />的数据流，会导致大得多的<span style="font-family:'Times';line-height:1.8em;">IP</span><wbr />网的数据流，引起额外带宽的主要原因是<span style="font-family:'Times';line-height:1.8em;">IP</span><wbr />和<span style="font-family:'Times';line-height:1.8em;">UDP</span><wbr />的报文头<span style="font-family:'Times';line-height:1.8em;">.</span><wbr />当<span style="font-family:'Times';line-height:1.8em;">VoIP</span><wbr />发送小的数据包时，在大多数时候，报文头实际上要比包中的数据大得多。<br><br>下面的表列出了各种编码方法，所需要的带宽：<span style="font-family:'Times';line-height:1.8em;"> </span><wbr /><br>编码方法<br>编码所需带宽<br>实际所需要的网络带宽<br><span style="font-family:'Times';line-height:1.8em;">G.711</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">64 Kbps</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">87.2 Kbps</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">G.729</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">8 Kbps</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">31.2 Kbps</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">G.723.1</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">6.4 Kbps</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">21.9 Kbps</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">G.723.1</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">5.3 Kbps</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">20.8 Kbps</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">G.726</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">32 Kbps</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">55.2 Kbps</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">G.726</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">24 Kbps</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">47.2 Kbps</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">G.728</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">16 Kbps</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">31.5 Kbps</span><wbr /><br><br>编码所需带宽，是指理论上所需要的带宽。但在实际的传输过程中，还要付出其他的消耗，如报文头。真正需要的带宽是实际所需要的网络带宽，这是大致的数值，而不是严格的精确值。实际所需要的网络带宽通常是以太网所需要的带宽，或者是<span style="font-family:'Times';line-height:1.8em;">ppp</span><wbr />连接所要的带宽。<span style="font-family:'Times';line-height:1.8em;"> </span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">QQ</span><wbr />使用的编码技术<span style="font-family:'Times';line-height:1.8em;">GIPS</span><wbr />，实际使用起来感觉声音比较清晰，相对于<span style="font-family:'Times';line-height:1.8em;">SIP</span><wbr />的编码就显得声音有些不好，请问，<span style="font-family:'Times';line-height:1.8em;">GIPS</span><wbr />理论占用的带宽有多大？能不能在<span style="font-family:'Times';line-height:1.8em;">SIP</span><wbr />加入<span style="font-family:'Times';line-height:1.8em;">GIPS</span><wbr />编码方式？<span style="font-family:'Times';line-height:1.8em;"> </span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">GIPS</span><wbr />公司用的语音编码技术是<span style="font-family:'Times';line-height:1.8em;"> iLBC</span><wbr />编码。<span style="font-family:'Times';line-height:1.8em;"> <br><br>iLBC </span><wbr />若采<span style="font-family:'Times';line-height:1.8em;">30ms</span><wbr />一帧，则理论带宽需要<span style="font-family:'Times';line-height:1.8em;">13.33 kbps</span><wbr />。若<span style="font-family:'Times';line-height:1.8em;">20ms </span><wbr />一帧，则理论带宽需要<span style="font-family:'Times';line-height:1.8em;">15.2 kbps </span><wbr />。<span style="font-family:'Times';line-height:1.8em;"> <br><br>iLBC</span><wbr />的语音质量要比<span style="font-family:'Times';line-height:1.8em;"> G.729A</span><wbr />好些，但是能够容忍丢失更多的包；也就是在丢包后，<span style="font-family:'Times';line-height:1.8em;">iLBC</span><wbr />恢复能力更强。<span style="font-family:'Times';line-height:1.8em;"> <br><br>iLBC</span><wbr />计算复杂度与<span style="font-family:'Times';line-height:1.8em;">G.729A</span><wbr />差不多。都是计算度比较复杂的算法。<span style="font-family:'Times';line-height:1.8em;"> <br><br>SIP</span><wbr />终端中，也有使用<span style="font-family:'Times';line-height:1.8em;"> iLBC</span><wbr />编码的。<span style="font-family:'Times';line-height:1.8em;"> skype </span><wbr />、<span style="font-family:'Times';line-height:1.8em;">QQ</span><wbr />在语音编码上并没有什么优势。由于它们是私有协议，目前在穿透私网（<span style="font-family:'Times';line-height:1.8em;">NAT</span><wbr />）和防火墙上，更好做些，所以媒体流的路径，可能比<span style="font-family:'Times';line-height:1.8em;">SIP</span><wbr />标准（目前）好做些而已。穿透易，路径选得近些，音质就显得好些。<span style="font-family:'Times';line-height:1.8em;"> </span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">G711 </span><wbr />在大约有<span style="font-family:'Times';line-height:1.8em;"> 100Kbps </span><wbr />带宽时，有很好的语音质量。<span style="font-family:'Times';line-height:1.8em;"> <br><br>G.726 </span><wbr />在大约有<span style="font-family:'Times';line-height:1.8em;"> 50Kbps </span><wbr />带宽时，有好的语音质量。<span style="font-family:'Times';line-height:1.8em;"> <br><br>G.729 </span><wbr />在大约有<span style="font-family:'Times';line-height:1.8em;"> 30Kbps </span><wbr />带宽时，有好的语音质量。<span style="font-family:'Times';line-height:1.8em;"> <br><br><br>GIPS</span><wbr />公司用的语音编码技术是带宽可变的码率，也就是根据网络<span style="font-family:'Times';line-height:1.8em;"> </span><wbr />实际的带宽状态，调整语音编码的压缩比率。<span style="font-family:'Times';line-height:1.8em;"> </span><wbr />也就是带宽越少，语音压缩得越厉害，失真损失越多；带宽越好，就压缩不厉害，失真损失少。<span style="font-family:'Times';line-height:1.8em;"> <br><br></span><wbr />注意语音编码用的压缩，都是有损压缩，也就压缩后语音会些失真。<br><span style="font-family:'Times';line-height:1.8em;"> </span><wbr /><br><span style="font-family:'Times';line-height:1.8em;"></span><wbr /><a href="http://www.newrocktech.com.cn/newrock/main_g2.asp" target="_blank"><span style="color:#3c403f;line-height:1.8em;"><span style="font-family:'Times';line-height:1.8em;">iLBC</span><wbr />与迅时通信</span><wbr /></a><wbr /><br><span style="font-family:'Times';line-height:1.8em;">  </span><wbr /><span style="font-family:'Times';line-height:1.8em;"> </span><wbr /><a href="http://www.newrocktech.com.cn/newrock/main_g3.asp" target="_blank"><span style="color:#3c403f;line-height:1.8em;"><span style="font-family:'Times';line-height:1.8em;">iLBC</span><wbr />背景和优势</span><wbr /></a><wbr /><br><span style="font-family:'Times';line-height:1.8em;">  </span><wbr /><span style="font-family:'Times';line-height:1.8em;"> </span><wbr /><a href="http://www.newrocktech.com.cn/newrock/main_g4.asp" target="_blank"><span style="color:#3c403f;line-height:1.8em;"><span style="font-family:'Times';line-height:1.8em;">iLBC</span><wbr />技术与<span style="font-family:'Times';line-height:1.8em;">Skype</span><wbr /></span><wbr /></a><wbr /><br>什么是<span style="font-family:'Times';line-height:1.8em;">iLBC</span><wbr />？<br>　　<span style="font-family:'Times';line-height:1.8em;">iLBC</span><wbr />是一种专为包交换网络通信设计的编解码，优于目前流行的<span style="font-family:'Times';line-height:1.8em;">G.729</span><wbr />、<span style="font-family:'Times';line-height:1.8em;">G.723.1</span><wbr />，对丢包进行了特有处理，既使在丢包率<span style="font-family:'Times';line-height:1.8em;"> </span><wbr />相当高的网络环境下，仍可获得非常清晰的语音效果。<br><br><span style="font-family:'Times';line-height:1.8em;">iLBC</span><wbr />所占用带宽？<br><span style="font-family:'Times';line-height:1.8em;">    30ms ptime</span><wbr />的<span style="font-family:'Times';line-height:1.8em;">iLBC</span><wbr />所占用的总通信带宽比通常采用的<span style="font-family:'Times';line-height:1.8em;">ptime 20ms</span><wbr />的<span style="font-family:'Times';line-height:1.8em;">G.729</span><wbr />的带宽还要小，以下是<span style="font-family:'Times';line-height:1.8em;">iLBC</span><wbr />与传统编解码占用带宽列表：<br><br><span style="font-family:'Times';line-height:1.8em;">iLBC——</span><wbr />语音质量的飞跃<br><br>　　语音质量一直是<span style="font-family:'Times';line-height:1.8em;">VoIP</span><wbr />应用的主要难点，如何保证和提高<span style="font-family:'Times';line-height:1.8em;">IP</span><wbr />网络传输语音的通话效果，是<span style="font-family:'Times';line-height:1.8em;">VoIP</span><wbr />应用迫切需要解决的问题。<span style="font-family:'Times';line-height:1.8em;">“iLBC”</span><wbr />编解码的出现，解决了在包交换的<span style="font-family:'Times';line-height:1.8em;">IP</span><wbr />网络中，传输语音所遇到的网络丢包严重影响通话质量等实际问题，实现了<span style="font-family:'Times';line-height:1.8em;">“</span><wbr />语音质量的飞跃<span style="font-family:'Times';line-height:1.8em;">”</span><wbr />。<br>　　下图为在不同的网络丢包环境下，使用<span style="font-family:'Times';line-height:1.8em;">iLBC</span><wbr />与<span style="font-family:'Times';line-height:1.8em;">G.729A</span><wbr />、<span style="font-family:'Times';line-height:1.8em;">G.723.1</span><wbr />编解码的语音质量比较。<br><br>图<span style="font-family:'Times';line-height:1.8em;">1. iLBC</span><wbr />与<span style="font-family:'Times';line-height:1.8em;"> G.729A</span><wbr />、<span style="font-family:'Times';line-height:1.8em;"> G.723.1</span><wbr />的比较<span style="font-family:'Times';line-height:1.8em;">(Dynastat, Inc)</span><wbr /><br><br>　　无论在高丢包率条件下还是在没有丢包的条件下，<span style="font-family:'Times';line-height:1.8em;">iLBC</span><wbr />的语音质量都优于目前流行的<span style="font-family:'Times';line-height:1.8em;">G.723.1, G.729A</span><wbr />等标准编解码；而且丢包率越大，使用<span style="font-family:'Times';line-height:1.8em;">iLBC</span><wbr />的语音质量优势越明显。通常情况下，为了衡量<span style="font-family:'Times';line-height:1.8em;">IP</span><wbr />网络语音质量，将<span style="font-family:'Times';line-height:1.8em;">≥5</span><wbr />％丢包率的网络情况定义为<span style="font-family:'Times';line-height:1.8em;">VoIP</span><wbr />的极限网络条件。经过语音质量测试，即使在<span style="font-family:'Times';line-height:1.8em;">5</span><wbr />％丢包率的情况下，<span style="font-family:'Times';line-height:1.8em;">iLBC</span><wbr />仍然能够提供相当于<span style="font-family:'Times';line-height:1.8em;">GSM</span><wbr />手机的语音质量。<br><span style="font-family:'Times';line-height:1.8em;"> </span><wbr /><br><span style="font-weight:bold"><wbr />RTP</span><wbr /><span style="font-weight:bold"><wbr />冗余技术简介</span><wbr /><br>　　众所周知，<span style="font-family:'Times';line-height:1.8em;">VoIP</span><wbr />是一种利用<span style="font-family:'Times';line-height:1.8em;">RTP</span><wbr />实时传输协议在包易丢失的<span style="font-family:'Times';line-height:1.8em;">Internet</span><wbr />网上传输语音数据的技术。<span style="font-family:'Times';line-height:1.8em;">RTP</span><wbr />基于无连接<span style="font-family:'Times';line-height:1.8em;">UDP</span><wbr />的应用协议，它不提供语音数据包的重传机制，这就要求<span style="font-family:'Times';line-height:1.8em;">VoIP</span><wbr />技术在网络传输中应尽可能减少语音数据包的丢失，满足语音传输的实时性要求，减少网络丢包对语音质量的影响。<br><br>图<span style="font-family:'Times';line-height:1.8em;">1. </span><wbr />常用编码在不同网络丢包条件下的语音质量对比<br>　　由上图可见，随着网络丢包率的增加，各种编解码的<span style="font-family:'Times';line-height:1.8em;">PESQ[1](Perceptual Evaluation of Speech Quality)</span><wbr />分值都有很大程度的下降。为此，迅时通信提出<span style="font-family:'Times';line-height:1.8em;">RTP</span><wbr />冗余机制，以改善由语音包传送丢失而引起的语音质量。<br><span style="font-family:'Times';line-height:1.8em;">RTP</span><wbr />冗余技术<br>　　早在<span style="font-family:'Times';line-height:1.8em;">1997</span><wbr />年，<span style="font-family:'Times';line-height:1.8em;">IETF</span><wbr />就已经制定了<span style="font-family:'Times';line-height:1.8em;">RFC2198 (RTP Payload for Redundant Audio Data)</span><wbr />协议，标准化多媒体应用的<span style="font-family:'Times';line-height:1.8em;">RTP</span><wbr />冗余技术，以改善在<span style="font-family:'Times';line-height:1.8em;">IP</span><wbr />网上进行多媒体应用中的质量问题。<br>　　<span style="font-family:'Times';line-height:1.8em;">[1] </span><wbr />参见国际电联<span style="font-family:'Times';line-height:1.8em;">(ITU)</span><wbr />的语音质量评估标准<span style="font-family:'Times';line-height:1.8em;">P.862</span><wbr />，该标准评定的<span style="font-family:'Times';line-height:1.8em;">PESQ MOS</span><wbr />分值越大，语音质量越好。<span style="font-family:'Times';line-height:1.8em;">PESQ MOS</span><wbr />分值有效范围为<span style="font-family:'Times';line-height:1.8em;">[-0.5,4.5]</span><wbr />。<br>　　<span style="font-family:'Times';line-height:1.8em;">RTP</span><wbr />冗余机制是指在<span style="font-family:'Times';line-height:1.8em;">RTP</span><wbr />语音包里携带当前帧和前几个帧的语音数据，以便在丢包的网络环境下，接收方可以从后续包中获取相关数据，实现对已丢失语音包的重组和恢复，解决由于网络丢包所导致的语音质量问题。<br>　　在<span style="font-family:'Times';line-height:1.8em;">VoIP</span><wbr />应用的<span style="font-family:'Times';line-height:1.8em;">RTP</span><wbr />冗余机制中，当网关或<span style="font-family:'Times';line-height:1.8em;">IAD</span><wbr />使用某种规定的编解码（如<span style="font-family:'Times';line-height:1.8em;">G729A</span><wbr />或<span style="font-family:'Times';line-height:1.8em;">iLBC</span><wbr />）进行语音数据流的打包时，系统将进行插入冗余语音数据包的处理，对当前帧和前几个帧的净荷语音数据进行<span style="font-family:'Times';line-height:1.8em;">RTP</span><wbr />封装；在进行语音数据流的解包时，系统将进行去除冗余语音数据的处理，对<span style="font-family:'Times';line-height:1.8em;">RTP</span><wbr />包进行重组。因此，在网络随机丢包的情况下，如果某一个<span style="font-family:'Times';line-height:1.8em;">RTP</span><wbr />语音包丢失了，则接收方还可通过后续<span style="font-family:'Times';line-height:1.8em;">RTP</span><wbr />语音包中的冗余数据对失去的数据进行重组和恢复，解决由于网络丢包所导致的语音质量问题。<br>　　迅时通信的<span style="font-family:'Times';line-height:1.8em;">RTP</span><wbr />冗余机制可有效改善音质，其理论抗随机丢包能力高达<span style="font-family:'Times';line-height:1.8em;">75</span><wbr />％；其<span style="font-family:'Times';line-height:1.8em;">RTP</span><wbr />语音包中的冗余帧个数可由用户设置，其设置范围为<span style="font-family:'Times';line-height:1.8em;">1</span><wbr />－<span style="font-family:'Times';line-height:1.8em;">3</span><wbr />。然而大量冗余数据也可能会造成网络拥塞增加，加剧网络丢包的问题，这可能会使采用冗余数据试图解决的包丢失问题变得更糟。因此，用户在配置<span style="font-family:'Times';line-height:1.8em;">RTP</span><wbr />冗余数据多少的时候，需要根据自己的实际网络带宽来进行调整。 <!--v:3.2--> ]]></description>
<category><![CDATA[技术]]></category>
<author><![CDATA[571350@qq.com(飞鱼)]]></author>
<comments>http://571350.qzone.qq.com/blog/1256802090#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Thu, 29 Oct 2009 07:41:30 GMT</pubDate>
<guid>http://571350.qzone.qq.com/blog/1256802090</guid>
</item>

<item>
<title><![CDATA[linphone分析(转)]]></title>
<link>http://571350.qzone.qq.com/blog/1256801835</link>
<description><![CDATA[这周看<span style="font-family:'Times';line-height:1.8em;">Linphone</span><wbr />的代码，主程序很简单，只有三个函数： <br><span style="font-family:'Times';line-height:1.8em;">linphone-1.7.1\console</span><wbr />下的<span style="font-family:'Times';line-height:1.8em;">linphonec.c</span><wbr />中的：<br><span style="font-family:'Times';line-height:1.8em;">main (int argc, char *argv[])</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">{     if (! linphonec_init(argc, argv) ) exit(EXIT_FAILURE);</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">       linphonec_main_loop (&amp;linphonec, sipAddr);</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">       linphonec_finish(EXIT_SUCCESS);</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">       exit(EXIT_SUCCESS); /* should never reach here */</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">}</span><wbr />　<br>可以看到，主要的事物处理在<span style="font-family:'Times';line-height:1.8em;">linphonec_main_loop</span><wbr />这个函数里面，该函数是一个<span style="font-family:'Times';line-height:1.8em;">while</span><wbr />循环，他的主要流程就是等待终端输入命令，然后根据命令来进行不同的响应或者发出不同的<span style="font-family:'Times';line-height:1.8em;">SIP</span><wbr />消息，完毕然后进入下一轮循环重新等待命令的输入。既然<span style="font-family:'Times';line-height:1.8em;">linphonec_main_loop</span><wbr />只是对输入命令的处理，那么对于从网络上接收到的数据的处理是在哪里实现的呢？既然<span style="font-family:'Times';line-height:1.8em;">linphonec_main_loop</span><wbr />里面没有，那肯定是在<span style="font-family:'Times';line-height:1.8em;">linphonec_init(argc, argv)</span><wbr />的时候启动了某个监听网络的线程。<br>通过对<span style="font-family:'Times';line-height:1.8em;">linphonec_init</span><wbr />这个函数的代码分析，终于找到了关键点：在这里面他调用了<span style="font-family:'Times';line-height:1.8em;">eXosip_init()</span><wbr />函数，而在<span style="font-family:'Times';line-height:1.8em;">eXosip_init()</span><wbr />里面加载了四个有限状态机，正是这四个有限状态机线程能够对接收到的网消息进行自动的状态跳转并处理。下面对<span style="font-family:'Times';line-height:1.8em;">eXosip_init()</span><wbr />进行详细的分析。<br><span style="font-family:'Times';line-height:1.8em;">eXosip_init()</span><wbr />是ｅＸｏｓｉｐ的初始化函数，我们来看看它的内部实现<span style="font-family:'Times';line-height:1.8em;">:<br></span><wbr />　　首行是定义的　<span style="font-family:'Times';line-height:1.8em;">osip_t *osip</span><wbr />，这在<span style="font-family:'Times';line-height:1.8em;">oSIP</span><wbr />的官方手册里我们看到，所有使用<span style="font-family:'Times';line-height:1.8em;">oSIP</span><wbr />的程序都要在最开始处声明一个<span style="font-family:'Times';line-height:1.8em;">osip_t</span><wbr />的指针，并使用<span style="font-family:'Times';line-height:1.8em;">osip_init(&amp;osip)</span><wbr />来初始化这个指针。<br>　　我们可以在代码中看到很多<span style="font-family:'Times';line-height:1.8em;">OSIP_TRACE</span><wbr />，这是调试输出宏调用了函数<span style="font-family:'Times';line-height:1.8em;">osip_trace</span><wbr />，可以用<span style="font-family:'Times';line-height:1.8em;">ENABLE_TRACE</span><wbr />宏来打开调试以方便我们开发调试。<br>　　其它就是很多的<span style="font-family:'Times';line-height:1.8em;">eXosip_t</span><wbr />的全局变量<span style="font-family:'Times';line-height:1.8em;">eXosip</span><wbr />的一些初始化操作，包括最上面的<span style="font-family:'Times';line-height:1.8em;">memset (&amp;eXosip, 0, sizeof (eXosip))</span><wbr />完全清空和下面的类似<span style="font-family:'Times';line-height:1.8em;">eXosip.user_agent = osip_strdup (&quot;eXosip/&quot; EXOSIP_VERSION)</span><wbr />的<span style="font-family:'Times';line-height:1.8em;">exosip</span><wbr />变量的一些初始值设置，其中有一个<span style="font-family:'Times';line-height:1.8em;">eXosip.j_stop_ua = 0</span><wbr />应该是一个状态机开关，后面可以看到很多代码检测这个变量来决定是否继续流程处理，默认置成了<span style="font-family:'Times';line-height:1.8em;">0</span><wbr />表示现在<span style="font-family:'Times';line-height:1.8em;">exosip</span><wbr />的处理流程是就绪的，即<span style="font-family:'Times';line-height:1.8em;">ua</span><wbr />是<span style="font-family:'Times';line-height:1.8em;">not stop</span><wbr />的。<br>　　<span style="font-family:'Times';line-height:1.8em;">osip_set_application_context (osip, &amp;eXosip)</span><wbr />是比较有意思的，它让下面的<span style="font-family:'Times';line-height:1.8em;">eXosip_set_callbacks (osip)</span><wbr />给<span style="font-family:'Times';line-height:1.8em;">osip</span><wbr />设置大量的回调函数时，能让<span style="font-family:'Times';line-height:1.8em;">osip</span><wbr />能访问到<span style="font-family:'Times';line-height:1.8em;">eXosip</span><wbr />这个全局变量中设置的大量程序运行时交互的信息，相当于我们在ＶＣ下开启一个线程时，给线程传入的一个ｖｏｉｄ指针指向我们的ＭＦＣ应用程序的当前<span style="font-family:'Times';line-height:1.8em;">dialog</span><wbr />对象实例，可以用<span style="font-family:'Times';line-height:1.8em;">void *osip_get_application_context (osip_t * osip)</span><wbr />这个函数来取出指针来使用，不过好象<span style="font-family:'Times';line-height:1.8em;">exosip</span><wbr />中并没有用到它，可能是留给个人自已扩展的吧<br>　　还能看到初始化代码前面有一段ＷＩＮ３２平台下的ＳＯＣＫ的初始化代码，可以知道<span style="font-family:'Times';line-height:1.8em;">eXosip</span><wbr />是用的原生的<span style="font-family:'Times';line-height:1.8em;">winsock api</span><wbr />函数，也就是我们可能以前学过的用<span style="font-family:'Times';line-height:1.8em;">VC</span><wbr />和<span style="font-family:'Times';line-height:1.8em;">WINAPI</span><wbr />写<span style="font-family:'Times';line-height:1.8em;">sock</span><wbr />程序时<span style="font-family:'Times';line-height:1.8em;">(</span><wbr />不是ＭＦＣ<span style="font-family:'Times';line-height:1.8em;">)</span><wbr />，用到的那段ＳＯＣＫ初始代码，还有一段有意思的代码，就是<span style="font-family:'Times';line-height:1.8em;">jpipe()</span><wbr />函数，它们返回的是一个管道，一个有２个整型数值的数组（一个进一个出），查看其代码发现，非<span style="font-family:'Times';line-height:1.8em;">WIN32</span><wbr />平台是直接使用的<span style="font-family:'Times';line-height:1.8em;">pipe</span><wbr />系统函数，而ＷＩＮ３２下则是用一对ＴＣＰ的本地ＳＯＣＫ连接来模拟的管道，一个ＳＯＣＫ写一个ＳＯＣＫ读，这段代码是比较有参考价值的：）<br><span style="font-family:'Times';line-height:1.8em;">j = 50;<br>while (aport++ &amp;&amp; j-- &gt; 0)<br>{<br></span><wbr />　　<span style="font-family:'Times';line-height:1.8em;">raddr.sin_port = htons ((short) aport);<br></span><wbr />　　<span style="font-family:'Times';line-height:1.8em;">if (bind (s, (struct sockaddr *) &amp;raddr, sizeof (raddr)) &lt; 0)<br></span><wbr />　　<span style="font-family:'Times';line-height:1.8em;">{<br></span><wbr />　　　　<span style="font-family:'Times';line-height:1.8em;">OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_WARNING, NULL,<br></span><wbr />　　　　<span style="font-family:'Times';line-height:1.8em;">&quot;Failed to bind one local socket %i!\n&quot;, aport));<br></span><wbr />　　<span style="font-family:'Times';line-height:1.8em;">} else<br></span><wbr />　　<span style="font-family:'Times';line-height:1.8em;">break;<br>}<br></span><wbr />含义即，依次检测５０个端口，从<span style="font-family:'Times';line-height:1.8em;">static int aport = 10500;</span><wbr />即<span style="font-family:'Times';line-height:1.8em;">10500~10550</span><wbr />端口找出一个可用的本地端口来绑定<span style="font-family:'Times';line-height:1.8em;">listen</span><wbr />模拟<span style="font-family:'Times';line-height:1.8em;">pipe</span><wbr />的一对<span style="font-family:'Times';line-height:1.8em;">sock</span><wbr />。<br><br><span style="font-family:'Times';line-height:1.8em;"> </span><wbr /><br><span style="font-weight:bold"><wbr /><span style="font-family:'Times';line-height:1.8em;">linphone</span><wbr /></span><wbr /><span style="font-weight:bold"><wbr />分析<span style="font-family:'Times';line-height:1.8em;">-</span><wbr /></span><wbr /><span style="font-weight:bold"><wbr />续</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">2008-02-20 14:46</span><wbr /><br><span style="font-family:'Times';line-height:1.8em;">   eXosip_set_callbacks (osip)</span><wbr />没有什么好看的，无非是和ｏＳＩＰ官方文档介绍的一样，设置一大堆的回调函数，关键是回调函数的实现，这也是许多初学者使用ｏＳＩＰ被卡壳的主要原因，不知道ｏＳＩＰ构建的程序是怎样跑起来的，随便选几个回调函数看一下<span style="font-family:'Times';line-height:1.8em;">eXosip</span><wbr />是怎样实现的，有许多是形如下文的函数：<br><span style="font-family:'Times';line-height:1.8em;">static void<br>cb_sndbye (int type, osip_transaction_t * tr, osip_message_t * sip)<br>{<br></span><wbr />　　<span style="font-family:'Times';line-height:1.8em;">OSIP_TRACE (osip_trace<br></span><wbr />　　<span style="font-family:'Times';line-height:1.8em;">(__FILE__, __LINE__, OSIP_INFO3, NULL, &quot;cb_sndbye (id=%i)\r\n&quot;,<br></span><wbr />　　<span style="font-family:'Times';line-height:1.8em;">tr-&gt;transactionid));<br>}<br></span><wbr />　　即，只是打印一下调试，并没有完整实现什么功能，我们学习时，完全可以用相同的方法，定义一大堆回调函数，并不忙想怎么完全实现，先都是只打印一下调试信息，看具体的应用逻辑根据抓包测试分析和看调试看程序走到了哪一步，调用了哪一个回调，来明白具体回调函数要实现什么用途，再来实现代码就方便多了，当然，如果看透了ＲＦＣ文档，应该从字面就能知道各个回调函数的用途了，这是后话，不是谁都能快速完全看懂ＲＦＣ的，所以我们要参考<span style="font-family:'Times';line-height:1.8em;">eXosip</span><wbr />：）<br>　　我们对其中的重要的回调函数进行逐个的分析：<br>　　－－－－－－－－－－－－－－－－－－－－－－－－－－－<br>　　<span style="font-family:'Times';line-height:1.8em;">osip_set_cb_send_message (osip, &amp;cb_snd_message)</span><wbr />　ＳＩＰ消息发送回调函数<br>　　这个函数可能是最重要的回调函数之一，消息发送，包括请求消息和回应消息，一般情况下，状态机的状态就是由它控制的，发起一个消息初始化一个状态机，回应一个消息对状态机修改，终结消息发送结束状态机<span style="font-family:'Times';line-height:1.8em;">……<br></span><wbr />　　看<span style="font-family:'Times';line-height:1.8em;">cb_snd_message</span><wbr />的函数实现，要以发现，其主要代码是对参数中的要发送的消息<span style="font-family:'Times';line-height:1.8em;">osip_message_t * sip</span><wbr />进行分析，找出消息要发送的真实<span style="font-family:'Times';line-height:1.8em;">char *host,int port</span><wbr />的值（这些参数可以省略，但要发送消息肯定需要<span style="font-family:'Times';line-height:1.8em;">host</span><wbr />和<span style="font-family:'Times';line-height:1.8em;">port</span><wbr />，所以要从<span style="font-family:'Times';line-height:1.8em;">sip</span><wbr />中解析），最后根据<span style="font-family:'Times';line-height:1.8em;">sip</span><wbr />中解析出的传输方式是<span style="font-family:'Times';line-height:1.8em;">TCP</span><wbr />还是<span style="font-family:'Times';line-height:1.8em;">UDP</span><wbr />选择最终进行消息发送处理的函数<span style="font-family:'Times';line-height:1.8em;">cb_udp_snd_message</span><wbr />，<span style="font-family:'Times';line-height:1.8em;">cb_tcp_snd_message</span><wbr />处理（它们的参数一致，即本函数只是补全一些省略的参数并对消息进行合法性检查）。<br>　　<span style="font-family:'Times';line-height:1.8em;">**</span><wbr />毕竟<span style="font-family:'Times';line-height:1.8em;">eXosip</span><wbr />是一个通用的开发库，它考虑了要支持<span style="font-family:'Times';line-height:1.8em;">TCP,UDP,TCPs,IPV4,IPV6</span><wbr />，<span style="font-family:'Times';line-height:1.8em;">WIN32,*nix,WINCE</span><wbr />等等多样化的复杂环境，所以，我们可以略过我们暂时不需要的部分，比如，ＩＰＶ６相关的代码实现等。<br>　　由于我们大多数情况下ＳＩＰ是用的ＵＤＰ，所以先来看一下<span style="font-family:'Times';line-height:1.8em;">cb_udp_snd_message</span><wbr />的实现，它从全局变量<span style="font-family:'Times';line-height:1.8em;">exosip</span><wbr />中获取可用的<span style="font-family:'Times';line-height:1.8em;">sock</span><wbr />，并尽最大能力解析出<span style="font-family:'Times';line-height:1.8em;">host</span><wbr />和<span style="font-family:'Times';line-height:1.8em;">port</span><wbr />（？？难道前面的函数还不够解析彻底？？如最终仍无<span style="font-family:'Times';line-height:1.8em;">port</span><wbr />信息则默认设置为<span style="font-family:'Times';line-height:1.8em;">5060</span><wbr />），使用<span style="font-family:'Times';line-height:1.8em;">osip_message_to_str (sip, &amp;message, &amp;length)</span><wbr />函数将要发送的格式化的ＳＩＰ消息转换成能用ＳＯＣＫ传输的简单数据并发送即完成消息发送，代码中有许多复杂的环境探测和错误控制等等等等，我们可以暂时不用过多关注，可以继续向下，结尾处有一个<span style="font-family:'Times';line-height:1.8em;">keeplive</span><wbr />相关代码，从代码字面分析，可能是ＳＩＰ的<span style="font-family:'Times';line-height:1.8em;">Register</span><wbr />消息的自动重发相关代码，可以在后面再细化分析。<br>　　<span style="font-family:'Times';line-height:1.8em;">cb_tcp_snd_essage</span><wbr />的函数实现要比上文的<span style="font-family:'Times';line-height:1.8em;">udp</span><wbr />的实现简单很多，主要是环境探测错误控制方面，因为毕竟<span style="font-family:'Times';line-height:1.8em;">tcp</span><wbr />是稳定连接的，对比一下代码，可以看到主要流程还是将ＳＩＰ消息转换后，发送到从ＳＩＰ消息中解析出的<span style="font-family:'Times';line-height:1.8em;">host</span><wbr />和<span style="font-family:'Times';line-height:1.8em;">port</span><wbr />对应的目标。<br>　　看完两个函数，可以知道，<span style="font-family:'Times';line-height:1.8em;">eXosip</span><wbr />需要有两个<span style="font-family:'Times';line-height:1.8em;">sock</span><wbr />，是一个数组，<span style="font-family:'Times';line-height:1.8em;">0</span><wbr />是给ＵＤＰ用的，１是给ＴＣＰ用的，要用ＳＯＣＫ当然要初始化，就是下文要介绍的<span style="font-family:'Times';line-height:1.8em;">eXosip</span><wbr />的网络相关的初始化了，上面的<span style="font-family:'Times';line-height:1.8em;">exosip_init</span><wbr />可以看成是这个开发库的系统初始化吧：）　<br>　　至些，我们应该知道了ｏＳＩＰ开发的ＳＩＰ应用程序的消息是从哪里发出的吧，对了，就是从这个回调函数里，所谓万事开头难，就象开发ＷＩＮ３２应用程序时，找到了ＷＩＮ３２程序的<span style="font-family:'Times';line-height:1.8em;">main</span><wbr />函数入口下面的工作就好办了，下面就都是为一些事件消息开发对应的处理函数而已了：）<br>　　<span style="font-family:'Times';line-height:1.8em;">osip_set_kill_transaction_callback</span><wbr />　事务终结回调函数<br>　　对应ＩＣＴ，ＩＳＴ，ＮＩＣＴ，ＮＩＳＴ客户<span style="font-family:'Times';line-height:1.8em;">/</span><wbr />服务器注册<span style="font-family:'Times';line-height:1.8em;">/</span><wbr />非注册事务状态机的终结，主要是使用<span style="font-family:'Times';line-height:1.8em;">osip_remove_transaction (eXosip.j_osip, tr)</span><wbr />将当前<span style="font-family:'Times';line-height:1.8em;">tr</span><wbr />事务删除，再加上一系列的清理工作，其中，<span style="font-family:'Times';line-height:1.8em;">NICT</span><wbr />即客户端的非Ｉｎｖｉｔｅ事务的清理比较复杂一些，要处理的内容也比较多，可以根据实际应用的情况进行有必要的清理工作：）<br>　　<span style="font-family:'Times';line-height:1.8em;">cb_transport_error</span><wbr />　传输失败处理回调<br>　　对应于上面说到的四种事务状态机，如果它们在处理时失败，则在这时进行统一处理。<br>　　从代码可知，只是在<span style="font-family:'Times';line-height:1.8em;">NOTIFY,SUBSCRIBE,OPTION</span><wbr />操作失败才进行处理，其它错误可直接忽略。<br><br>　　<span style="font-family:'Times';line-height:1.8em;">osip_set_message_callback</span><wbr />　消息发送处理回调<br>　　根据<span style="font-family:'Times';line-height:1.8em;">type</span><wbr />不同，表示不同的消息发送状态<br>　　<span style="font-family:'Times';line-height:1.8em;">OSIP_XXX_AGAIN </span><wbr />重发相关消息<br>　　<span style="font-family:'Times';line-height:1.8em;">OSIP_ICT_INVITE_SENT </span><wbr />发起呼叫<br>　　<span style="font-family:'Times';line-height:1.8em;">OSIP_ICT_ACK_SENT</span><wbr />　ＡＣＫ回应<br>　　<span style="font-family:'Times';line-height:1.8em;">OSIP_NICT_REGISTER_SENT</span><wbr />　发起注册<br>　　<span style="font-family:'Times';line-height:1.8em;">OSIP_NICT_BYE_SENT</span><wbr />　ＢＹＥ发出<br>　　<span style="font-family:'Times';line-height:1.8em;">OSIP_NICT_CANCEL_SENT</span><wbr />　Ｃａｎｃｅｌ发出<br>　　<span style="font-family:'Times';line-height:1.8em;">OSIP_NICT_INFO_SENT</span><wbr />，<span style="font-family:'Times';line-height:1.8em;">OSIP_NICT_OPTIONS_SENT</span><wbr />，<span style="font-family:'Times';line-height:1.8em;">OSIP_NICT_SUBSCRIBE_SENT</span><wbr />，<span style="font-family:'Times';line-height:1.8em;">OSIP_NICT_NOTIFY_SENT</span><wbr />，<span style="font-family:'Times';line-height:1.8em;">OSIP_NICT_UNKNOWN_REQUEST_SENT<br></span><wbr />　　我们可以看到，<span style="font-family:'Times';line-height:1.8em;">eXosip</span><wbr />没有对它们作任何处理，我们可以根据自己需要，比如，重发<span style="font-family:'Times';line-height:1.8em;">2xx</span><wbr />消息前记录一下日志之类的，扩展一下<span style="font-family:'Times';line-height:1.8em;">retransmission</span><wbr />的处理方式，发起<span style="font-family:'Times';line-height:1.8em;">Invite</span><wbr />前记录一下通话日志等等。<br><br>　　<span style="font-family:'Times';line-height:1.8em;">OSIP_ICT_STATUS_1XX_RECEIVED</span><wbr />　<span style="font-family:'Times';line-height:1.8em;">uac</span><wbr />收到<span style="font-family:'Times';line-height:1.8em;">1xx</span><wbr />消息，一般是表示对端正在处理中，这时，主要是设置一下事务状态机的状态值，并对会话中的<span style="font-family:'Times';line-height:1.8em;">osip</span><wbr />的一些参数根据返回值进行相应设置，里面有许多条件判断，但我们常用的一般是<span style="font-family:'Times';line-height:1.8em;">100,180,183</span><wbr />的判断而已，暂时可以忽略里面复杂的判断代码。<br>　　<span style="font-family:'Times';line-height:1.8em;">OSIP_ICT_STATUS_2XX_RECEIVED uac</span><wbr />收到<span style="font-family:'Times';line-height:1.8em;">2xx</span><wbr />消息，这里主要跟踪一下<span style="font-family:'Times';line-height:1.8em;">Register</span><wbr />情况下的<span style="font-family:'Times';line-height:1.8em;">2xx</span><wbr />，表示注册成功，这时会更新一下<span style="font-family:'Times';line-height:1.8em;">exosip</span><wbr />的注册字段值，以便让<span style="font-family:'Times';line-height:1.8em;">eXosip</span><wbr />能自动维护<span style="font-family:'Times';line-height:1.8em;">uac</span><wbr />的注册，ＢＹＥ的２ｘｘ回应是终结消息，<span style="font-family:'Times';line-height:1.8em;">Invite</span><wbr />的<span style="font-family:'Times';line-height:1.8em;">2xx</span><wbr />回应，则主要是初始化一下会话相关的数据，表示已成功建立连接。<br>　　其它４ｘｘ，５ｘｘ，６ｘｘ则分别是对应的处理，根据实现情况进行概要的查看即可。<br>　　<span style="font-family:'Times';line-height:1.8em;">report_event (je, sip)</span><wbr />是代码中用来进行事件处理的一个函数，跟踪后发现，其最终是使用了我们上文提到的ｊｐｉｐｅ管道，以便在状态机外实时观测状态机内的处理信息。<br>　　<span style="font-family:'Times';line-height:1.8em;">OSIP_NIST_STATUS_XXX_SENT</span><wbr />即对应于上面的<span style="font-family:'Times';line-height:1.8em;">uac</span><wbr />的处理，这里是<span style="font-family:'Times';line-height:1.8em;">uas</span><wbr />的对应的消息处理，相比较于<span style="font-family:'Times';line-height:1.8em;">uac</span><wbr />简单一点。 <!--v:3.2--> ]]></description>
<category><![CDATA[技术]]></category>
<author><![CDATA[571350@qq.com(飞鱼)]]></author>
<comments>http://571350.qzone.qq.com/blog/1256801835#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Thu, 29 Oct 2009 07:37:15 GMT</pubDate>
<guid>http://571350.qzone.qq.com/blog/1256801835</guid>
</item>

<item>
<title><![CDATA[开源VoIP]]></title>
<link>http://571350.qzone.qq.com/blog/1256796293</link>
<description><![CDATA[开源VoIP<br>大约三年前，Jon Hall曾预言说，“使用开源解决<a href="http://www.microvoip.com/fangan/fasl/Index.htm" target="_blank"><span style="color:#37708b;line-height:1.8em;">方案</span><wbr /></a><wbr />的各种VoIP产品，比如Asterisk，所创造的市场将会比现在的全部Linux市场还要大。”不过到目前为止，企业级开源VoIP仍然是一个有待拓荒的<a href="http://www.microvoip.com/scfx/Index.htm" target="_blank"><span style="color:#37708b;line-height:1.8em;">市场</span><wbr /></a><wbr />。使用开源VoIP产品的中小企业的数量已相当可观，因为它对成本的控制和节约非常适合于中小企业。不过对于大规模的企业部署来说，开源<a href="http://www.microvoip.com/voip/" target="_blank"><span style="color:#37708b;line-height:1.8em;">VoIP</span><wbr /></a><wbr />尚未获得大企业客户们的青睐。<br>    这并不是说，大企业对于开源<a href="http://www.microvoip.com/voip/" target="_blank"><span style="color:#37708b;line-height:1.8em;">VoIP</span><wbr /></a><wbr />本身的好处置若罔闻。可以肯定地说，已经有越来越多的企业在考虑购买商业产品之前会首先考虑开源产品。不过，尽管在企业中到处存在着这种对开源产品的兴趣，但是大体来讲，IP电话[url=javascript:;]<span style="text-decoration:underline;"><wbr /><span style="font-weight:bold"><wbr />系统</span><wbr /></span><wbr />[/url]要想开展企业级试验仍然是受限制的。<br>    换句话说，完全用VoIP来替换核心[url=javascript:;]<span style="text-decoration:underline;"><wbr /><span style="font-weight:bold"><wbr />网络</span><wbr /></span><wbr />[/url]的想法已经越来越不现实。的确，语音已经跨过了网络的边缘，但却不大可能无孔不入。很多传统的PBX运营商都在支持VoIP，一些老牌的PBX产品也采用了VoIP的某些[url=javascript:;]<span style="text-decoration:underline;"><wbr /><span style="font-weight:bold"><wbr />技术</span><wbr /></span><wbr />[/url]。引进VoIP模块，在本地建立<a href="http://www.microvoip.com/voip/" target="_blank"><span style="color:#37708b;line-height:1.8em;">VoIP</span><wbr /></a><wbr />连接已很普遍，这一方面导致了长途电话成本的大幅下降，另一方面又并未破坏本地的语音服务现状。<br>    大体上来说，VoIP在需要它的地方正在逐渐地取代PBX。而这样一种有针对性的定位对于开源<a href="http://www.microvoip.com/voip/" target="_blank"><span style="color:#37708b;line-height:1.8em;">VoIP</span><wbr /></a><wbr />来说也是个最佳的发展方向。<a href="http://www.microvoip.com/Article/UploadFiles/200708/20070801172500873.gif" target="_blank"><span style="color:#37708b;line-height:1.8em;"> </span><wbr /></a><wbr /><br>   <span style="font-weight:bold"><wbr />Asterisk：开源<a href="http://www.microvoip.com/fangan/fasl/Index.htm" target="_blank"><span style="color:#37708b;line-height:1.8em;">方案</span><wbr /></a><wbr />的首选</span><wbr /><br>    Digium公司的Asterisk无疑是目前可用的开源VoIP产品中最为成熟、也最为普及的IP PBX解决<a href="http://www.microvoip.com/fangan/fasl/Index.htm" target="_blank"><span style="color:#37708b;line-height:1.8em;">方案</span><wbr /></a><wbr />。而其他很多开源项目尚在[url=javascript:;]<span style="text-decoration:underline;"><wbr /><span style="font-weight:bold"><wbr />开发</span><wbr /></span><wbr />[/url]之中，比如OpenPBX、FreeSwitch等。然而，尽管开源IP PBX产品之间的竞争开始加剧，但Asterisk仍然是最具竞争力的企业级<a href="http://www.microvoip.com/voip/" target="_blank"><span style="color:#37708b;line-height:1.8em;">VoIP</span><wbr /></a><wbr />解决<a href="http://www.microvoip.com/fangan/fasl/Index.htm" target="_blank"><span style="color:#37708b;line-height:1.8em;">方案</span><wbr /></a><wbr />。<br>    正因如此，美国德州山姆休斯敦州立大学去年便将新增的6000多部电话从Cisco CallManager迁移到了Asterisk环境，大大降低了电话的许可费用以及不断高涨的客户控制和[url=javascript:;]<span style="text-decoration:underline;"><wbr /><span style="font-weight:bold"><wbr />安全</span><wbr /></span><wbr />[/url]费用。分时度假酒店——夏湾度假村共有13台[url=javascript:;]<span style="text-decoration:underline;"><wbr /><span style="font-weight:bold"><wbr />服务器</span><wbr /></span><wbr />[/url]在跑Asterisk系统，每个月的IP语音通话量高达100万分钟。不过，尽管已经有了这样一些大规模部署的成功案例，Digium却仍然把关注的重点放在了中端<a href="http://www.microvoip.com/scfx/Index.htm" target="_blank"><span style="color:#37708b;line-height:1.8em;">市场</span><wbr /></a><wbr />。<br>    “任何一个大企业对我们来说都是巨大的商机，但那并不是我们核心客户的基础所在。Asterisk可以很容易地扩展成大企业的部署规模，不过，我们还是要寻找更多的中端<a href="http://www.microvoip.com/scfx/Index.htm" target="_blank"><span style="color:#37708b;line-height:1.8em;">市场</span><wbr /></a><wbr />机会。”Asterisk IP PBX项目创始人、Digium公司主席兼CTO Mark Spencer说。Digium去年刚刚融到一笔1380万美元的风险投资，最近已任命Adtran公司的前任COO Danny J.Windham出任CEO。<br>    Digium对待开始采用Asterisk的企业这种平和心态是可以理解的，因为很多大企业一直以来对开源<a href="http://www.microvoip.com/voip/" target="_blank"><span style="color:#37708b;line-height:1.8em;">VoIP</span><wbr /></a><wbr />都持保留态度。<br>    他们所担心的主要问题有：感觉缺乏支持，担心性能的可用性，忧虑实施和部署需要较专业的技巧，以及对该平台的兼容性持保留态度等。<br>    不过更仔细地考察Asterisk，看一看其开发者队伍的迅速扩大就已表明，这些担忧是没有根据的，而Asterisk也已为大企业级部署做好了准备。<br>   <span style="font-weight:bold"><wbr />造就企业级竞争者</span><wbr /><br>    Asterisk是完全按照GNU GPL许可协议开发的开源IP PBX项目，由Spencer在1999年创始。该平台可在普通[url=javascript:;]<span style="text-decoration:underline;"><wbr /><span style="font-weight:bold"><wbr />硬件</span><wbr /></span><wbr />[/url]上 运行，与商用IP PBX平台相比，可显著地节约成本。而且因它的出现，在开源社区中还附带产生了为其提供测试、bug修复以及功能开发的子社区。Asterisk既有类似 任何IP PBX产品的商业版本可以销售（提供许可证、保修与技术支持合同以及装帧精美的手册等），也可以自由下载，允许免费试用。<br>    为了替代传统的PBX，Asterisk还可以把模拟电话接到中央交换机上，不过，其规模化是个问题。它使用FXS（外部交换站）线速卡和模拟话机接口； 提供IP到模拟语音的转换器。比如Digium的IAXy ATA（模拟电话适配器）；还可以和Grandstream网络以及Linksys等厂商的产品相互竞争。也就是说，Asterisk主要是为基于本地 IAX（内部Asterisk交换）<a href="http://www.microvoip.com/voip/" target="_blank"><span style="color:#37708b;line-height:1.8em;">VoIP</span><wbr /></a><wbr />协议，或者基于标准SIP的IP电话系统而构建的平台。<br>    除了Asterisk IP电话的支线以外，外出中继线不必一定是IP线路。Asterisk不仅可以和商用<a href="http://www.microvoip.com/voip/" target="_blank"><span style="color:#37708b;line-height:1.8em;">VoIP</span><wbr /></a><wbr />提供商，如BroadVoice和VoicePulse的产品相连接，而且可以在适合的地点连接其他适合的硬件；它还能处理TDM（时分多路复用）线路，如T1信道的信号，通过PSTN传送拨号音。<br>    然而，为了打通PSTN和SIP之间的通信，大多数Asterisk的实施都得依赖于PCI线速卡而不是外部的适配器。举例来说，从Asterisk发送 一个类似拍叉簧信号的SIP信号给ATA就不太可能。就是说，需要发送拍叉簧信号给PSTN的一些电话功能，比如呼叫等待功能也就不可能实现。不过对于大 多数的业务来说，这并不是个问题，反倒是新旧技术之间偶尔会出现的兼容性问题才是更大的麻烦。不过，只要有相称的PCI接口，这些问题都能解决。<br>   <span style="font-weight:bold"><wbr />Linux环境是否必要</span><wbr /><br>    关于Asterisk的最基本的误解是认为它要求Linux环境，这是不正确的。开源PBX作为一种服务可以运行在多种平台上，包括Windows平台。<br>    Asterisk可构建一个很像传统PBX的平台，基于一个隐藏在CLI（命令行接口）或GUI（图形用户接品）管理层的类Unix OS。你可以部署一台标准的Linux服务器并安装Asterisk软件包来创建自己的PBX，或者也可以用其他几种客户订制的Linux分发版本与 Asterisk来创建PBX。<br>    眼下最流行的Linux分发版本是Trixbox，它整合了CentOS Linux平台、Asterisk、一组开源的Asterisk管理工具，以及一些让控制信息展示更容易的客户代码。有了Trixbox，就可以在20分 钟内让裸机变成全功能的Asterisk IP PBX。Digium最新发布的AsteriskNOW也具备和Trixbox同样的性能，只不过管理工具不同。<br>    不过，Trixbox能提供一些AsteriskNOW所缺少的重要功能，比如易于部署和配置HUBLite用户GUI、集成SugarCRM，以及用于流行的IP话机的[url=javascript:;]<span style="text-decoration:underline;"><wbr /><span style="font-weight:bold"><wbr />配置</span><wbr /></span><wbr />[/url]工具等。换句话说，AsteriskNOW还是一种beta产品。<br>    至于要管理Asterisk的部署，基本上推荐使用Linux环境，但并不是必须的。像FreePBX的开源工具也能提供完备的Web UI来管理Asterisk，只须做简单的扩展和干线配置便可实现复杂的拨号规划、IVR（交互式语音应答）功能、语音邮件等等。事实上，用不着复杂的命 令行输入就可以构建和部署Asterisk PBX，只不过在做大规模部署时，熟悉Linux与Asterisk还是很有必要的。<br>   <span style="font-weight:bold"><wbr />社区的价值</span><wbr /><br>    对于企业来说，缺乏技术支持可能是反对部署开源<a href="http://www.microvoip.com/voip/" target="_blank"><span style="color:#37708b;line-height:1.8em;">VoIP</span><wbr /></a><wbr />的最真实的原因。但即便如此，Asterisk仍然可说是个例外。<br>    虽然一般来说，对开源项目的支持主要有在线论坛、邮件列表以及偶尔会有的技术手册，不过，在Asterisk的身后有一家公司存在。Digium除了为 Asterisk的使用提供硬件（比如连接Asterisk和PSTN的模拟和数字接口卡）之外，还提供支持服务。<br>    对于采用Asterisk的企业来说，主要的好处除了能节约成本，还有就是能够很好地进行管理，因为开源IP PBX可以很轻松地做任何配置。其实，Asterisk的大部分都已模块化，并且采用了AGI（Asterisk网关接口），AGI模仿了CGI，可以和 Web服务器连接。<br>    管理员可以利用AGI为Asterisk编写一些内置[url=javascript:;]<span style="text-decoration:underline;"><wbr /><span style="font-weight:bold"><wbr />程序</span><wbr /></span><wbr />[/url]， 编程语言没有任何限制，Python、PHP、Ruby、Java、C或Perl都行。照此，定制自己的PBX的功能设置就相对容易多了。而且，开发者社 区开发的Asterisk设计工具数量增长的很快，已经完成的功能相当丰富。其中有事故单管理功能，可以从电话拨号盘输入事故单号。<br>   <span style="font-weight:bold"><wbr />开放的实验</span><wbr /><br>    这套IP电话系统还很好地保留了在企业中最普遍而且最常用的一些应用。因为经常要跟电话系统进行交互，所以其功能、性能和稳定性都会随时接受用户的仔细考 查。语音邮件和易用性、语音邮件/电子邮件网关、呼叫质量以及跟我学功能等，对于拨号线路两端的用户来说，都是任何PBX平台中最易被人看到的部分，其 IVR功能及其可靠性有时甚至可能决定着销售和业务关系的成败。因此，对某个IP PBX平台的承诺切不可轻易做出。<br>    和所有开源解决方案一样，Asterisk的好处就是在你购买之前可以先行试用。而且，Asterisk可供使用的形式有十多种。有打包的解决<a href="http://www.microvoip.com/fangan/fasl/Index.htm" target="_blank"><span style="color:#37708b;line-height:1.8em;">方案</span><wbr /></a><wbr />，比如，Trixbox和AsteriskNOW，也有源代码形式。Trixbox和AsteriskNOW还可以作为预制好的VMware镜像来用——只须下载，然后在VMware工作站或服务器上启动即可。当然，这些好处可能并不足以让企业把对开源<a href="http://www.microvoip.com/voip/" target="_blank"><span style="color:#37708b;line-height:1.8em;">VoIP</span><wbr /></a><wbr />的疑虑和考察扔到一边去。<br>    不过很快他们就会发现，当越来越多的企业可以在商业[url=javascript:;]<span style="text-decoration:underline;"><wbr /><span style="font-weight:bold"><wbr />软件</span><wbr /></span><wbr />[/url]之 外有更广泛的选择余地的时候，开源VoIP是一个有价值的替代品，长期看更是如此。节约成本肯定会令企业很感兴趣，还有更灵活的客户定制和客户控制等好 处。在未来数年内，当语音越来越深入到企业内部之时，迅速修改<span style="font-weight:bold"><wbr />源码</span><wbr />以便定制功能的优势，肯定会推动企业部署开源IP PBX平台，而Asterisk在实现<a href="http://www.microvoip.com/voip/" target="_blank"><span style="color:#37708b;line-height:1.8em;">VoIP</span><wbr /></a><wbr />应用的诸多许诺方面就是一个很好的实例。<br>   <span style="font-weight:bold"><wbr />相关链接</span><wbr /><br>    开源资源列表<br>    当企业需要部署开源VoIP时，并不是说只能依靠企业自己的力量，因为关于开源<a href="http://www.microvoip.com/voip/" target="_blank"><span style="color:#37708b;line-height:1.8em;">VoIP</span><wbr /></a><wbr />的各种工具和开发项目都在迅速地增多。<br>    下面就是在部署开源<a href="http://www.microvoip.com/voip/" target="_blank"><span style="color:#37708b;line-height:1.8em;">VoIP</span><wbr /></a><wbr />时可以为企业提供极大帮助的各类开源资源列表。<br><br>    ■<span style="font-weight:bold"><wbr />PBX</span><wbr /><br>    ● Asterisk,asterisk.org       <br>    ● OpenPBX,openpbx.org<br>    ● sipX,sipfoundry.org <br>    ● Yate,yate.null.ro<br>    ● FreeSwitch,freeswitch.org<br><br>    ■<span style="font-weight:bold"><wbr />软电话</span><wbr /><br>    ● JackenIAX, jackenhack.com/jackeniax<br>    ● Linphone,linphone.org<br>    ● OpenWengo,openwengo.com<br>    ● Yate,yate.null.ro<br>    ● PhoneGaim,phonegaim.com<br>    ● sipXphone,sipfoundry.com/sipxphone<br>    ● Shtoom,divmod.org/trac/wiki/shtoomProject<br>    ● OpenPhone,openh323.org<br>    ●  iaxComm,iaxclient sourceforge.net/iaxcomm<br>    ■<span style="font-weight:bold"><wbr />管理工具</span><wbr /><br>    ● Trixbox,trixbox.org     <br>    ● AsteriskNOW,asterisknow.org<br>    ● FreePBX,treepbx.org <br>    ● Elastix,elastix.org<br><br>    ■<span style="font-weight:bold"><wbr />在线支持（DIY和商用）</span><wbr /><br>    ● Digium,digium.com   <br>    ● Voip-info.org,<a href="http://www.microvoip.com/voip/" target="_blank"><span style="color:#37708b;line-height:1.8em;">VoIP</span><wbr /></a><wbr />-info.org<br>    ● AsteriskSupport.com,asterisksupport.com <br>    ● VoiceMeUp,voicemeup.com<br>    ● Bicom Systems,bicomsystems.com<br>    ● Additional support resources at infoworld.com/5141 <!--v:3.2--> ]]></description>
<category><![CDATA[技术]]></category>
<author><![CDATA[571350@qq.com(飞鱼)]]></author>
<comments>http://571350.qzone.qq.com/blog/1256796293#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Thu, 29 Oct 2009 06:04:53 GMT</pubDate>
<guid>http://571350.qzone.qq.com/blog/1256796293</guid>
</item>

<item>
<title><![CDATA[Asterisk新手经常问及的问题]]></title>
<link>http://571350.qzone.qq.com/blog/1256796177</link>
<description><![CDATA[<br><span style="color:#000066;line-height:1.8em;"><span style="font-weight:bold"><wbr />Asterisk新手经常问及的问题</span><wbr /></span><wbr /><br><span style="font-style:italic"><wbr /><span style="color:#736357;line-height:1.8em;"><span style="font-weight:bold"><wbr />Asterisk对新手来说，还是具有一定的难度。如果您还既不具备Linux系统的基本知识，也没有电信网络，尤其是PSTN方面的基础，对VoIP也仅仅知道一些名词；那么，您可能会有很多疑惑。</span><wbr /></span><wbr /></span><wbr /> <span style="font-style:italic"><wbr /><span style="color:#736357;line-height:1.8em;"><span style="font-weight:bold"><wbr />      下文来自于国内的Asterisk爱好者QQ群，作者做了部分修订：</span><wbr /></span><wbr /></span><wbr /><br>      这里所提的问题，不是Asterisk的细节问题，而是基本的入门问题。很多朋友在群里对Asterisk提出各种疑问，甚至是质疑，我觉得有必要针对一些常见问题做出解答，以正视听。由于本人水平有限，可能许多细节都不是十分严谨，也请专家给予批评指正。<br><span style="font-weight:bold"><wbr />      1. Asterisk是什么？如何理解这样一个开源代码？它和大家熟悉的GNUGK有什么不同？</span><wbr /><br>      Asterisk是一个IPPBX的开源代码。IPPBX的开源代码很多，而Asterisk是名气最大，使用量最大，影响力最大的一个。<br>      不要把Asterisk想象成一个产品，如果你这么想象，你会在后续的工作中出现很多理解的偏差，你应该把它想象成制作IPPBX的一个原材料，或者 IPPBX的一个软件的“操作系统”。在Asterisk上进行改造，你可以修改任何东西，比如界面、数据库、数据结构、协议栈等等，让它变成你想要的产 品，或者利用这个过程提供服务。<br>      GNUGK是个啥东西？GNUGK是要做一个GATEKEEPER，而Asterisk则不同，它要做一个IPPBX。GK和IPPBX根本就是两个东西。<br>      在采用H.323标准的IP电话网络中，主要有4种实体：终端、网关（GW，Gateway）、网守（GK，Gatekeeper）和多点控制单元 （MCU，Multipoint Control Unit）。网守处于高层，提供对端点（终端、网关、多点控制单元统称为端点）和呼叫的管理功能，是IP电话网络系统中的重要管理实体。网守的主要功能 有：地址解析、接入控制、带宽管理、区域管理等四项基本功能；此外，还能提供呼叫控制信令、呼叫管理等其他功能。要构建一个H323的VOIP网，离不开 GK的管理。那么GNUGK所致力于的工作，就是做一个网守。我们运营常常用的H323平台，基本上都是GNUGK改造的，加入计费、界面、修改其中的诸 多bug，就成了虚拟运营商耳熟能详的“平台”。其实，在任何开源代码上开发都不是一件容易的事情，都需要丰富的经验、细致的分析、沉稳的开发和严格的测 试工作，如果只是想实现基本业务，对用户界面和性能要求也不高，直接拿来用也未尝不可。<br>      IPPBX是IP化的PBX，这句话说起来简单，理解上可是千差万别。IPPBX的最终目的是要替换现有的PBX的。因为现有的PBX结构不够开放，提供 增值业务的能力差，而基于IP架构的PBX，开放能力和拓展能力都大幅度增强，和NGN网络结合，创造出大量增值业务，真正满足用户需求。在商业推广中， 各个厂家根据自身的技术架构，开发出形形色色的IPPBX，有在原有PBX上插一块以太网卡，就叫做IPPBX的，有TDM和IP两个核心的IPPBX， 也有纯IP核心的，基于Intel服务器架构或者嵌入式的IPPBX，而Asterisk的初衷就是做这种纯IP核心的IPPBX。纯IP核心的 IPPBX，可以有几种形式，最基本的就是一台服务器，装上Asterisk软件，加上自身开发的应用，这种IPPBX必须使用IP终端，如宽带话机、小 网关、中继网关、软电话等；比较流行的形式是一台服务器插各种板卡，这些板卡带s口、o口、E1/T1口，用来连接电话机、局端放出的模拟或者数字线路， IP终端和普通终端都可以接入。<br><span style="font-weight:bold"><wbr />      <span style="line-height:1.8em;"><span style="line-height:1.8em;">2. <span style="line-height:1.8em;">Asterisk能做什么？</span><wbr /></span><wbr /></span><wbr /></span><wbr /><br>      Asterisk，英文是“星号”的意思，设计的初衷是，任何和电话系统有关的东西，它都能做。但是实际上，并不是所有和电话有关的功能靠 Asterisk实现都是最好的，这个要根据自身的需求，在Asterisk上定制开发，才会真正达到你所要的目标。Asterisk最擅长的就是做一个 IPPBX，当然有人用它来做VoiceMail服务器、IVR服务器、会议服务器、中继网关、SIP SERVER、发卡系统等等。另外，Asterisk也有H323的支持能力，但是你不能把它的H323当作GK，而只能作为一个支持H323的端点设 备。Asterisk能作什么，建议你多听很多专业人士的介绍，别想当然。Asterisk是动态的，它不断推出新的版本，比如T38的支持能力，可能在 不久的将来，就有版本完全实现。<br>      <span style="font-weight:bold"><wbr />3. 如何学习Asterisk？</span><wbr /><br>      在学习Asterisk之前，你必须了解互联网和通信网两方面的知识。你必须知道一个普通电话是如何打通的，也必须知道一个VOIP网络是如何架构的。<br>      Asterisk爱好者协会花了很大力气集体翻译了那本介绍Asterisk的书——Asterisk，the future of telephony，我们翻译成Asterisk，未来电话之路，希望初学者先好好学习一下。<br>      我们在第一个问题中已经提到，不要把Asterisk看作一个产品，也不要指望有个工程师无偿长时间地帮你解决所有问题，也不要指望一本书把你的问题全部 解答。Asterisk本身就是一个开源的代码，具有很多分支，每个人看到它的角度都可能是不完全一致的，因此最好的学习方法就是根据客户的需求自己摸 索。<br>      经常到<a href="http://www.asterisk.org/" target="_blank"><span style="color:#0000ff;line-height:1.8em;">www.Asterisk.org</span><wbr /></a><wbr />，<a href="http://www.voip-info.org/" target="_blank"><span style="color:#0000ff;line-height:1.8em;">www.voip-info.org</span><wbr /></a><wbr />去 看看，很多人把自己的问题提在上面，有一些专业人士帮你解答。你需要注意，这两个网站都是.org的，也就是说，是一个组织的，不是一个企业 （.com），国内也有不少和Asterisk有关的网站，通过baidu或者google的搜索你都能看到，但是国内这方面的人气和专业程度都远远不能 和<a href="http://www.voip-info.org/" target="_blank"><span style="color:#0000ff;line-height:1.8em;">www.voip-info.org</span><wbr /></a><wbr />相比。当你开始摸索，就去中文网站，<a href="http://www.asterisker.cn/" target="_blank"><span style="color:#0000ff;line-height:1.8em;">www.Asterisker.cn</span><wbr /></a><wbr />里面好好研究一下有相关经验的人写的文档，把配置文件做修改后拿一些终端来做测试，不断丰富你的相关知识。<br>      <span style="font-weight:bold"><wbr />4. 目前用Asterisk开发的产品都有哪些？商用情况如何？</span><wbr /><br>      中国市场是个很有特点的市场，其规律和欧美的市场规律差别极大。对于中国的消费者而言，开源往往被人认为等同于免费，那么不管你在上面做多少人类劳动，他 们都认为你应该免费。这就造成了中国的VOIP厂家们，在IPPBX的开发上基本都用Asterisk，但是谁都不愿意承认自己是基于Asterisk 的。国内具体哪些厂家在这个基础上开发，我不便多讲，但是只要功能比较复杂的，都是在其上经过相当繁琐的改造工作的。从全球情况看，Asterisk上做 开发的公司不完全统计应该在1000家以上，其开源的代码和开放的架构以及丰富的业务基础，让很多小厂家找到了可以做复杂业务的平台。Jajah， Voipdiscount等等，都是基于Asterisk开发的。Asterisk的SIP协议栈的兼容性应该经过大量实践的检验，是相对成熟的。商用情 况，无论是在国外还是在国内都比较多，但是在国内，出于对这些厂家的商业保护，我还是不说他们的名字了。<br>      <span style="font-weight:bold"><wbr />5. IPPBX能作什么？在未来的市场上是否有空间？</span><wbr /><br>      很多人把IPPBX的理解定位比较死，这往往和他们以前接触的某款IPPBX有关。其实，技术术语是技术术语，产品是产品，相互之间虽然有关系，但是并不 能狭隘地理解。某个厂家说我IPPBX长这样，那么所有的IPPBX都必须长这样。实际上，IPPBX长相差异很大。有的IPPBX有丰富的外部接口，s 口、o口、E1/T1口、以太网口等等，有的就没有这么丰富，甚至有的就只有一个以太网口。没有谁好谁坏的问题，只有谁更适合哪类客户的问题。<br>      IPPBX严格的界定至今没有，有的人说以IP为核心的才是IPPBX，可是有很多PBX厂家，做了一块以太网板子，就说自己是IPPBX，你也不得不承 认它具有一定的IP功能，也是IPPBX。我说这么多，那么大家理解IPPBX恐怕会更加开放。很多人把IPPBX做了分类，有的做了“代”的划分，比如 第一代是PBX插以太网板子，二代呢就是TDM和IP混合核心，三代呢，就是纯IP核心。以Asterisk为基础的IPPBX，往往属于第三代。它应该 完全以IP为核心，不科学地说，路由器内加了语音功能，而不像传统的PBX厂家，程控交换机内加了数据功能。<br>      那么什么才是未来市场的趋势呢？我想，各执一词是不可避免的。但是，有一点是肯定的，只有发挥了IP为核心的技术优势和产业优势的，才是未来有发展前途 的。那么为什么PBX已经很成熟了，前面还非要加一个IP呢？其实，这和NGN网络取代PSTN网络一样的原理——增值业务的开放性和组网的灵活性。<br>      IPPBX一定要以IP为核心，才能真正把增值业务开放出来让更多的人参与开发和运营，而不是设备厂家独有的技术，能否开发增值业务都取决于这个厂家的实力和技术架构。<br>      很多厂家说，我的IPPBX功能强大，在现在来看可能更让用户购买着放心，可是从长远讲，IPPBX应该提供的是开放的架构而不是业务本身，它应该可以吸纳各种其它机构开发的业务，而不是这个厂家自己做的业务。如若不然，IPPBX根本没有取代PBX的意义。<br>      随着越来越多的人意识到，业务必须向下推，IPPBX就更有其在企业行业通信网上的现实意义。未来的每个企业可能都有不同的IPPBX，虽然大的架构差不 多，但是每个企业自身的业务千差万别。有的要和呼叫中心结合，有的要和CRM结合，有的呢，和ERP结合，还有的和IM结合。在未来的融合通信方面， IPPBX要起到重要作用。<br>      有人说IPPBX过时了，其实那是针对某种类型的IPPBX而言，而真正的IPPBX时代还没有到来。很多媒体上传言IPPBX的销量已经大于PBX，这 个说法也有一定问题。毕竟现在PBX插上IP卡就被称为IPPBX，如果照这么统计，用IPPBX的用户的确太多了。所以说，那只是商业吵作造成的，而真 正能吸纳各种增值业务的开放的IPPBX，目前并没有在全球范围内大规模流行开。一个简单的道理，现在新成立的公司，有几个老板说，我要IPPBX，别买 PBX？正如NGN网络在全球的应用一样，IPPBX的部署需要一个过程，不要看细节，看现状，你只要看到整个产业方向的走势，你就会看到IPPBX的美 好前途。<br>      Asterisk的设计初衷，就是要以纯粹的IP为核心，在组建企业PBX的用户群中找到自己的生存价值。而这一点，是符合整个技术和社会历史潮流的。<br>      <span style="font-weight:bold"><wbr />6. Asterisk和Trixbox有何关系？哪个更好？</span><wbr /><br>      这是大家最爱问的问题之一。他们的区别大家都能看出来，一个有界面，一个没有。Asterisk是基础，Trixbox是在此基础上的一个封装。 Trixbox以前叫做AAH，Asterisk at Home，2006年6月才改名，目前在不断发布新的版本（参见<a href="http://www.trixbox.org/" target="_blank"><span style="color:#0000ff;line-height:1.8em;">www.trixbox.org</span><wbr /></a><wbr />）。<br>      对于初学者来说，或者只是简单应用者来说，Trixbox已经足够了，界面相对友好，配置相对好理解。而Asterisk就相对比较复杂，配置起来还要学会那么多的命令和参数。<br>      但是对于开发者而言，还是要研究Asterisk本身的。<br>      你究竟要使用什么，是要根据你的具体需求，别直接问别人，哪个更好？这个世界上，二值逻辑的东西真的不多。<br>      <span style="font-weight:bold"><wbr />7. Asterisk能省钱吗？能做回拨吗？能计费吗？能做软交换平台吗？能支持H323吗？Asterisk能做什么增值业务？可以在网上下载计费吗？</span><wbr /><br>      提出此类问题的多之又多，举不胜举。在这里统一做一个回答。<br>      首先大家要理解Asterisk不是一个产品，而是一个开源代码的IPPBX基础架构，由于是开源的，任何一部分你都可以修改，它的代码你可以修改，它的 协议栈你可以换，它的所有东西你都可以变。夸张一点说，Asterisk是一个你可以控制的人，脑袋你可以换，鼻子你可以换，眼睛你可以换，也可以把脑袋 放到脚上，只要他能满足你的独特需求（当然有些需求可能会有点变态），你想怎么折腾就怎么折腾。那么这么以来，你可以把它所有的东西都换了，当然结果就是 你根本没必要用Asterisk了。当然我这么举例是个特殊的情况，一般来说，你修改其中的某些部件，加入你觉得有必要加入的功能，这就应该能做你最想做 的东西了。Asterisk能作任何事，就是这个原因。回拨，你把相关的东西做了修改就可以，计费，该加上的就加上，如果你把管理界面和呼叫流程做好，就 可以做软交换平台。<br>      这里专门提一下H323。Asterisk是海外的东西，和国内正好相反，SIP是海外的主流，并且符合大的技术趋势，而H323的复杂性以及业务的单一 性造成SIP成为未来NGN网络发展的主流协议，那么H323只能是辅助协议。而国内的情况，H323占到了绝对主流，大量盗版软交换的应用，使H323 的地位比较稳固，而SIP协议相对应用较少（据说SIP占全部在网应用的10％以内）。Asterisk在H323方便做的不强，无论是openH323 还是ooh323（在addons里面），在性能方面都不十分让人满意。但是已经有不少人在上面进行二次开发，增强了相关功能。<br>      Asterisk能省钱否的问题，很难回答。这个问题问的很笼统。如果你是厂家，用Asterisk为基础开发，让你节省大量时间；如果你的公司是做运营 的，单独拿Asterisk做运营必须加入相关的计费等内容，这个还需要修改，直接用，恐怕有困难。国外有很多在Asterisk基础上开发出来的东西， 如果你去网上淘一淘，说不定会有收获，很多都是开源的。但是不要期待过高，是否适合你应用就是另外一回事了。客观地说，99％以上的国外做的计费系统、管 理系统都不完全满足你的需求。所以，你还是需要等待国内有相关的厂家做出更适合市场需要的产品吧。<br>      <span style="font-weight:bold"><wbr />8. Asterisk和digium的板卡有何关系？</span><wbr /><br>      开源不代表不赚钱，开源的目的就是东方不亮西方亮，靠硬件赚钱，那就是板卡。digium是个公司，<a href="http://www.digium.com/" target="_blank"><span style="color:#0000ff;line-height:1.8em;">www.digium.com</span><wbr /></a><wbr />， 看到了吧，是.com。公司是要赢利的。很多国外的人对digium是崇拜的，所以再贵他们也要买digium的卡。Aserisk不是必须插板卡的，但 是如果有板卡，IPPBX的外部接口会更丰富。很多公司在开发自己的板卡，那么需要自己写适合Asterisk的驱动程序，这样做的好处是，你可以根据自 己的开发实力定制digium没有的板卡，即使有，你做出的板卡一定比digium的价格低。其它一些公司的板卡也能兼容Asterisk，比如 EICON，比如YATE。有机会大家可以查查相关的网站资料。当然，digium的板卡技术含量不高，大家买他，很多人是因为对asterisk的尊敬 和崇拜。其实很多clone卡，很多抄板子的卡，完全能胜任配合Asterisk的工作。唉，没有办法，什么高科技的东西放到中国，一定会&quot;发扬光大&quot; 的。对此有兴趣的朋友可以予以关注。<br>      <span style="font-weight:bold"><wbr />9. Asterisk在国际国内的发展势头如何？</span><wbr /><br>      Asterisk在全球有众多公司在二次开发，再骂Asterisk这个不好，那个不好都无济于事，人的接受能力和程度就是如此，哪个都有缺陷，这个不可 避免，我们接受它也不完全是随遇而安，很多公司在Asterisk上已经获得了成功，中国的厂家已经陆续在此基础上制造自己的符合国情的IPPBX，期待 着IPPBX大面积应用的时代赶快到来！趋势如何，不用我再费篇幅了吧！<br>      在这里再介绍几个和Asterisk发展和支持有关的网站吧：<br>      <a href="http://www.asteriskvoipnews.com/" target="_blank"><span style="color:#0000ff;line-height:1.8em;">http://www.asteriskvoipnews.com/</span><wbr /></a><wbr /><br>      <a href="http://www.jaredsmith.net/" target="_blank"><span style="color:#0000ff;line-height:1.8em;">http://www.jaredsmith.net/</span><wbr /></a><wbr /><br>      <a href="http://www.asteriskguru.com/" target="_blank"><span style="color:#0000ff;line-height:1.8em;">http://www.asteriskguru.com/</span><wbr /></a><wbr /><br>     <span style="font-weight:bold"><wbr />10. 我想了解和熟悉Asterisk，我该准备什么环境？</span><wbr /><br>     如果您是Asterisk的新手，想了解一下Asterisk；我们建议您做如下准备：<br>     一台具备PCI插槽的PC机，CPU：Pentium 300MHz以上，内存256M以上，硬盘4G以上。一般来说，现在在用的能安装Windows的PC机应该都能够满足这个配置要求。另外准备一个您最熟 悉的Linux分发盘(比如：Redhat、CentOS、Fedaro Core、Ubuntu等等）。如果您没有另外的PC机来安装Linux，又不希望放弃使用现在的Windows系统；我们建议您准备一个虚拟机软件(比 如：VmWare)；在您现在的PC上安装虚拟机软件。新建一个虚拟机，为Linux系统分配至少4G的硬盘空间。然后在虚拟机上安装Linux系统；之 后，在此虚拟机上安装Asterisk。虚拟机安装时，为了避免网络问题，我们建议您使用Bridge Network。<br>     除了PC机外，您还需要准备一个<span style="font-weight:bold"><wbr />SIP软电话</span><wbr />软件。您可以从网络上下载各类<span style="font-weight:bold"><wbr />SIP软电话</span><wbr />。比如：eyeBeam、Express Talk等等。<br>     有了上面这个环境，基本上您就可以使用Asterisk的VoIP的能力了；但如果您需要Asterisk与您桌面的电话机互通，那么，您还需要准备一块 FxO/FxS的Asterisk兼容的模拟卡。如果您希望使用E1和电信网络相连，还需要准备Asterisk兼容的E1卡。<br>     环境准备完成后，您可以参考相关的资料，进行Asterisk的安装和配置。建议您参考本站的Asterisk教程。<br><span style="line-height:1.8em;"><span style="font-weight:bold"><wbr />     11. 我按照网络上的某个教程进行安装/编译，但为什么我出现的问题(提示)不一样？为什么各教程的细节不一致？究竟哪个是正确的？</span><wbr /></span><wbr /><br>     提出这个问题的新手通常是对Linux不熟悉造成的。我们知道Linux是一个开源的操作系统，任何人都可以对它进行重新修订和封装。其实这也导致了 Linux发行版本众多，相互不能完全一致的问题。这个问题也是Linux长期存在的问题。同样，由于操作系统发行版的原因，您的操作系统的相关环境，比 如采用的软件包的版本等都会与教程上采用的不完全一致，从而导致出现的问题也不一致。<br>     另外，Asterisk本身也是在发展过程中，Asterisk从应用广泛的1.2版到1.4版，中间出现了很大的变动，版本之间并不能完全兼容。同时， 就像Linux一样，由于Asterisk是一个开放的平台，并不是一个封装完好的产品，因此，Asterisk官方发布包中所包含的插件在不同的版本也 不完全一样。这些方面都会导致您的安装可能和教程所示的情况不能一致。<br>     为了避免上述的问题，我们建议您完全按照教程的要求去准备相关的软件版本；不要贪图最新的包，等你熟悉了，再下载最新的包来研究，这样，同时也可以了解Asterisk的发展历程。 <!--v:3.2--> ]]></description>
<category><![CDATA[技术]]></category>
<author><![CDATA[571350@qq.com(飞鱼)]]></author>
<comments>http://571350.qzone.qq.com/blog/1256796177#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Thu, 29 Oct 2009 06:02:57 GMT</pubDate>
<guid>http://571350.qzone.qq.com/blog/1256796177</guid>
</item>

<item>
<title><![CDATA[茶几啊。。。]]></title>
<link>http://571350.qzone.qq.com/blog/1256211109</link>
<description><![CDATA[<br><span style="font-size:13px;line-height:1.8em;">大家不要比茶几了，新茶几诞生！今天车子被刮，暖气跑水，新地板全淹，还要给楼下大妈弄墙。。。</span><wbr /> <!--v:3.2--> ]]></description>
<category><![CDATA[个人日记]]></category>
<author><![CDATA[571350@qq.com(飞鱼)]]></author>
<comments>http://571350.qzone.qq.com/blog/1256211109#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Thu, 22 Oct 2009 11:31:49 GMT</pubDate>
<guid>http://571350.qzone.qq.com/blog/1256211109</guid>
</item>

<item>
<title><![CDATA[雷死人的成都台和四川台]]></title>
<link>http://571350.qzone.qq.com/blog/1254883556</link>
<description><![CDATA[<span style="color:#663399;line-height:1.8em;">好久没看成都台和四川台老，快变成娱乐台了，好耍~</span><wbr /><br><br><span style="color:#663399;line-height:1.8em;"><br></span><wbr /><span style="color:#663399;line-height:1.8em;">胖姐帮忙</span><wbr /><br><br><span style="color:#6633cc;line-height:1.8em;">⒈有家人的18岁儿子突然在家猝死，记者跑去采访，当时儿子躺在单人床上已经死了，妈妈坐在床 边嚎啕大哭，这个时候，这个记者把话筒支过去，问了句：大姐，可惜了哇？<br></span><wbr /> <br><span style="color:#6633cc;line-height:1.8em;">⒉两口子打架，记者去调解<br>记者：你为撒子要打你老婆喃？<br>男人：我打我婆娘！<br>记者：那你为啥子要打你婆娘嘛？<br>男人：她打工回来就不准我碰了，那天晚上说做一下的，结果她给我说要喊我给她15块钱才行， 我说我没的那么多，只有10块钱，结果我婆娘就说，10块钱不得行，10块钱我连裤子都懒的脱。<br></span><wbr /> <br><span style="color:#6633cc;line-height:1.8em;">⒊有两口子结婚一个月就闹架离婚，（两口子都是农民）<br>记者问女的：你们为啥子要离婚喃？<br>女的说：狗日的这个男的之变态，他说的每天要做两道（指ML），还说晚上睡觉不准穿衣服<br>男的说：做没有嘛，做都没求做<br>女的说：杂没做喃<br>男的说：就在桌子上做过一回。。。<br>　　<br>                                                                                </span><wbr /><span style="color:#6633cc;line-height:1.8em;">相亲进行时</span><wbr /><span style="color:#6633cc;line-height:1.8em;"><br></span><wbr /><span style="color:#6633cc;line-height:1.8em;">        有个太婆快80了，比我外婆还老。穿的花花绿绿的，带着假发，如果没带就是很短的白发，还化起妆，记者问她爱好，她说她喜欢在家跳芭蕾舞……<br>　　最牛X的是，自己年龄已经老到不行了。还硬要给她找一个20左右，身材好的小伙子当男朋友。为此相亲进行时为她做了很几期节目。<br>　　相了无数次亲，印象最深的一次是，有个30左右的小伙子勉强和她见面。结果记者问她如何，她居然说 ,不太满意。一是年龄偏大，二是身材不够健壮。我当时想，要那么健壮你得行哇?=_=<br>　　最扯的是，她还非常有理的说。她这是自由的选择。还说反对和嘲笑她的人都是旧时代的，没有思想之类的。<br>　　最后有次终于相亲成功一次。那男的带她到游乐园耍。她化浓妆，穿的多嫩，在游乐园里还让那个男的帮她带个兔子耳朵头饰。粉红色的那种……<br>　　</span><wbr /><span style="color:#6633cc;line-height:1.8em;">                                                        〈</span><wbr /><span style="color:#6633cc;line-height:1.8em;">630全接触〉〈新闻现场〉〈晚报10点半〉</span><wbr /><br><span style="color:#6633cc;line-height:1.8em;"><br>        1、有一次记者去采访一个车祸现场，司机被卡在驾驶室里面动不了，浑身是血，那个男记者的跑 过去很关心地问：“师傅，你痛不痛喃？”<br>　　<br>　　2、有次有个精神有点问题的男的跳楼了。他父母都赶过来。等他妈哭够了以后记者跑过去拿话筒 对倒她问：“请问你现在有啥子想法喃？”<br>　　<br>　　3、有一次记者暗访一个卖二级保护动物藏猕猴的年轻小伙子，跑到他家楼顶上谈交易，那个小猴子就在边上跑来跑去的。结果那个小伙子的妈跑上来喊他好像是吃饭之类的，那个小伙子多不耐烦的说：“哎呀，你慌锤子我们在谈事情，搞紧下切！”他妈就发飙了：“你凶啥子凶！老子甩你两脚尖！”<br>　　<br>　　4、有一次川台有个女主播把有条不紊（wen）读成有条不絮（xu），我小学的时候犯过同样的错， 但是。。。<br>　　<br>　　5、有一次有户人家着火了。记者赶到现场之后火已经被扑灭了。记者采访那家女主人，她说正在 煮饭的时候家里就起火了balabala之类，一段话听完之后那个女记者的第一句话就是：“那你们的饭煮糊没有喃？”<br>　　<br>　　6、又是车祸现场，昏迷的伤者从变形严重的车上救下来的时候明显小腿已经严重变形歪倒一边了，女记者跑去很傻很天真地问：“医生，请问他是骨折了哇？”医生：“……-_-嗯。”女记者又问：“严不严重喃？”医生：“-_-……”女记者：“那他有没有生命危险喃？”医生：“……随时都有。 ”然后那女记者还补一句：我没有耽搁你嘛？<br>　　<br>　　7、有一次有一对夫妻吵架，男的气得跳楼（忘了是几楼了），结果跳下去之后又爬起来然后又遭 路过的车子撞倒，他老婆跑下楼去看他咋样了。结果他爬起来就给他老婆一耳屎。然后大家把那个男的送到医院去检查结果医生说只有皮外伤。。。<br>　　<br>　　8、有一次捣毁荷花池一个骗子店铺，记者揣起针孔摄像机扮路过的人被骗进去然后被换了假钱然后他假装识破结果被店里的人打了几下然后他就退了出来。取好证过后，pol.ice就行动了，把那些人都抓了。然后那个男记者就多兴奋多牙尖地跑到开始打了他的那个女的的面前去说：“你打我得嘛！你多歪 得嘛！”。。。<br><br>9、记得一期，有个神经有问题的人以为自己有病，就趟在路上，大家打了120，就进了医院，没想到过了2天就跑了，牛X的是他又趟在路上等别人打120，等人接他入院，重复了几次，记者来受访他他就装痛苦状，并华丽的倒下，喜剧的是当镜头移开了他又爬起来坐在椅子上，记者过了2天去医院看 他，这位大哥又跑了，我估计这位大哥在享受被抢救的过程。<br><br>　　10、还有一期，有个哥哥自称是诗王，记者拿了篇杜浦的诗念给诗王听，诗王说是李白的。然后就 从诗的韵律到意境开始分析……最关键的是那记者还用很崇拜很鼓励的眼神盯到起那GG使劲看……<br>　　<br>        11、一次记者采访一个超市打架的事情。正围观呢。一高壮二十左右男挤过来大声说：我晓得是杂 个回事，过来啊~哎~过来啊~过来采访我啊~~~~~~围观的人群中飘过来一句话:又丑又胖的不许上电视<br><br>        12、两口子打架 一女记者的采访那被打之女（四川话）：“你男人为啥子打你” 女：“他说我偷 人”记者：“那你偷没得啊”女的：“。。。。。。”。。。记者：“你说啊。你说你偷没得嘛”<br><br>        13、一哥们遭车祸，半昏迷在现场等救护车中，那记者一直在轻轻但很坚持的捅他，挣扎了半天张 开眼，一话筒支面前，问他感觉如何，登时又翻白眼晕过去了。<br><br>14、pol.ice清理那些要饭的,要把他们拉上警车,这个时候记者上前采访那些乞丐,乞丐很有经验地接受采访,pol.ice叔叔不耐烦了,要把那些人拉上去,有一个男乞丐很镇定地对pol.ice说&quot;别急嘛,没看我正接受采访呢吗?&quot;那pol.ice的表情很无语.<br><br>        15、有一天吃晚饭的时候看到新闻现场还是哪个台在放狗抓耗子，抓了半天也没见狗抓到啥子东西 。于是换台。过了一会儿再换过来，此台还是在放狗抓耗子……并且终于让它抓到了……于是摄像大哥 很激动地把这个镜头重复放了好几遍……<br><br>        16、镜头一:记者：你偷自行车干什么呢？<br>　　　　小偷：没有钱用了。<br>　　　　记者：你没有钱也不能偷三<br>　　　　小偷：不就是偷他个自行车嘛，我赔他个就是了嘛<br>　　　　记者：你没有钱怎么赔他喃？<br>　　　　小偷：未必喊我再切偷一辆啊？<br><br>17、一个小女娃娃记者去采访一家太婆的猫跑到树子上去了几天没吃饭就是不下来，那个女记者边 在树子下看，边指到那只猫边特单纯的问周围的大爷大妈“爪子了喃？爪子了喃？哎？它杂个就是不 下来喃？”一大爷答曰：“爪子了你还要问啊，不下来你问它撒”……<br>　　<br>                                                                                    </span><wbr /><span style="color:#6633cc;line-height:1.8em;">《谭谈交通》</span><wbr /><span style="color:#6633cc;line-height:1.8em;"><br>    1、谭乔拦下两个横着扛梯子准备闯红灯的人，刚教育了他们几句，看起来比较老实那个就急倒指 到另一个人说：“是我们老板的主意！”，然后那个老板就默默地用很幽怨的眼神看着他身边这位很纯 很天真的工人。。。<br><br>    2、谭乔拦下了两个乱坐三轮车的老年夫妇。谭乔问他们结婚好多年了？那老头没醒火样子，结结 巴巴说是三四年。结果那老太婆在一边狂骂：“狗日的老瓜娃子，我们的娃儿都三十多岁了，还才三四 年！？警官，你不要理他，他瓜的”<br><br>    3、谭交警抓住一家骑电瓶车的，小女娃娃蹲在前面，老爸骑车，老妈坐在后面，谭警官问人家会 不会唱吉祥三宝，，说他改了个危险三宝，而且当声唱给人家听，全文如下，<br>　　爸爸，电瓶车可以载人吗？<br>　　不能，<br>　　那为什么你载着我和妈妈？<br>　　我错了，<br>　　我们全家就是危险的一家，啊！！<br><br>    4、有个大爷在快车道放风筝，谭谈过切说了人家一句：“你很傻很天真！”<br><br>5、谭交警抓住一个骑电动车的人，他超宽超载的运了几块多重的大木板，谭乔就喊他下来，问他：你这么大个木板，是咋才能让它在这个小小的电动车上不倒的喃？那个人老实巴交地说：手掌好！谭乔说？安？首长好？那人又回答一次：手，掌好。谭乔当时就纳闷的说：我是pol.ice不是首长<br><br>    6、有一次谭交警逮到一个骑电车搭人，好象还拉了一根绳子带另外个车的，问他这样骑起有啥子感觉，那人说没什么感觉。然后谭哥说了句：弄么危险你们不心痛个人还是心痛哈你们的电瓶车嘛。<br><br>7、谭警官刚抓了一个违章的，正在进行教育，结果旁边有一群蹬火三轮的看热闹，突然其中一个人认出谭乔了，一边狂笑一边用手指到谭乔：“哈哈哈哈哈哈哈哈，我认得到你，哈哈哈哈哈哈哈哈哈哈，你是那个#￥#%￥#%，哈哈哈哈哈哈.....”于是镜头也不拍违章者了，转拍这个喜剧人物，此人继续狂笑，继续指到谭乔转头跟周围的同行说：“哈哈哈哈，我认得到他..........”谭乔毛了，憋了半天说了句：“你等我们拍完了再说嘛！<br><br>    9、有一盘谭哥逮了个骑三轮车收废品超载的黑夸张的。问他载那么高的货骑飞快有啥子感觉？那 兄弟多腼腆的说：没啥感觉，就是有点甩...＂谭哥接了句，对的，你这样子是有点帅，不过不流行了……<br>    <br>10、谭乔抓到一个骑电摩的人拿了多长一根杆子，谭乔正抓到他，说你以为你是张飞嗦，人家拿刀，你拿杆。话没说完旁边彪过一个骑电摩的，扛了更长一根梯子……第一个被逮的多委屈的说，他还不是拿了多长一把梯子的嘛。谭乔又抓到拿梯子的说你也以为你是张飞嗦....还没说完拿梯子的师傅很不 满的说了一句张飞有我长的称抖啊？<br><br>    11、谭乔有一期抓了一个把自行车上面装个电机改成电动车的，就问他,你车速这么快怎么刹车喃?<br>    那个人说:我有脚刹噻~<br>　　谭乔:啥子脚刹哦?哦，我晓得了。<br>    然后镜头就指到起那人的脚，结果那个人穿了双布鞋<br>    谭乔：你的脚刹的刹皮该换的咯……都磨淤咯<br><br>    12、一次谭乔拦下个大街上骑赛摩的小伙子，小伙子很紧张，但是又想讨好谭乔，于是有了下面的<br>对话：<br>　　小伙子：谭叔叔好！（小伙子貌似20左右）<br>　　谭乔：叔叔？我有那么老吗？（谭乔估计也不超过30）<br>　　小伙子尴尬的笑着说：哦，谭哥，谭哥。我晓得你，我们全家都是你的偶像！<br>　　谭乔：.......（一脸茫然)<br>　　小伙子立马说：哦，哦，是你的粉丝<br><br>     13、在成彭路上逮到一个骑火三轮儿的人抓到前头一个骑电马儿的车屁股，火三轮儿里面还坐了个 中年妇女，然后遭谭乔逮到公路边上问话。内容如下：<br>　　 谭：诶、诶、诶。。。。咋个的安？小伙子你晓不晓得你这样很危险，违反交通条例了<br>　　 火三轮：（特淳朴的那种）我不晓得，只想得这样省力<br>　　 谭：那你觉得这样危险不喃？<br>　　 火三轮：（继续淳朴）不晓得，我都没读过啥子书<br>　　 这个时候火三轮儿上中年妇女下车说话了<br>　　 中年妇女：给你说了危险危险，喊你表扯到，你咋个不听喃，看哇遭警官逮到了哇！<br>　　 谭：请问你是？？？？<br>　　 中年妇女：我是他老板。<br>　　 谭：哦，搞了半天你是领导唆？来来来，领导握个手！<br>　　 谭：领导你们是搞啥子的安？<br>　　 中年妇女：我是开废品收购站的。<br>　　 谭：哦，那应该是站长了，站长你好你好！<br>     中年妇女：（笑嘻咯）警官你说哪儿切咯？我做个小生意的，累！不比的你们坐办公室，扭都不扭就有钱挣（说完个人就瓜起咯）<br>     谭：（脸一哈就垮了）站长你在说啥子哦<br>     中年妇女：（打哈哈）哈哈哈哈，开玩笑！（岔开话题）警官你看算了要的不嘛？我们是头盘犯。（指到记者）哎呀~警官，喊你们同事不要拍了嘛<br>     谭：（脸继续垮起）要不的……<br>　　<br>                                                                                        </span><wbr /><span style="color:#6633cc;line-height:1.8em;">综合类节目</span><wbr /><span style="color:#6633cc;line-height:1.8em;"><br></span><wbr /><span style="color:#6633cc;line-height:1.8em;">        成都台的一个比较吃香的节目，一个长的多甜的女娃娃街上随便逮个人就问问题，回答对了就有红 包拿，一般里头是10块钱。今年元宵节那一期记者拦了两个同行的大妈，这两大妈估计电视看的不多没认出这个小妹儿。<br>　　问：元宵节是吃饺子吗？答：不是。<br>　　又问：那吃什么？答：吃元宵，也就是汤圆。<br>　　记者递给她们一个红包：恭喜你们，答对了，送上红包，是真的哦。<br>　　然后记者走开了，但是摄像机没停，可能是想抓拍两大妈的反应。<br>　　其中一大妈拆开红包一看，是真的，有10块钱。撇头看看另一大妈羡慕的表情，说：我们分了吧。<br>　  另一大妈点点头，拿红包的大妈就从包里摸出5块钱给了另一大妈。<br>还是上面那个节目<br>　　主持人问一过街大爷&quot;你知道武侯祠是纪念李白的还是杜甫的?&quot;<br>　　大爷随口就是说&quot;纪念李白的&quot;<br>　　主持人说&quot;哈,错啦,是纪念诸葛亮的&quot;说完就快速闪人啦,留下一个抓狂的大爷<br>（非常冷的一个脑筋急转弯……）<br>　　<br>　　一个外景拍摄的节目，名字我忘了<br>　　有次请的嘉宾是薛之谦!<br>　　让他装成路人带起一包文件,从某个地方过,然后喊他装着文件掉了自己却不晓得,看看有没有好心的路人帮助他,摄象机在很远的地方暗中拍摄,<br>    好,开始了~薛GG就在那条街上来回的走了N次!东西掉了N次!但是都很少有人去给他说!<br>　　当第N次过后仍然是这个结果时,导演说,这个地方不行,叫薛之谦在这做最后一次测试,然后就换地方!<br>　　就在这个时候,精辟的事情发生了!<br>　　就在薛GG走的那条小街的街边上有个小卖部!外头坐着个正在打毛线还是晒太阳的老妞er!她在这个 时候轻描淡写的吼出了一句非常有意义的话:&quot;妈唷这个娃娃脑壳有兵乓索!东西紧到掉紧到掉,瓜的索.&quot;<br>　　薛GG仿佛听到了在说他,但是他可能听不懂四川话,然后摄像机这边有人听到了这句话，很经典了接了句“我日……”</span><wbr /> <!--v:3.2--> ]]></description>
<category><![CDATA[个人日记]]></category>
<author><![CDATA[571350@qq.com(飞鱼)]]></author>
<comments>http://571350.qzone.qq.com/blog/1254883556#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Wed, 07 Oct 2009 02:45:56 GMT</pubDate>
<guid>http://571350.qzone.qq.com/blog/1254883556</guid>
</item>

<item>
<title><![CDATA[读《如何成为产品设计大师》有感(转)]]></title>
<link>http://571350.qzone.qq.com/blog/1253010579</link>
<description><![CDATA[读《如何成为产品设计大师》有感<br>一、电话的设计师叫Henry<br> <br>最近在看美国作家Bruce Hannah的一本书《Becoming a Product Designer（如何成为产品设计大师）》。<br> <br>书中的前言说：“亚历山大·格雷姆·贝尔发明了电话，而产品设计师亨利·德雷福斯（Henry Dreyfuss）则赋予了电话现代的形式。”<br> <br>提起电话这项伟大的发明，我们总是只记得一个名字：贝尔，极少有人知道现代电话的设计师德雷福斯。<br> <br>但是如果电话没有一个合适的形式，它怎能得以迅速的普及？<br> <br>我无法得知德雷福斯先生对此的看法，但正如前言最后所说：“任何一个真正的产品设计师都会告诉你，设计一个产品堪称一个人生命中最棒的经历。”，也许德雷福斯已经知足，因为他拥有了最棒的经历。<br> <br><div style="text-align:center;">二、什么是产品设计</div> <br>在读过11位产品设计大师对“什么是产品设计？”的回答后，有了一些启发：<br> <br>1. 产品设计师赋予产品独特的“个性”，为产品注入灵魂，产品不再是冷冰冰的“存在”，而是能够与使用者产生“交流”的“生命”。<br> <br>2. 犹如创造生命一般神奇，你设计的每一个产品都有它独特的性格和外型，就像是自己的孩子。<br> <br>3. 产品设计要达到以下几个目的，如下图所示：<br><wbr /><a href="http://b22.photo.store.qq.com/http_imgload.cgi?/rurl4_b=d4d22d06065f77ebba6542d70ffbf23f6dc13341316f4712c0678667c86b78015ec53a9181dc5bd4cf801dfe86d6758a0b02576c6ac11b545565f6aa7e180425b762f84244b1127e097122cdb941deef6d4dd018" target="_blank"><img style="width:480px;height:308px;border:0;" src="http://b22.photo.store.qq.com/http_imgload.cgi?/rurl4_b=d4d22d06065f77ebba6542d70ffbf23f6dc13341316f4712c0678667c86b78015ec53a9181dc5bd4cf801dfe86d6758a0b02576c6ac11b545565f6aa7e180425b762f84244b1127e097122cdb941deef6d4dd018" /></a><wbr /><br> <!--v:3.2--> ]]></description>
<category><![CDATA[个人日记]]></category>
<author><![CDATA[571350@qq.com(飞鱼)]]></author>
<comments>http://571350.qzone.qq.com/blog/1253010579#comment</comments>
<qz:effect>134218241</qz:effect>
<pubDate>Tue, 15 Sep 2009 10:29:39 GMT</pubDate>
<guid>http://571350.qzone.qq.com/blog/1253010579</guid>
</item>

<item>
<title><![CDATA[X200驱动顺序]]></title>
<link>http://571350.qzone.qq.com/blog/1248505955</link>
<description><![CDATA[本子用了好久，今天重做了系统，在此记录一下X200驱动的顺序。 <br>转载： <br>1、请尽量按照下列驱动的排列的先后顺序安装；下载完的驱动程序文件是一个可执行文件，但是双击后仅是释放文件的过程，并未安装，默认释放到C:\DRIVERS\WIN\***目录下，请到释放文件目录下继续安装。 <br>2、设备管理中常见的未知设备一般为ACPI电源管理器和TPM安全芯片，如果出现未知设备，请首先尝试安装其驱动。 <br>3、GHOST安装的系统有可能存在驱动无法安装的情况，建议不要使用GHOST安装系统。 <br>附：BIOS中更改硬盘模式方法： <br>在安装Win XP之前，需要在BIOS中将硬盘改为兼容模式，否则在安装时会提升找不到硬盘或蓝屏，修改方法为：开机屏幕上出现ThinkPad标志时按F1进入BIOS—&gt; Config—&gt;Select SerialATA (SATA)把AHCI改为后按F10保存退出即可。 <br>1、Intel主板驱动程序<a href="http://think.lenovo.com.cn/support/driver/detail.aspx?docID=DR1221303651950&amp;docTypeID=DOC_TYPE_DRIVER" target="_blank">http://think.lenovo.com.cn/suppo ... eID=DOC_TYPE_DRIVER</a><wbr /> <br>2、显卡驱动程序<a href="http://think.lenovo.com.cn/support/driver/detail.aspx?docID=DR1218538375607&amp;docTypeID=DOC_TYPE_DRIVER" target="_blank">http://think.lenovo.com.cn/suppo ... eID=DOC_TYPE_DRIVER</a><wbr /> <br>3、以太网卡驱动程序<a href="http://think.lenovo.com.cn/support/driver/detail.aspx?docID=DR1221114426897&amp;docTypeID=DOC_TYPE_DRIVER" target="_blank">http://think.lenovo.com.cn/suppo ... eID=DOC_TYPE_DRIVER</a><wbr /> <br>4、Intel PRO无线网卡驱动程序<a href="http://think.lenovo.com.cn/support/driver/detail.aspx?docID=DR1221197254747&amp;docTypeID=DOC_TYPE_DRIVER" target="_blank">http://think.lenovo.com.cn/suppo ... eID=DOC_TYPE_DRIVER</a><wbr /> <br>5、声卡KB888111补丁（设备管理器中显示为：其他设备：PCI-DEVICE）（必须先安装此补丁，否则无法安装声卡和MODEM驱动程序）<a href="http://think.lenovo.com.cn/support/knowledge/detail.aspx?docID=26015&amp;docTypeID=DOC_TYPE_KNOWLEDGE" target="_blank">http://think.lenovo.com.cn/suppo ... =DOC_TYPE_KNOWLEDGE</a><wbr /> <br>默认释放路径：点击页面最下方附件文档下载，下载后是一个ZIP文件，先解压再安装即可。注意：只有先安装KB888111补丁，才能安装声卡和调制解调器驱动。 <br>6、声卡<a href="http://think.lenovo.com.cn/support/driver/detail.aspx?docID=DR1218539166732&amp;docTypeID=DOC_TYPE_DRIVER" target="_blank">http://think.lenovo.com.cn/suppo ... eID=DOC_TYPE_DRIVER</a><wbr /> <br>7、ACPI电源管理器驱动（设备管理器中显示为：未知设备）：<a href="http://think.lenovo.com.cn/support/driver/detail.aspx?docID=DR1197863947328&amp;docTypeID=DOC_TYPE_DRIVER" target="_blank">http://think.lenovo.com.cn/suppo ... eID=DOC_TYPE_DRIVER</a><wbr /> <br>8、TPM安全芯片（设备管理器中显示为：未知设备）：<a href="http://think.lenovo.com.cn/support/driver/detail.aspx?docID=DR1218598176029&amp;docTypeID=DOC_TYPE_DRIVER" target="_blank">http://think.lenovo.com.cn/suppo ... eID=DOC_TYPE_DRIVER</a><wbr /> <br>9、SATA驱动（设备管理器里IDE ATA控制器下的PCI DEVICE）<a href="http://think.lenovo.com.cn/support/driver/detail.aspx?docID=DR1197539101703&amp;docTypeID=DOC_TYPE_DRIVER" target="_blank">http://think.lenovo.com.cn/suppo ... eID=DOC_TYPE_DRIVER</a><wbr /> <br>双击install.cmd，然后重启计算机并按F1进入BIOS在Config—&gt;Select Serial ATA (SATA)中把选项改为AHCI，按F10保存退出，进入系统后在设备管理器中IDE ATA控制器下面的PCI DEVICE上点右键选择更新驱动程序，选择指定位置安装，并指定到C:\DRIVERS\WIN\IMSM目录搜索安装即可。 <br>10、电源管理软件（Power Manager）<a href="http://think.lenovo.com.cn/support/driver/detail.aspx?docID=DR1197863356578&amp;docTypeID=DOC_TYPE_DRIVER" target="_blank">http://think.lenovo.com.cn/suppo ... eID=DOC_TYPE_DRIVER</a><wbr /> <br>11、热键管理软件（HOTKEY）：<a href="http://think.lenovo.com.cn/support/driver/detail.aspx?docID=DR1216893127788&amp;docTypeID=DOC_TYPE_DRIVER" target="_blank">http://think.lenovo.com.cn/suppo ... eID=DOC_TYPE_DRIVER</a><wbr /> <br>本邮件仅供您的参考，如您需要其他驱动程序或软件可以登陆Think产品网站下载，网址： <br><a href="http://think.lenovo.com.cn/" target="_blank">http://think.lenovo.com.cn/</a><wbr /> 感谢您的支持！ <br><br>另：将以上的驱动装完后设备管理器里面还会有两个设备的驱动没装(依次装)： <br>Management Engine Interface (Intel AMT 4.0)：<a href="http://think.lenovo.com.cn/support/driver/detail.aspx?docID=DR1221797559707&amp;docTypeID=DOC_TYPE_DRIVER" target="_blank">http://think.lenovo.com.cn/suppo ... eID=DOC_TYPE_DRIVER</a><wbr /> <br>Local Manageability Service and Serial Over LAN (Intel AMT 4.0)：<a href="http://think.lenovo.com.cn/support/driver/detail.aspx?docID=DR1221564544812&amp;docTypeID=DOC_TYPE_DRIVER" target="_blank">http://think.lenovo.com.cn/suppo ... eID=DOC_TYPE_DRIVER</a><wbr /> <!--v:3.2--> ]]></description>
<category><![CDATA[技术]]></category>
<author><![CDATA[571350@qq.com(飞鱼)]]></author>
<comments>http://571350.qzone.qq.com/blog/1248505955#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Sat, 25 Jul 2009 07:12:35 GMT</pubDate>
<guid>http://571350.qzone.qq.com/blog/1248505955</guid>
</item>

<item>
<title><![CDATA[[推荐] XMPP协议简介]]></title>
<link>http://571350.qzone.qq.com/blog/1246295036</link>
<description><![CDATA[[推荐] XMPP协议简介 <br><br><br>　可扩展消息处理现场协议(eXtensible Messaging and Presence Protocol , XMPP)是一种基于可扩展标记语言(eXtensible Markup Language, XML)的近端串流式即时通信协议。它将现场和上下文敏感信息标记嵌入到XML 结构化数据中, 使得人与人之间、应用系统之间以及人与应用系统之间能即时相互通信。XMPP 协议已被批准为互联网即时通信协议标准。 <br><span style="font-weight:bold"><wbr />1 XMPP 的地址和数据结构</span><wbr /><br>1.1 实体地址<br>　　XMPP 整体框架下图 所示。图中, XMPP 框架的各类实体(如XMPP 客户、服务器和网关等) 的地址称为Jabber地址(Jabber Identifier, JID)。JID 惟一确定进行即时消息和在线状态信息通信的独立对象或实体, 并可兼容其他即时通信系统( 如MSN 等) 相应的实体标识及其在线状态信息。其语法规则为: [节点″@″] 域名[″/″资源], 其中各个域的长度不能超过1 023 字节, 总长度最大为3 071 字节。<br><br><wbr /><a href="http://bbs.xml.org.cn/images/files/png.gif" target="_blank"><img style="border:0;" src="http://bbs.xml.org.cn/images/files/png.gif" /></a><wbr />此主题相关图片如下：<br><a href="http://bbs.xml.org.cn/uploadfile/2008221213181638.png" target="_blank"><wbr /><a href="http://bbs.xml.org.cn/uploadfile/2008221213181638.png" target="_blank"><img style="border:0;" src="http://bbs.xml.org.cn/uploadfile/2008221213181638.png" /></a><wbr /></a><wbr /><br>　　域名指定了实体连接的XMPP 服务器。每个可用XMPP 服务器都拥有一个完整域名, 域名可在域名系统(DNS)中查找; 节点可表示某用户、一类应用或某项服务,所有节点都对应一个精确的域名; 资源用来识别属于用户的特殊对象(如设备或位置), 允许一个用户同时以多个资源与同一XMPP 服务器连接, 如<a href="mailto:yb@sdpt.com" target="_blank">yb@sdpt.com</a><wbr />/lab、<a href="mailto:yb@sdpt.com" target="_blank">yb@sdpt.com</a><wbr />/chat。<br>1.2 XMPP 的数据结构<br>　　由于XMPP 是基于XML 的协议, 因此用户可根据自己的需要定义标记, 表述几乎任何一种结构化数据, 并可方便地创建定制的应用或增加功能。<br>1.2.1 三个顶级XML 元素<br>　　XMPP 定义的3 个关键顶级XML 元素为&lt;message/&gt;、&lt;presence/&gt;和&lt;iq/&gt;(info/query), 每个元素都可以通过属性和名字空间包含大量数据, 其属性和名字空间都是XMPP的组成部分。<br>　　&lt;message/&gt;元素用来包含2 个XMPP 实体间互相发送的消息内容; &lt;presence/&gt;元素表示实体可用性信息, 可用性信息有“可用”和“不可用”2 种; &lt;iq/&gt;元素用来构建2 个<br>实体间的会话, 并且允许实体间来回传送XML 格式的请求和响应以便取得或设置公共的用户信息, 如名字等。<br>　　即时通信中名字冲突问题使用XML 的命名空间特性来解决。XML 命名空间定义了一种将XML 中使用的元素和属性与统一资源定位符(Uniform Resource Locator,URL)引用联系起来对元素和属性进行定义的方法。<br>1.2.2 XMPP 的数据结构<br>　　从结构上看, XMPP 有3 种数据: XML 流、流认证和XML 节。XML 流是实体交换XML 元素的容器,以&lt;stream&gt;开始, 以&lt;/stream&gt;结束, 是通信双方采用异步方式进行数据传输的标准方法, 在整个XMPP 通信过程中处于最外层; XML 节是实体通过XML 流传输的结构化信息单元, 在XML 流中以深度为1 的子标记开头, 并以深度为1 的子标记结束, 这些标记为&lt;message/&gt;、&lt;presence/&gt;和&lt;iq/&gt;。XML 节也可通过包含其他子元素来传送结构化信息, 是实际需要交换的信息所在地; 流认证是在XML 流中有关协商传输层安全协议、简单认证与安全层协议和服务器回拨认证协议完成通信认证、加密等目的的数据交互, 是XMPP 安全机制的重要组成部分。<br>　　XMPP 为XML 流扮演通用“传输层”的角色。XML 流中包含传输的认证信息和现场消息, XMPP 能使数据高效路由至最合适的请求源, 并最大限度地简化客户机上的实现, 使跨应用实时交流信息成为可能。<br><span style="font-weight:bold"><wbr />2 工作过程</span><wbr /><br>(1)节点(如yb、pt)向本地服务器连接。<br>　　①XMPP 用户通过开启一个从客户端到服务器端的XML 流, 来申请一个在服务器上的Socket 连接。<br>　　SEND: &lt;stream: stream<br>　　　　　to=′sdpt.com′<br>　　　　　xmlns=′jabber: client′<br>　　　　　xmlns: stream=′http: //etherx.jabber.org/streams′&gt;<br>　　②服务器通过开启一个从服务器到客户端的XML 流进行回复。<br>　　RECV: &lt;stream: stream<br>　　　　　from=′sdpt.com′<br>　　　　　id=′180763465′<br>　　　　　xmlns=′jabber: client′<br>　　　　　xmlns: stream=′http: //etherx.jabber.org/streams′&gt;<br>(2)节点向本地服务器申请登录。<br>　　①用户询问登录服务器时需提供的信息。<br>　　SEND: &lt;iq id=′2′type=′get′&gt;<br>　　　　　&lt;query xmlns=′jabber: iq: auth′&gt;<br>　　　　　&lt;username&gt;yb&lt;/username&gt;<br>　　　　　&lt;/query&gt;<br>　　　　　&lt;/iq&gt;<br>　　②服务器回应用户, 告知用户登录所需要的信息。<br>　　③用户提供所需的信息。<br>　　④服务器响应一个空的类型为“result”的iq 元素, 表明登录成功。<br>　　<br>　　RECV: &lt;iq id=′3′type=′result′/&gt;　　<br>　　⑤yb 用户发送当前状态给服务器, 表明其在线。<br>　　SEND: &lt;presence&gt;<br>　　　　　&lt;status&gt;Online&lt;/status&gt;<br>　　　　　&lt;/presence&gt;<br>(3)用户获得花名册, 好友增加一个联系人( 如yb 获知朋友sd 在线) 。<br>(4)用户间发送消息( 如yb 向sd 发送消息) 。<br>　　用户发送一条消息:<br>　　SEND: &lt;message to′<a href="mailto:sd@jabber.org" target="_blank">sd@jabber.org</a><wbr />′&gt;<br>　　　　　&lt;body&gt;Where are you?&lt;/body&gt;<br>　　　　　&lt;/message&gt;　<br>　<br>　　服务器会根据XMPP 用户的会话信息加上一个源地址, 这样接收者收到消息时, 消息中已经包含了源地址。<br>(5)XMPP 服务器根据目标JID 中的域名查找、连接到目标服务器并进行认证(如sdpt.com 使用DNS 查找jabber.org, 连接到jabber.org 服务器上并进行认证) 。<br>(6)XMPP 服务器jabber.org 证实sd 连接到该服务器上, yb 被授权与sd 进行通信。<br>(7)数据在yb 与sd 间流动。<br>(8)用户退出, 退出时只需要关闭&lt;stream&gt;。<br><span style="font-weight:bold"><wbr />3 结束语</span><wbr /><br>　　简单的接口、开放的协议、互联的架构、权威的标准再加上坚实的用户基础是XMPP 的优势。相信XMPP 将为即时通信技术的运用提供更为广阔的空间。 <!--v:3.2--> ]]></description>
<category><![CDATA[技术]]></category>
<author><![CDATA[571350@qq.com(飞鱼)]]></author>
<comments>http://571350.qzone.qq.com/blog/1246295036#comment</comments>
<qz:effect>134218241</qz:effect>
<pubDate>Mon, 29 Jun 2009 17:03:56 GMT</pubDate>
<guid>http://571350.qzone.qq.com/blog/1246295036</guid>
</item>

<item>
<title><![CDATA[XMPP初解]]></title>
<link>http://571350.qzone.qq.com/blog/1246286682</link>
<description><![CDATA[1、什么是XMPP ？<br>XMPP：即Extensible Messaging and Presence Protocol，其前身是Jabber，一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分； <br>核心的XML流传输协议 <br>基于XML流传输的即时通讯扩展应用 <br>XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性，使得XMPP的协议能够非常漂亮。 <br>XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的，与其他业已得到广泛使用的即时通讯协议，诸如AIM，QQ等有功能完整，完善等先进性。 <br>2、XMPP的基本网络结构是怎样的？ <br>XMPP中定义了三个角色，客户端，服务器，网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录，连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通，异构系统可以包括SMS（短信），MSN，ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器，然后在之上传输XML。 <br>3、XMPP通过TCP传什么了？ <br>传输的是与即时通讯相关的指令。在以前这些命令要么用2进制的形式发送（比如QQ），要么用纯文本指令加空格加参数加换行苻的方式发送（比如MSN）。而XMPP传输的即时通讯指令的逻辑与以往相仿，只是协议的形式变成了XML格式的纯文本。这不但使得解析容易了，人也容易阅读了，方便了开发和查错。而XMPP的核心部分就是一个在网络上分片断发送XML的流协议。这个流协议是XMPP的即时通讯指令的传递基础，也是一个非常重要的可以被进一步利用的网络基础协议。所以可以说，XMPP用TCP传的是XML流。 <br>4、举个例子看看所谓的XML流是什么样子的？ <br>客户端：&lt;?xml version='1.0'?&gt; <br>       &lt;stream:stream <br>       to='example.com' <br>       xmlns='jabber:client' <br>       xmlns:stream='http://etherx.jabber.org/streams' <br>       version='1.0'&gt; <br>服务器：&lt;?xml version='1.0'?&gt; <br>       &lt;stream:stream <br>       from='example.com' <br>       id='someid' <br>       xmlns='jabber:client' <br>       xmlns:stream='http://etherx.jabber.org/streams' <br>       version='1.0'&gt; <br>...其他通信... <br>客户端：&lt;message [email=from='juliet@example.com']from='juliet@example.com'[/email] <br>              [email=to='romeo@example.net']to='romeo@example.net'[/email] <br>              xml:lang='en'&gt; <br>客户端： &lt;body&gt;Art thou not Romeo, and a Montague?&lt;/body&gt; <br>客户端： &lt;/message&gt; <br>服务器： &lt;message [email=from='romeo@example.net']from='romeo@example.net'[/email] <br>              [email=to='juliet@example.com']to='juliet@example.com'[/email] <br>              xml:lang='en'&gt; <br>服务器：&lt;body&gt;Neither, fair saint, if either thee dislike.&lt;/body&gt; <br>服务器：&lt;/message&gt; <br>客户端：&lt;/stream:stream&gt; <br>服务器：&lt;/stream:stream&gt; <br>以文档的观点来看，客户端或服务器发送的所有XML文本连缀在一起，从&lt;stream&gt;到&lt;/stream&gt;构成了一个完整的XML文档。其中的stream标签就是所谓的XML Stream。在&lt;stream&gt;与&lt;/stream&gt;中间的那些&lt;message&gt;...&lt;/message&gt;这样的XML元素就是所谓的XML Stanza（XML节）。XMPP核心协议通信的基本模式就是先建立一个stream，然后协商一堆安全之类的东西，中间通信过程就是客户端发送XML Stanza，一个接一个的。服务器根据客户端发送的信息以及程序的逻辑，发送XML Stanza给客户端。但是这个过程并不是一问一答的，任何时候都有可能从一个方发信给另外一方。通信的最后阶段是&lt;/stream&gt;关闭流，关闭TCP/IP连接。 <br>GTalk所遵循的协议---XMPP<br>前几天Google发布了一款名叫Google Talk的即时通讯软件，这款软件的买点卖点之一就是XMPP。那，什么是XMPP呢？<br>　　 可扩展通讯和表示协议 (XMPP) 可用于服务类实时通讯、表示和需求 - 响应服务中的 XML 数据元流式传输。XMPP 以 Jabber 协议为基础，而 Jabber 是即时通讯中常用的开放式协议。<br>　　 尽管 XMPP 没有完全溶合进任何特定的网络架构之中，但是通过客户机/服务器架构，它还是经常被采用，因为客户机需要使用 XMPP 经过 TCP 连接访问服务器，而服务器之间也是通过 TCP 连接进行通信的。服务器可起到 XMPP 通讯的智能提取层的作用。许多客户机直接通过 TCP 连接与服务器相连，并使用 XMPP 来充分使用服务器和任何相关服务所提供的功能。同时连接到服务器的可能有多种资源，它们代表各自已获授权的客户机。对于客户机和服务器之间的连接，推荐使用的端口号为 5222 。网关是一种有着特殊用途的服务器端服务，它的主要功能是在异构通讯系统协议之中解析 XMPP ，同时还要在 XMPP 之中解析返回的数据，如以下各各种服务的网关：电子邮件、国际互联网中继聊天（IRC）、SIMPLE、短信息服务（SMS）和现存的各种即时通讯服务，包括 AIM、ICQ、MSN Messenger 和 Yahoo! Instant Messenger 等。<br>　　两个基本概念 — XML 数据流和 XML 节使得较小结构化信息的有效负载可以在敏感于数据传输的实体间进行迅速的异步传输。一个 XML 数据流就像一种容器，可应用在任何两个网络实体间 XML 数据元的交换。XML 节是结构化信息的独立单元，通过 XML 数据流从一个实体发送到另一个实体。<br>　　XMPP 中包含了一种用于防范数据流被窜改和偷听的办法。这种信道加密的办法使用了传输层安全协议（TLS），连同其扩展协议 STARTTLS 。这种扩展与其它协议的扩展是同一模式的，如 IMAP、POP3 和 ACAP 等协议。XMPP 中还包含一种对数据流进行验证的办法，并采用了简单验证和安全层协议（SASL）中 XMPP 的特定框架。 <br>协议结构<br>　　XML 数据流在所有 XML 节的传送会话过程中起到一种包络的作用。我们可以采用一种单纯的方式来表示这个过程：<br>|--------------------|<br>| &lt;stream&gt;           |<br>|--------------------|<br>| &lt;presence&gt;         |<br>| &lt;show/&gt;            |<br>| &lt;/presence&gt;        |<br>|--------------------|<br>| &lt;message to='foo'&gt; |<br>| &lt;body/&gt; |<br>| &lt;/message&gt; |<br>|--------------------|<br>| &lt;iq to='bar'&gt; |<br>| &lt;query/&gt; |<br>| &lt;/iq&gt; |<br>|--------------------|<br>| ... |<br>|--------------------|<br>| &lt;/stream&gt; |<br>|--------------------| <!--v:3.2--> ]]></description>
<category><![CDATA[技术]]></category>
<author><![CDATA[571350@qq.com(飞鱼)]]></author>
<comments>http://571350.qzone.qq.com/blog/1246286682#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Mon, 29 Jun 2009 14:44:42 GMT</pubDate>
<guid>http://571350.qzone.qq.com/blog/1246286682</guid>
</item>

</channel>
</rss>

