深入浅出asterisk(一):asterisk通道(Channels)

原创 2007年09月15日 21:04:00

    由于工作上的VOIP项目需要,最近亲密接触了一下asterisk工程代码。关于asterisk在VOIP上的伟大地位和作用,俺就不絮叨了,请看前作:Astersik+Radius简易攻略

    国内对于asterisk的资料介绍,更别说对asterisk的源码分析了,因此我把平时记的一些资料与大家分享一下,希望对同行能有帮助。第一篇就翻译一下Asterisk里的通道的概念,英文原文见于:http://www.asterisk.org/doxygen/1.4/

什么是asterisk通道?

Asterisk通道是指通过asterisk建立起来的一路通话。这类通话都包含一个incoming连接和一个outbound连接。每个电话都是通过一种通道驱动程序建立起来的,比如SIP,ZAP,IAX2等等。每一类的通道驱动,都拥有自己私有的通道数据结构,这些私有的结构从属于一个通用的Asterisk通道数据结构中,具体定义在channel.hchannel.c中。

 

呼叫情景(call scenario)

下面为当一个呼入电话抵达asterisk时的情景:

  1. 呼叫的抵达被某一类通道驱动的接口感知,比如SIP socket

  2. 通道驱动为其创建一个PBX通道并且为这个通道开启一个PBX线程;

  3. 执行拨号方案;

  4. 在这个时候至少发生下面其中之一:

a.Asterisk应答这个呼叫并且播放媒体数据或者读取媒体数据,比如IVR业务

b.拨号方案促使asterisk通过dial应用(dial application)创建一个对外呼叫,比如呼叫固定电话或移动电话时将连接落地网关。(具体见app_dial.c)

 

桥接通道(Bridging channels)

下面为当asterisk往外拨号时的情景:

  1. Dial创建一个outbound PBX通道并且要求对应的通道驱动创建一个呼叫

  2. 当电话被接通,asterisk桥接媒体流,使得第一个通道的呼叫者能够与第二路通道的被呼叫者进行通话

  3. 有些情况下,呼入和呼出的通道使用相同的技术方案和兼容的编解码技术,这时候就会使用本地桥接。这种本地桥接方案中,通道驱动在内部直接传送到来的语音数据到对外的流中,而不通过PBX发送语音帧。

  4. 如果是SIP协议,将会有一个"external native bridge"asterisk重定向端点,使得语音直接在呼叫者和被呼叫者之间传送。信号被保存下来以方便提供正确的CDR记录。

 

植入通道(Masquerading channels)

有些情形下,一个通道可能植入到另一个通道中。这种情景在呼叫转移中比较常见,新的通道植入并且接管桥接的工作,旧的通道就成了僵通道而被挂起。

 

asterisk App Dial 拨号 发起外呼

Synopsis Attempts to establish a new outgoing connection on a channel, and then link it to the exist...
  • yuzegao
  • yuzegao
  • 2008年03月13日 17:44
  • 4586

深入理解Asterisk体系架构

Asterisk和其他传统的PBX完全不同,因为Asterisk的拨号计划以同样的方式处理所有的入局信道(incoming channels)。 传统的PBX在逻辑上区分工作站信道(连接电话机)和电...

深入浅出asterisk(四):部署CDR MySql模块

Asterisk可以存储CDR记录到一个MYSQL数据库中,也可以选择以CSV文本文件的形式保存起来。由于Mysql客户端开发库的版权问题,Mysql billing应用程序不再作为Asterisk标...

Asterisk 代码架构概述

源码编译Asterisk系统环境要求

为了顺利编译和安装Asterisk,你需要在操作系统中安装一个C编译器和一些系统库。 编译器是一个使源代码(Asterisk的源代码是用C语言编写的)变成可执行程序的程序。目前,Asterisk1.8...
  • libodls
  • libodls
  • 2017年01月31日 01:57
  • 321

Asterisk 1.8 chan_sip模块代码分析

和以前版本相比,Asterisk在架构上有了不小的变动,本文基于asterisk 1.8.10.1分析整理。         chan_sip模块属于通道驱动模块。它实现了协议的相关内容,使Aste...

Asterisk 源代码解析之SIP呼叫

下图是asterisk的呼叫流程图: 我们以sip的呼叫过程为例来描述,其他channel的呼叫过程基本类似。 Astersik下注册的sip用户主动发起一个呼叫的函数调用过程(incoming)...

深入浅出asterisk(三):chan_sip代码分析(下)

现在回过头来把焦点转移到sipsock_read()函数。所有到来的sip包都在这里开始处理,在处理sip包期间,sipsock_read需要对sip的拥有者channel上锁,sipsock_rea...

ASTERISK入门

subscriber:加入某个group,从而遵从某一个call restricion subscriber group:可以使用1种call restriction。 call restrict...

asterisk使用SIP相互对接

当用户数量上去,单凭一台asterisk是很能支持庞大的用户群体,所以要根据用户量来部署多台asterisk来应付实际情况的需求.但部署多台asterisk所带来的一个问题就是A服务器的用户如果Cal...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深入浅出asterisk(一):asterisk通道(Channels)
举报原因:
原因补充:

(最多只允许输入30个字)