重温流媒体技术(二、视频会议系统)

视频会议系统是四、五年前做的,虽然在这之前和当时已经有了不少类似的产品,但我还是没做好这个东西。因此现在就做个总结,不知道什么时候就又要做这个东西。
1.视频会议系统的组成 
系统由会议终端(Termial)、网关(gateway)、网闸(gatekeeper)、IP网络以及多点控制器 (MCU)组成。 其中网闸是负责类似QoS服务的,主要包括地址转换、访问控制和带宽管理等。
多点控制器用于支持三点或多点之间的网络会议,由必要的多点控制器(MC)和零个或多个多点处理器(MP)组成。MC确定所有终端的音视频处理能力并控制会议资源。MP混合、交换和处理音频、视频和数据流。多点会议分为集中式、分散式和混合式多点会议三种模式。集中式多点会议必须配备MCU,分散式则采取了组播的方式进行多点广播,又大大降低了对网络资源的占用。

2.视频会议质量
由于现有IP网络只提供一种承载业务-尽力传送(best effort)业务,可以满足数据业务等非实时业务,但对音视频等实时业务而言,就必须支持具有一定QoS的端到端承载业务,而这也是IP视频会议系统的关键要求,也是一个技术难点。
在IP视频会议中,QoS的策略可分为两个层面来实现:网络层面和业务层面。前者具体有两种方法,分别是超量工程法【在网络规划时,就预留足够的冗余带宽,布置更多的路由器和高速电缆链路】和综合服务Internet法【设计资源预留协议,如RSVP】。后者则考虑到视频会议系统本身是基于RTP建设的,不具备QoS,需要RTCP配合,获取其SR【RTP时戳和NTP时戳,如用于音视频的同步】和RR【长时与短时指标】,近似实现QoS。

3.协议栈
常用的协议栈有H.323和SIP。前者设计的比较复杂,设计开发周期比较长,不如后者。
现在有开源的协议栈,如OPAL协议栈。前身是Openh323开源项目,它包括几乎全部的Openh323全部代码,并加入了SIP协议栈,使到H.323和SIP协议能并存,开发者既可以使用功能全面的H.323协议,可以使用简单易用的SIP协议。
oSIP协议栈是使用ANSI C编写的开源SIP协议栈,是体积最小的SIP协议栈,由于oSIP体积较小,很容易在小的操作系统上运行,因此在实时操作系统 VxWorks当中,oSIP是使用最多的SIP协议栈。
除了协议栈开源,还有其他部分也开源。live555是最重量级的一个C++流媒体开源项目,其中不仅包括了传输协议(SIP、RTP)、音视频编码器(H.264、MPEG4)等,还包括流媒体服务器的例子,是流媒体项目的首选。FFmpeg是最全面的开源
编码器,包括了H.264、MPEG4、G.72x等音视频编码,效率也非常高。它虽然是基于Linux的,但可以通过交叉编译的方式在windows下运行。

4.SIP协议
SIP( 会话初始协议)的开发目的是用来帮助提供跨越因特网的高级电话业务,用来建立,改变和终止基于IP网络的用户间的呼叫。被描述为用来生成,修改和终结一个或多个参与者之间的会话。这些会话包括因特网多媒体会议,因特网(或任何IP网络)电话呼叫和多媒体发布。
(1)SIP提供以下功能:
名字翻译和用户定位:无论被呼叫方在哪里都确保呼叫达到被叫方。执行任何描述信息到定位信息的映射。确保呼叫(会话)的本质细节被支持。
特征协商:它允许与呼叫有关的组(这可以是多方呼叫)在支持的特征上达成一致(注意:不是所有方都能够支持相同级别的特征)。例如视频可以或不可以被支持。总之,存在很多需要协商的范围。
呼叫参与者管理:呼叫中参与者能够引入其它用户加入呼叫或取消到其它用户的连接。此外,用户可以被转移或置为呼叫保持。
呼叫特征改变:用户应该能够改变呼叫过程中的呼叫特征。例如,一呼叫可以被设置为“voice-only”,但是在呼叫过程中,用户可以需要开启视频功能。也就是说一个加入呼叫的第三方为了加入该呼叫可以开启不同的特征。

(2)SIP中有两个要素。SIP用户代理和SIP网络服务器。用户代理是呼叫的终端系统元素,而SIP服务器是处理与多个呼叫相关联信令的网络设备。用户代理本身具有一客户机元素(用户代理客户机UAC)和一服务器元素(用户代理服务器UAS)。客户机元素初始呼叫而服务器元素应答呼叫。这允许点到点的呼叫通过客户机-服务器协议来完成。SIP服务器元素提供三种服务器形式存在于网络中–SIP有状态代理服务器,SIP无状态代理服务器和SIP重定向服务器。
由于呼叫者未必知道被呼叫方的IP地址或主机名,SIP服务器的主要功能是提供名字解析和用户定位。可以获得的是email形式的地址或与被呼叫方关联的电话号码。使用该信息,呼叫者的用户代理能够确定特定服务器来解析地址信息–这可能涉及网络中很多服务器。
SIP代理服务器接收请求,决定将这些请求传送到何处,并且将它们传送到下一服务器(使用下一跳路由原理)。在网络中可以有多跳。
有状态和无状态代理服务器的区别是有状态代理服务器记住它接收的入请求,以及回送的响应和它转送的出请求。无状态代理服务器一旦转送请求后就忘记所有的信息。这允许有状态代理服务器生成请求以并行地尝试多个可能的用户位置并且送回最好的响应。无状态代理服务器可能是最快的,并且是SIP结构的骨干。有状态代理服务器可能是离用户代理最近的本地设备,它控制用户域并且是应用服务的主要平台。
重定向服务器接收请求,但不是将这些请求传递给下一服务器而是向呼叫者发送响应以指示被呼叫用户的地址。这使得呼叫者可以直接联系在下一服务器上被呼叫方的地址。
SIP是一个分层结构的协议,这意味着它的行为根据一组平等独立的处理阶段来描述,每一阶段之间只是松耦合。协议分层描述是为了表达,不指定任何方式的实现。
SIP的最底层是语法和编码。它的编码使用增强Backus-Nayr形式语法(BNF)来规定。
第二层是传输层。它定义了网络上一个客户机如何发送请求和接收响应以及一个服务器如何接收请求和发送响应。所有的SIP元素包含传输层。
第三层是事务层。事务是SIP的基本元素。一个事务是由客户机事务发送给服务器事务的请求(使用传输层),以及响应这些客户机的请求。事务层处理应用层重传,匹配响应到请求,以及应用层超时。用户代理由于包含客户机和服务器两个元素,因此用户代理也就包含一个事务层,并且也相应的包含这两部分【注意的是,有状态的服务器元素包含了事务层,但无状态的就没有】。
第四层是事务用户(TU)。每个SIP实体,除了无状态代理,都是事务用户。

(3)SIP有两种类型的消息:
i )请求:从客户机发到服务器,包含三个元素:请求行、头、消息体。
ii)响应:从服务器发到客户机,包含三个元素:状态行、头、消息体。
SIP定义了下述方法:
INVITE——邀请用户加入呼叫。
BYE——终止一呼叫上的两个用户之间的呼叫。 
OPTIONS——请求关于服务器能力的信息。
ACK——确认客户机已经接收到对INVITE的最终响应。
REGISTER——提供地址解析的映射,让服务器知道其它用户的位置。
INFO——用于会话中信令。

(4)SIP与H.323协议比较 
a)两者都是是应用层的信令控制协议,但SIP采用基于文本的模式,因此可以容纳各种不同的数据(语音、数据、视频);H.323采用的是传统的电话信令模式,为解决不同厂家设备的兼容性,解决点对点及多点视讯会议中诸如呼叫与会话控制、多媒体与带宽管理等问题,包括了一系列子协议。
b)SIP采用C/S结构的消息机制,通过消息的传递来实现请求应答、呼叫的控制等,因此终端设备比较复杂;H.323是较早时候制定的,仍然采用了分层的集中式控制模式便于管理,像计费管理、带宽管理、呼叫管理等在集中控制下实现起来比较方便,其局限性是易造成瓶颈。
c)SIP以文本方式表示消息,只需要相对简单的生成器和词法语法分析器,尤其是采用具有强大的文本处理功能的语言。SIP的消息只有37个头部(基本规定32个,另外5个用于呼叫控制的扩展),每个头部含有少量的值和参数,但包含了更多的信息。由4个头部(To、From、Call-ID、Cseq)和3个类型的请求(INVITE、ACK、BYE)就可实现一个基本的可交互操作的SIP Internet电话;H.323则有上百个基本元素,用基于ASN.1和PER的二进制方法表示其消息,要复杂的多。
d)协议栈方面,SIP只使用一个含有所有必要信息的消息,防火墙或代理就可以不为每个呼叫保持状态,而只为各个请求保持状态,因此也要小得多,开源的osip成为是体积最小的SIP协议栈也不是没有原因的;H.323的复杂性来源于它使用多个子协议,且它们之间没有清晰的界限,甚至重复;有些业务需要在多个协议之间交互。
e)可靠性及服务质量方面,H.323要比SIP要全面一些,SIP把这些交给其他协议。
f)模块化方面,SIP本身就是一个涵盖呼叫信令、用户定位和登记功能的独立性很好的一个模块,而H.323涉及多个不同标准相互协作完成应用,这方面自然就差的多了。
g)服务器的处理量和会议规模方面,SIP由于具有无状态的服务器,无需保存呼叫状态,不对其应答,同时可以在UDP上传输,这样既可以快速处理海量请求,又减少了物理设备的存储量和计算量;在会议规模方面,由于是分布式结构,也就不太受外界的约束;而H.323由于采用集中式, MCU就成为数据处理的瓶颈。 

 

你可能感兴趣的:(网络,图像与视频)