斯是陋室,惟吾德馨

除了技术,还有更多值得关注……

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  56 随笔 :: 0 文章 :: 48 评论 :: 0 引用

2008年7月6日 #

    上班已经一段时间了,体会了太多工作中、生活中的现实与无奈。但路还是要走的,所以,也需要不断的反思与总结。
    废话不说了,最近决定开始学习DW,觉得这个东东在我未来的工作甚至职业道路上会很有帮助。以前研时候有开设课程,但比较浅,自己也没怎么学,希望现在还来得及!
    凡事预则立,不预则废!
posted @ 2008-07-06 11:45 Alex Lee 阅读(82) | 评论 (0)编辑

2008年3月13日 #

编译环境:
1、qextserialport 1.1
2、QT 4.3.2
3、VC++ 2003


1.在官网下载QextSerialPort最新版qextserialport-1.1.tar.gz,解压到qextserialport-1.1目录中。
2.将qextserialport-1.1目录下的qextserialport拷贝到Qt安装目录下的src目录中
3.进入src目录下的qextserialport目录,输入一下命令编译:
 qmake
 nmake
4.然后在qextserialport目录下的build目录下可得到qextserialport.dll,qextserialport.prl,libqextserialport.a三个文件,将qextserialport.dll复制到Qt安装目录下的bin目录中,将qextserialport.prl,libqextserialport.a复制到Qt安装目录下的lib目录中。(默认一般生成DLL和PRL,生成LIB参见附录步骤
5.在Qt安装目录下的include目录下的Qt目录中新建文件qextserialport.h,文件内容为:
#include "http://www.cnblogs.com/src/qextserialport/qextserialport.h"
并将该文件复制到Qt安装目录下的include目录下的QtGui目录中,并在该目录中再新建一个文件QextSerialPort(无扩展名),该文件内容为:
#include “qextserialport.h”
6.将src/qextserialport目录中的example目录拷贝到硬盘的其他地方,删除例子目录下的Makefile.Release, Makefile, Makefile.Debug,README和QESPTA.pro几个文件。
7.打开例子目录中的main.cpp和QespTest.cpp文件,修改#include <qextserialport.h>为#include <QextSerialPort>
8.编译自带EXAMPLE:进入EXAMPLE目录,输入:
 Qmake –project
得到工程文件qespta.pro,打开该工程文件,如果当前系统为win32,加入语句:
 LIBS          += -lqextserialport
 win32:DEFINES  = _TTY_WIN_ QWT_DLL QT_DLL
如果当前系统为unix/linux,加入语句:
 LIBS          += -lqextserialport
 unix:DEFINES   = _TTY_POSIX_
9.编译
 qmake
 nmake
如果编译成功证明已经扩展成功
10.该扩展帮助文档位于src/qextserialport目录中,可供查阅
注意,此扩展方法将类QextSerialPort扩展至QtGui下,请勿将类QextSerialPort误认为QtGui的一部分

附录:如何生成qextserialport.lib
qmake默认是生成动态库版本,静态链接文件生成需要修改qextserialport.pro。(关于qmake参数说明可参见: http://www.cppblog.com/mydriverc/articles/32728.html )
1、打开qextserialport.pro
2、修改
CONFIG                 += warn_on qt thread

CONFIG                 += warn_on qt thread staticlib

posted @ 2008-03-13 23:06 Alex Lee 阅读(981) | 评论 (5)编辑

2008年3月6日 #

字体:
Tools->Options->Font

个人觉得最好看的是FixedSys。

显示改动过的行标记:
Tools->Options->File Extension Setup
Advanced-Color coding-Modified lines
自动在保存的时候清除修改标记:
Tools->Options->File Options
Save-Reset line modify
这个标签页还有两个实用的选项:
Expand tabs to spaces,保存时把Tab变成空格(有的地方要求必须用空格缩进)
Strip trailing spaces,删掉行末尾的空白

快点显示Symbol的代码信息:
下面的Symbol窗口类似与Source Insight的上下文窗口,会显示当前函数或者宏的代码。

Tools->Options->Tagging Options
Updtae toolbars after ms idle:
缩短显示代码的速度。我用150。机子够快扛得住就弄小点。

修改该死的自动语法模板:
Tools->Options->File Extension Options
Indent-Syntax expansion-Minmum expandable keyword length:

建议设置为3,如果为默认的1的话,你根本不能用i做变量。因为只要i起头后面一个空格就是一个if () {},吐血。

鼠标移到函数或者标识符上面显示信息:
Tools->Options->File Extension Options

Tagging-Show info for symbol under mouse
这部分其他的钩也可以选上,减轻工作量啊。

对当前文件类型都显示行号:
Tools->Options->File Extension Setup
General-Display line numbers

修改行号颜色:
Tools->Options->Color
不是Line Number,而是Line Prefix Area~~吐血 -_-!

改GCC的设置:
必须在建立了GNU C/C++项目后才能在Build里面找到GNU C Options

设置项目的Build之类的菜单命令:
Project->Project Properties->Tools
选中一个Configuration以后就能配置编译器和调试器

另外,在下面的Build窗口可以直接敲命令。比如make,dir什么的,很方便

同时启动多个SlickEdit

使用隐藏的命令开关“+new”即可。只要把SlickEdit的快捷方式修改成这样:
“E:\Program Files\SlickEdit\win\vs.exe” +new

解决Slickedit某些窗口字体模糊的问题

比如Open Form的窗口,

用UE打开vs.exe、vsapi.dll两个文件,查找“OEM Fixed Font”,会找到有OEM Fixed Font..Terminal的地方。把Terminal改成Fixedsys,注意要用覆盖模式,不能改变了文件的长度,然后存盘即可。

将Slickedit的Projects资源列表切换成文件夹模式

Slickedit的文件排列是按照Source,Head之类的分的,很不习惯,把它改成按照文件夹结构

在Projects窗口中点击一个vpj文件,按右键;选择Auto Folder→Directory View,会出来一个警告框。再点OK就好了

Workspace分类管理

Workspace多了以后分类管理会比较方便

Project->Organize all workspace,可以用目录的形式对workspace进行管理,

注意这里并不会改变你workspace文件的位置,只是在slickedit里面的分类而已。

Slickedit 里的路径名出现 ¥

解决办法应该是 Tools->Options->font 把 Element 中的最后一项“Dialog”改成比如:MS Sans Serif  ,然后重新启动 SlickEdit 就好了

posted @ 2008-03-06 11:29 Alex Lee 阅读(1346) | 评论 (0)编辑

2008年2月9日 #

在MySQL从4.1以下版本升级到4.1及以上版本时经常能碰到字符集问题, 会出现乱码,这个是让人最头疼的问题,试了很多办法都没法解决,而且现在UTF8开始广泛使用,所以一般用UTF8比较好,最后总结有以下三种方法解决此问题。
(有问题可以EMIAL:A0717243@pub.ss.pku.edu.cn,QQ:312644536)
√ 乱码问题1. 用PHPmyAdmin操作MySQL数据库汉字显示正常 ,但用PHP网页显示MySQL数据时所有汉字都变成了?号。
症状:用PHPmyAdmin输入汉字正常,但当PHP网页显示MySQL数据时汉字就变成了?号,并且有多少个汉字就有多少个?号。很多学员都遇到了此问题,尤其是在安装了最新版的Appserv后。为此许多学员放弃了PHP,改学ASP了。
原因:没有在PHP网页中用代码告诉MySQL该以什么字符集输出汉字。
★ 解决方法:这不是乱码,只要在PHP网页头部加入以下一段代码告诉MySQL以UTF8编码输出汉字即可
<? mysql_query("SET NAMES UTF8");? ?>
??????? 你也可以在网页中PHP代码部分直接插入上述代码片段(即去掉两端<??>号)。例如你用Dreamweaver连接数据库,那么可以在头部的连接代码
<?php require_once('Connections/connmessage.php'); ?>中加入该代码使其变成<?
php require_once('Connections/connmessage.php');
mysql_query("SET NAMES UTF8");?
?? ?>
 注意:如果你的网页编码是gb2312,那就是 SET NAMES GB2312。但编辑员强烈推荐网页编码、MySQL数据表字符集、PHPmyAdmin都统一使用UTF8。原因请见本站PHP教程第一章第2节。
如果以上方法还是没用就必须这样:
1.页面head中<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
2.PHP页面在保存的时候使用UTF-8编码保存
3.在MYSQL中新建数据库的时候数据库选择UTF-8编码
4.在PHP连接数据库的时候,也就是mysql_connect()之后加入
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER_SET_CLIENT=utf8");
mysql_query("SET CHARACTER_SET_RESULTS=utf8");
满足以上四点即可完成全站UTF-8编码,而且在数据库中也不会有中文乱码.


√ 乱码问题2. 用PHPmyAdmin输入数据时发生错误,不让输入或出现乱码
★ 解决方法:这是设置问题。请安装最新版PHPmyAdmin或Appserv,打开PHPmyAdmin,MySQL 字符集: UTF-8 Unicode (utf8);
√ 乱码问题3. 在本机开发好的MySQL数据表,在本机测试一切正常,但用网站空间商提供的PHPmyAdmin上传时却出现问题,上传失败。尤其是使用国外PHP空间。
★ 解决方法:首先查看网站空间商提供的PHPmyAdmin字符集设定,确定自己所建数据表与空间是同一编码。在国外MySQL是不支持gb2312的,甚至最新版的Appserv也不支持gb2312。如果是因为编码不统一,可以重建数据表,当然是用国际标准的UTF8。

posted @ 2008-02-09 13:33 Alex Lee 阅读(289) | 评论 (0)编辑

2008年2月3日 #

AppLocale在简体中文系统里使用之后, 会令某些简体中文的MSI形式的安装程序 显示乱码(比如: OFFICE2000简体中文版安装程序). 解决方法: 方法一: 卸载AppLocale即可解决; 方法二: 删除AppLocale安装目录下的一个临时文件: \WINDOWS\AppPatch\AppLoc.tmp (此文件只有4字节)即可解决, 无需卸载AppLocale; 方法三: AppLocale刚安装好的时候, 是没有AppLoc.tmp这个文件的. 自己在AppLocale的 安装目录内, 弄一个0字节AppLoc.tmp文件, 并把它设为只读属性, 以后就不会 造成乱码了! 而且经我试用, 也不会对AppLocale的使用造成影响! 这就可以 一劳永逸地避免乱码出现, 推荐此法!
posted @ 2008-02-03 13:31 Alex Lee 阅读(1052) | 评论 (4)编辑

2007年10月27日 #

本章综述在IP语音技术(VOIP)中常用的编码解码器(codess)。它们常被称为编码解器、语音编码器或者简称为编码器。有关这方面的知识很多。

本章首先简要介绍编码器的主要功能、编码器的分类,然后阐述以及用于VOIP的三种编码器:IUT-T G.723语音编者按码器、ITU-TG.729语音编码器。

一、 语音编码器的功能 语音编码器的主要功能就是把用户语音的PCM(脉冲编码调制)样值编码成少量的比特(帧)。这种方法使得语音在连路产生误码、网络抖动和突发传输时具有健壮性(Robustness)。在接收端,语音帧先被误码为PCM语音样值,然后再转换成语音波形。

二、 语音编器的分类 语音编码器分为三种类形:(a)波形编器;(b)声码器;(c)混合编码器。波形编码器会尽可能构出包括背景噪单在内的模拟波形。由于波形编码器作用于所有输入信号,因此会产生高质量的样值。然而,波形编码器工作在高比特率。例如:ITU-G.711规范(PCM)用的比特率为64Kbps。

声码器(vocoder)不会再生原始波形。这组编码器会提取一组参数,这组参数被送到接收端,用来导出语音产生模形。线性预测编码(LPC)用来获取一时变数字滤波器的参数。这个滤波器用来模拟说话人的声道输出[WEST96]。在电话系统中使用声码器,语音质量不够好。


低比特率编码器的MOS得分--比特率关系曲线(WEST96)

在VOIP中常用的语音编码器是混合编码器,它融入了波形编码器和声器的长处,它的另一特点是它工作在非常低的比特率(4-6Kbps)。混合编码器采用合成分析(AbS)。

为了说明问题,考虑人的声道产生的一个语音模式:当人说话产生语音信号时就会发出浊音(如音素pa、da等)和清音(如音素sh、th)。激励信号就是由输入的语音信号导出的,其方法是使合成语音与输入语音的差别非常小。LPC的用法、激励的产生以及对合成分析(AbS)系统的误差检查均如图4-1所示。 长话质量编码器在比特率高于8Kbps时容易实现,如图4-2所示。长话质量的语音平均意见得分(MOS)必须在分或许分以上。传统的PCN语音在比特率小于32 Kbps,语音质量会严重恶化,在这里就不讨论PCN了。混合编码和声码器在比特率相当低的MOS上的得分是可接受的。在现阶段,大多数基于VOIP的编码器的工作范围在5.2~8kbps。研究表明,标准的编码器在比特率为4 Kbps时能提供可接受的NOS得分,一些分用系统在4.8 Kbps的MOS上的得分为3.8。

矢量量化和码激励线性预测 一种较好的方法就是用预测存储的最优参数(码元矢量)的码本对输入语音信号的表示矢量进行编码,这种技术称为矢量量化(VQ,vector quantization)。 将VQ和AbS技术结合在一起会进一步提高编码性能。AbS VQ是技术构成CELP的基础。VQ和AbS VQ的主要区别在于进行矢量量化码簿搜索时采用的量化失真测量定义的不同[WONG96]。

三、线性预测合成分析编码器 最常用的比特率在4.8kbps~16 kbps之间的语音编码器是基于模型编码器的,这些编码器都是线性预测合成分析(LPAS)方法。为了随着时间的变化模拟语音信号,线性预测语音产生模型必须用适当的信号来激励。每隔一段固定时间(如每隔20ms),语音模型参数和激励参数都必须做一次估计和更新,并用来控制语音模型。下面将介绍两种LPAS编码器:前向至应LPAS编码器和后向自适应LPAS编码器。 3.1 前向自适应LPAS编码器:8kbps G.729编码器和6.3kbps 与5.3kbps G.723.1编码器 在前向自适应的AbS编码器中,预测滤波器的系数和增益是显示传送的。为了提供长话质量的语音性能,这两种编码器都依赖于信源模型。激励信号(以语音基调周期的信息形式表示)也要传送。这种编码器所提供的模型对语音信号来说是比较好的,但对于一些噪音或者多数器来说并不合适。因此,在背景噪音和音乐环境下,LPAS编码器的质量比7.726和7.727的编码器的质量要差一些。

  ① G.723.1 ITU-T G.723.1编码器在6.4kbps提供长话质量语音。同时 G.723.1还包括一个工作在5.3kbps的低质量语音编码器。G.723.1是为低比特率可视电话而设计的。在这种适应中,由于视频编码时延通常大于语音编码时延,因此对时延的要求不是很严格。G.723.1编码器的帧长为30ms,还有7.5ms的前视。再加上编码器的处理时延,编码器的单向总时延为67.5ms。其它时延是由系统缓冲区和网络造成的。

  G.723.1编码器首先对语音信号进行传统电话带宽的波滤(基于G.712),再对语音信号用传统的8000Hz速率进行抽样(基于G.711),并变换成位的线性PCM码作作为该编码器的输入。在编码器中对输出进行逆操作来重构语音信号。 G.723.1系统用LPAS编码方法将语音信号编码成帧。编码器能够产生两种速率的语音流量:(a)用于高速率的6.3kbps;

  (b)用于低速率的5.3kbps。主速率编码器使用多脉冲最大自然量化(MP-MLQ),低速率编码器使用代数码激励线性预测(ACELP,Algebraic-Code-Excited Linear-Prediction)方法。编码器和解码器都必须支持两种速率,并通能够在帧间对两种速度进行转换,此系统同样能够对音乐和其它音频信号进行压缩和解压缩,但它对语音信号来说是最优的。

  编码器对帧进行操作,每帧包括240个样点,采用速率为8000Hz。在进一步的处理(高通滤波器去直流分量)后把每帧分成4个子帧,每个子帧包括60个样点,其它的各种操作包括LPC滤波器以及LSP滤波器非量化系数的计算等,将会导致30ms的分组时延。对每个子帧,用未经处理的输入信号计算LPC滤波器。最后一个子帧的滤波器系数用来预测分裂矢量量化器(PSVQ,Predictive split Vector quantizer)进行量化。正如前面所介绍的,前视占有7.5ms,所以整个编码时延为37.5ms。这个时延在评介编码器,尤其是通过数据网络传输语音时是个很重要的因素,因为如果编码及解码时延比较小的话,就意味着处理互联网中的时延及其抖动时具有更大的自由度。 解码器的处理也是基于帧的,解码过程如下(G.723.1算法摘要):

  ·对LPC的量化索引号进行解码。

  ·对构造LPC合成滤波器。

  ·对每个子帧,先对自适应码本激励和固定码本激励解码,然后再输入合成滤波器。

  ·激励信号经基音后置滤波器处理后,再送入合成滤波器。

  ·合成信号被输入到共振峰后置滤波器,该滤波器采用增益标度单元以使其输出能量维持在糨的输入水平。

  静音压缩已运用多年,它运用了在总会话时间中静音时间占大约50%这一事实。其基本思路是在静音期间减少传送的比特数,从而节省了所需传输的总比特数。 在电话网中,多年来对模拟语音信号都是用时间分配语音插值(TASI,Time-Assigned Speech Interpolation)主法进行处理。这一技术也就是将其它语音信号或者数据信号放置在谈话的静音期间内,从而为多信道链路提供附加容量。现今,TASI已运用数字信号中并被赋予新名称--其中的一个例子就是时分多址(TDMA,Time Division Multiple Access)。简要地讲,DTMA是将通常的信号划分成很小的、数字化片段(slots即时隙)。这些时隙和其它时隙一起在一个信道中进行时分复用。

  G.723.1采用了执行不连续传输的静音压缩,这就意味着在静音期间的比特流中加入了人为的噪声。除了预留带宽之外,这种技术使发信机的调制解调器保持边续工作,并且避免了载波信号的时通时断。

  ② G.729 G.729编码器是为低时延应用设计的,它的帧长只有10ms,处理时延也是10ms,再加上5ms的前视,这就使得G.729产生的点到点的时延为25ms,比特率为8 kbps。这些时延性能在互联网中很重要,因为我们知道任何能减少时延的因素都是非常重要的。

  G.729有两个版本:G.729和G.729A。G.729比G.723.1简单。这两个版本互相兼容但它们的性能有些不同,复杂性低的版本(G.729A)性能较差。两种编码器都提供了对帧丢失和分组丢失的隐藏处理机制,因此在因特网上传输语音时,这两种编码器都是很好的选择。Cox等[COX98]认为G.729在处理随机比特错误方面性能不好。建议在有随机比特错误的信道上不使用此编码器,除非利用信道编码(前向纠错码和卷积码,将在无线部份讨论)保护最敏感的比特。

  3.2 后向自适应LPAS编码:16 kbps G.728低时延码激励线性预测 G.728是低比特线性预测合成分析编码器(G.729和G.723.1)和后向ADPCM编码器的混合体。G.728是LD-CELP编码器,它一次只处理5个样点。

  CELP是上种语音编码技术,它的激励信号是从一个可能的激励信号集合中通过全搜索方法选出的。低速率语音编码吕器对样值预测滤波器采用前向自适应方案。而LD-CELP采用后向自适应滤波器并每隔2.5ms做一次更新。CELP中共有1024个可能的激励矢量。这些矢量可进一步分析为4种可能的增益,两种符号(+和-)与128种形状矢量。

  对于低速率(56~128 kbps)的综合业务数字网(ISDN)可视电话,G.728是一种建议采用的语音编码器。由于其后向自适应特性,因此G.728是一种低时延编码器,但它比其它的编码器都复杂,这是因为在编码器中必须重复做50阶LPC分析。G.728还采用了自适应后置滤波器来提高其性能。

四、参数语音编码器:2.4 kbps混合激励线性预测编码 参数编码器采用简化激励信号的语音模型,因而能工作在最低比特率。前而讨论的所有语音编码器都可描述为波形跟踪,它们输出信号的波形和相位与输入信号很相似。

  参数语音编码器却不同,它不呈现为波形跟踪。这类编码器是基于分析合成模型的,可用相当少的参数表示语音信号。这些参数通常是每隔20ms~40ms就会从语音信号中提取和量化。在接收端,这些参数用来生成合成语音信号。在理想条件下,合成语音听起来和原始语音相似。在背景噪音较大的情况下,由于输入的语音信号不能根据其内在的语音模型很好的建模,所以任何参数编码器都将失败。美国政府选择了2.4 kbps MELP用于保密电话。

  对于我媒体应用,[COX98]的研究指出:当需要低比特率时,参数编码器是一种好的选择。例如,简单的用户游戏中经常用参数编码器。这会降低所需的存储空间。出于同样的原因,参数编码器对某些多媒体消息型业务也是一种好的选择。对所有类型的语音环境来说,参数编码器的绝对语音质量都较低,尤其是在噪声环境下。如果事先能对语音文件做仔细的编辑,那么这个缺点是能克服的。目前,多媒体应用中的大多数参数编码器都不是标准的。而是适用于这类专用编码器。

  用于无线通信的G.723.1可变速率编码 G.723.1的附件C规定了一个信道编码规范,此规范可以和三倍速率的语音编码器一起使用。这个信道编码器的比特率的可变的,它作为整个H.324标准系列的一部份,是为移动多媒体应用设计的。

  这个信道编码器支持的比特率范围从0.7 kbps到4.3 kbps。它也支持G.723.1的三个操作模式的编解码器,即高速率模式、低速率模式和不连续传送模式。 这个信道编码器采用截短卷积码,根据每一类型信息比特主观重要性的不同,信道编码器的比特率可对不同的比特类型分进行优化。这种分配算法对编码器和解码器都是已知的。每次的系统控制信号无论是改变G.723.1的速率还是改变信道编码器的比特率,这个算法都会使信道编码器适应于新的语音业务配置。

  如果信道编码器的可用速率较低,那么首先要保护主观上最敏感的比特位。当信道编码器的比特率增加时,多余的信道比特首先用来保护更多的信息比特位,然后再对已保护过的比特类型增强保护。 在运用信道编码之前,语音参数要在信道适配层作部份的变化以提高对传输错误的健壮性。

五、编码器评价 评估编码器的性能时要考虑几个重要因素。这些因素如下提示:

  ·帧大小:帧的大小表示语音流量的时间长度,也称为帧时延。 帧是语音信号的分立部件,且每帧是根据语音样点更新的。本文介绍的编码器都是一次处理一帧。每帧信息各放在各语音分组 中,并传送给接收端。

  ·处理时延:它表示在编码器中对一帧语音做编码算法处理所 需时间。它通常简单计入帧时延。处理时延好称为算法时延。

  ·前视时延:编码器为了对当前帧的编码提供帮助而检查下一 帧的一定长度,此长度就称为前视时延。前视的想法是为了利 用相邻语音帧之间的密切相关性。 帧长度:这个值表示经编码处理后的字节数(不包括帧头)。

  ·语音比特率:当编解码器的输入是标准脉冲编码调制的语音 码流(比特率为64 kbit/s)时,编解码器的输出速率。

  ·DSP MIPS:此值是指支持特定编码器的DSP处理器的最低 速度。值提注意的是DSP MISP与其它处理器的MISP速率无 关。与用在工作站和个人计算机上通用处理器不同,这些DSP 是为特定任务而专门设计的。因此,为实现上述的编解码器处 理所需求MISP,通用处理器要比专用DSP处理器大。

  ·RAM需求:它描述了支持特定的编码过程所需要RAM的大小。

  评价编码器性能的关键因素是编码器工作所需时间。这个时间是指编码器的缓存及处理时间,称为单向系统时延。其值等于:帧大小+处理时延+前视时延。显然,解码时延也非常重要。实际上,解码时延大约是编码时延的一半。

六、语音编码器的比较 为了标准编码器的讨论作个总结,表4-1[RUDK97]对几种编码器的比特率、MOS、复杂性(以G .711为基准)和时延(帧大小及前视时间)作为比较。 

标准
编码类型
比特率(kbps)
MOS
复杂性
时延(ms)
G.711
PCM
64
4.3
1
0.125
G.726
ADPCM
32
4.0
10
0.125
G.728
LD-CELP
16
4.0
50
0.625
GSM
RAE_LPT
13
3.7
5
20
G.729
CSA-CELP
8
4.0
30
15
G.729A
15
G.723.1
ACELP
6.3
3.8
25
37.5
MP-MLQ
6.3
US Dod
LPC-10
2.4
合成语音
10
22.5
FS1015

  七、小结 语音编码器是建立和处理VOIP分组的发动机的。它由DSP驱动。 原来的DS0、TMD G.711 64kbps编码器最终会被工业淘汰,并由低比特率编码器所替代。

posted @ 2007-10-27 00:52 Alex Lee 阅读(219) | 评论 (0)编辑

2007年10月24日 #

一、SIP简介

1.1 SIP简介

  SIP(Session Initiation Protocol) 是一个应用层控制协议,它能建立、

修改和终止多媒体会话。SIP是由IETF(Internet Engineering Task Force)的

MMUSIC(Multi- party Multimedia Session Control)工作组提出。

  目前SIP协议标准是RFC3261。SIP协议还是正在快速发展的协议.SIP(Session

Initiation Protocol) 是一个应用层控制协议,它能建立、修改和终止多媒体会话。

 SIP是由IETF(Internet Engineering Task Force)的MMUSIC(Multi- party

Multimedia Session Control)工作组提出。目前SIP协议标准是RFC3261。

 SIP协议还是正在快速发展的协议.

1.2 SIP特点及优点

SIP采用文本编码,使用请求/响应模式

建立会话和描述会话分离

端到端的协议

互操作性

可扩展性

1.3 SIP用途

SIP作为一个创建服务的平台 --- SIP最重要的用途

SIP可以整合Internet服务与多媒体服务,并能传送到用户真实位置。

SIP可以统一多种通信格式。

SIP很适合传输即时消息及状态信息。

SIP使用现有的框架提供新的服务。

SIP使得应用可以分解。

SIP是3G的IP多媒体域主要信令协议。

二、SIP实体介绍

2.1 用户代理(UA:User Agent)

是一个用于和用户交互的SIP实体。

2.2 注册服务器(Registrar Server)

接收与处理用户注册消息的服务器。

2.3 代理服务器(Proxy Server)

完成SIP请求的路由转发、状态控制和事务处理的服务器,分为:
有状态代理服务器
无状态代理服务器

2.4 重定向服务器(Redirect Server)

帮助定位SIP用户代理的服务器。

2.5 定位服务器(Location Server)

存储用户位置信息,并提供位置信息管理的相关服务。
   
不是SIP实体,但是SIP协议体系结构中重要的一部分。

2.6 状态服务器(Presence Server)

接收和处理用户的状态信息、订阅信息,并能够通知订阅者相关状态信息。

不是SIP实体。

2.7 B2BUA(Back to Back User Agent)

由UAC及UAS组成,能够紧密控制会话,如能断开、修改、重新发起会话。

不是SIP实体。


三、SIP消息介绍

3.1 SIP消息类型

请求消息(Request): UAC -> UAS

响应消息(Response): UAS -> UAC

3.2 SIP消息格式

消息分为标题头和消息体两部分。由一个起始行(Start-line),几个标题头组成的

标题头(Message header)、一个标志标题头结束的空行(CRLF)以及可选项的消息体

(Message body)组成 。

请求消息:一个请求行、几个标题头、一个空行和一个消息体组成。其中消息体是

可选的。

响应消息:一个状态行、几个标题头、一个空行和一个消息体组成。其中消息体是

可选的。


消息的例子INVITE:

INVITE sip:60000164@voip.sh SIP/2.0                
From: ;tag=de011cac-13c4-41527d84-2a3a4c3b-896
To:
Call-ID: de0asdf11cac-13c4-41527d84-2a3a4c3b-2e58@voip.sh
CSeq: 1 INVITE
Via: SIP/2.0/UDP 172.1.34.39:5070;branch=z9hG4bK-41527d84-2a3a4c3b-c17
User-Agent: NoiServiceIpPhone
Max-Forwards: 70
Contact:
Content-Length:257

v=0
o=SIPUA 2890844527 2890844527 IN IP4 10.1.1.11
s=session
c=IN IP4 10.1.1.11
t=0 0
m=audio 8000 RTP/AVP 0
c=IN IP4 10.1.1.11
a=rtpmap:0 PCMU/8000
m=video 8004 RTP/AVP 34
c=IN IP4 10.1.1.11
a=fmtp:34 CIF=1 QCIF=1/MaxBR=3200
a=rtpmap:34 H263/90000

消息的例子200 OK:

SIP/2.0 200 OK
From: ;tag=0-13ce-426dec30-7d629ebc-5145
To: ;tag=4c16a8c0-1770-426de64a-10e46-1fa156c0
Call-ID: 15f4730-0-13ce-426dec30-7d629ebc-25af@wellcn.cn
CSeq: 1 INVITE
Via: SIP/2.0/UDP 172.1.34.39:5070;branch=z9hG4bK-426dec30-7d629ebc-509a
Contact:
Content-Type: application/SDP
Content-Length: 248

v=0
o=SIPUA 2890844527 2890844527 IN IP4 172.1.34.17
s=session
c=IN IP4 192.168.22.77
t=0 0
m=audio 10004 RTP/AVP 0
c=audio IP4 192.168.22.77
a=rtpmap:0 PCMU/8000
m=video 10006 RTP/AVP 34
c=video IP4 192.168.22.77
a=rtpmap:34 H263/90000

3.3 SIP方法

SIP定义了6种基本方法,如下:

REGISTER:注册联系信息。
INVITE: 初始化一个会话。
ACK: 对INVITE消息的最终响应。
CANCEL: 终止一个等待处理或正在处理的请求。
BYE: 终止一个会话。
OPTIONS: 查询服务器的性能。

SIP还定义一些扩展方法
SUBSCRIBE:订阅方法
NOTIFY: 事件通知方法
MESSAGE: 即时消息方法

3.4 SIP响应码

SIP状态码定义如下 :
100~199: 报告,表明请求已经收到、继续处理请求
200~299: 成功,表明行为已经成功收到,理解和接受
300~399: 重定向,表明为完成呼叫请求,还需要采取的进一步动作
400~499: 客户端错误,表明请求有语法或不能被服务器执行。客户端需要修 改请求,然后重发请求
500~599: 服务端错误,表明服务器出错,不能执行合法请求
600~699: 全局性错误

3.6 SIP标题头

  SIP标题头分为三个部分 :标题头名 、分隔符、标题头值。

例如:Call-ID: de0asdf11cac-13c4-41527d84-2a3a4c3b-2e58@voip.sh

  SIP定义44个标题头,根据使用方式共分为4大类,如下:

常规首部:主要用于普通的请求和相应的消息。
实体首部:主要用于定义于消息体相关的信息。
请求首部:主要用于客户端上传服务端要求的附加信息。
回应首部:主要用于服务端向客户端或请求者表明特定的附加信息。

3.7 SIP请求的6个必须标题头

 From: 说明了请求的来源。
 To: 说明了请求的接受方。
 Call-ID: 用于区分不同会话的唯一标识。
 CSeq: 用于在同一个会话中区分事务。
 Via: 描述了在请求消息经过的路径。
 Max-Forwards:用作限制请求传输到其目的地跳跃的点数或最大转发次数。

3.8 SIP扩展方法

REFER方法(RFC3515)

要求接收方用REFER请求中所提供的信息来联系另一方。

可用于呼叫转移、会话传递。

INFO方法(RFC2976)

传送会话相关的应用层信息,不改变SIP呼叫状态,可用于传递PSTN信令消息、

DTMF数字,可用于传递无线信号强度信息、影像或其它的非流信息

PRACK方法(RFC3262)

为了提供临时响应的可靠传输。

可用于SIP与PSTN交互场景

可用于呼叫排队通知

可用于确保QoS的协商

UPDATE方法(RFC3311)

不影响会话状态情况下可以更新会话参数

可用于在早期会话中调整会话参数
posted @ 2007-10-24 01:45 Alex Lee 阅读(847) | 评论 (0)编辑

2007年10月22日 #

     摘要: Chapter 4. Getting Started What is SIP and how does it work? SIP简介及工作原理arden免责瞎翻译http://blog.csdn.net/arden1019原文地址http://siprouter.onsip.org/doc/gettingstarted/ch04.htmlTable of Contents目录SER Archite... 阅读全文
posted @ 2007-10-22 19:30 Alex Lee 阅读(949) | 评论 (0)编辑

2007年6月25日 #

8—皇后问题
http://www.cppblog.com/3522021224/archive/2007/06/21/26785.html

0/1背包问题
http://www.cppblog.com/3522021224/archive/2007/06/19/26615.html

posted @ 2007-06-25 09:46 Alex Lee 阅读(178) | 评论 (0)编辑

2007年4月29日 #

http://dev.mysql.com/doc/refman/4.1/en/replication-howto.html

http://www.lethimfly.com/blogview.asp?id=3107

http://www.phpwind.net/read.php?tid=129977
http://zhhaju.blog.hexun.com/2524561_d.html
posted @ 2007-04-29 09:51 Alex Lee 阅读(206) | 评论 (0)编辑