Asterisk-通道与桥接基础

本文深入解析了Asterisk中的关键概念,如通道(Channel)、桥接(Bridge)及其作用,包括帧、拨号计划和通道驱动,以及本地通道、通道状态和通道应用实例,如队列回拨。详述了通话建立与进行的复杂过程,适合对电话系统内部工作原理感兴趣的读者。

引言:

通话离不开我们的生活,但通话究竟是如何建立的是我们很少去关注的。比如说,我们拨打中国移动的电话10086,一开始听到的是智能客服,我们根据提示音进行如何,选择自己想要的功能,如果我们想要联系人工客服则会输入0进行等待转接,即使接通之后,这个人工还可能会帮我们转接到另一个人工客服,这一系列的操作对拨号的我们来说都只是按键的操作,但想要知道其内部原理,是一个十分复杂的过程。我们以现在使用最多的通话系统Asterisk为例,具体讲述一下通话是如何建立与进行的。

一、关键概念:

1.1:通道(Channel)

在Asterisk中,通道表示Asterisk系统与某电话端点的一条连接(如图1.1)。
一路电话呼入到Asterisk系统,就用通道表示这一连接。
下图中的呼叫场景表示电话A拨打并进入语音信箱。
在这里插入图片描述

1.2:桥接(Bridge)

在 Asterisk中,通道表示Asterisk和设备之间的媒体路径,桥接则表示媒体之间如何共享

两个话机在同一Asterisk系统上通过SIP协议相互呼叫时,实际上发生了两段呼叫:一段是从起始分机到Asterisk,另一段是从Asterisk到目的分机,在此场景下,连接到Asterisk系统的有两个电话终端,因而分配了两个通道(如图1.2)。Asterisk将这两个通道桥接在一起,他们之间的媒体将会根据桥接类型进行交换。

在这里插入图片描述

1.3:帧(Frame)

在呼叫过程中,Asterisk代码内部的通信使用帧(数据结构ast_frame的实例)来实现。帧可以是媒体帧,也可以是信号帧。在一个基本的呼叫过程中,媒体帧的流包含音频或视频等数据。信号帧则用于发送呼叫信号事件相关的消息,如按下数字键,通话保持,挂断电话等。

1.4:拨号计划(dialplan)

dialplan是Asterisk的核心。所有进入系统的通道都要经过dialplan,dialplan定义了呼叫如何进入和离开asterisk系统。

通道

2.1:通道驱动

通道驱动接口是Asterisk提供的最复杂且最重要的接口。Asterisk通道API提供了电话协议抽象层使得其他所有Asterisk特性能够独立于所使用的电话协议而工作。此组件负责在Asterisk通道抽象层与其实现的电话技术细节层面之间的转换。如果没有通道驱动,asterisk根本无法拨打或接听呼叫。每个通道驱动都对应于所支持的协议或通道类型(SIP、ISDN等)。通道驱动可以看作是通往asterisk核心的网关, 负责和Asterisk以外的设备进行通信,转换特别的信令或协议到core模块。

常用的通道驱动有:
chan_dahdi:提供与使用DAHDI通道驱动的PSTN卡的连接;
chan_multicast_rtp:提供到多播实时传输协议(RTP)流的连接;
chan_pjsip:SIP通道驱动,它依赖于res_pjsip及其许多相关模块,并通过SIP协议和外部设备进行通信。 它会转换SIP信令到Asterisk core中。

Asterisk通道驱动接口定义称为ast_channel_tech接口。它定义了通道驱动必须实现的一组方法。通道驱动须实现的第一个方法是ast_channel工厂方法,也是ast_channel_tech中的requester方法。当Asterisk为一个呼入或呼出的电话呼叫建立通道后,该通道类型对应的ast_channel_tech的实现方法负责对ast_channel进行实例化和初始化。

下图表示两个桥接通道及各自对应的通道驱动。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

举世无双勇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值