Asterisk通道简介(部分翻译)

来源:互联网 发布:若风淘宝店网址 编辑:程序博客网 时间:2024/04/28 04:13

 Asterisk如何定义通道:
 通过Asterisk接通的电话包含一个呼入连接和呼出连接,每个通道都是来自于通过某种类型的通道驱动生成,而该通道的类型在技术上
 可以支持SIP,DAHDI,IAX等。每种技术上支持的通道驱动都有一个专有通道,并且拥有私有的数据存储结构,技术上独立的,不同类型的
 通道驱动之间不存在相互依赖的关系,按照Asterisk通道编写接口标准,你可以自己编写某种类型的通道,例如GSM通道。在Asterisk中,所有
 的专用通道结构又属于Asterisk的上层通用通道或称之为泛型通道结构,此泛型通道结构被定义和处理在channel.c代码中。
 Asterisk呼叫的场景:
 当有呼入到达Asterisk时,Asterisk要完成以下动作:
 1)根据呼叫到达对应的通道驱动接口,Asterisk为新的呼入通道分配存储空间。
 2)呼入到达通道驱动创建上层pbx通道(所有通道驱动的上层通道,前面称的泛型通道),并且在pbx通道上调用ast_pbx_start()启动PBX线程。
 3)利用PBX线程执行拨号方案中的命令。
 4)执行拨号方案后会分以下两种情况:
    1-1 呼入通道被Asterisk应答,Asterisk播放指定文件的语音或接收呼入语音通道中
    的语音,包括DTMF.
    1-2 通过拨号方案促使Asterisk调用app_dial.c创建外呼通道驱动发起外呼。
 Asterisk如何桥接通道:
 当Asterisk发起外呼时:
 1)通过拨号方案中的Dial应用创建外呼PBX通道,通过PBX通道根据拨号方案中对应的注册外呼通道类型,调用ast_call()发起对应的通道驱动发起外呼。
 2)当被叫应答时,Asterisk开始桥接媒体流,这样使得呼入通道和呼出通道分别对应的电话之间可以互通媒体流,使得双方都可以听到通话语音。
 3)某些情况下,被桥接的两个通道来自相同的类型的通道,例如被桥接的通道都是SIP通道,或都是DAHDI通道,且两个语音通道支持相同的编解码格式,那么此种情况下
    被桥接的语音通道被称之为原生通道。原生通道中的通道驱动直接处理转发进出的媒体流,而不需要将媒体流音频帧发送到PBX,因此种情况下,不需要进行编解码转换。
    其他情况下被桥接的媒体流都得经过pbx,因为通过pbx才能够进行编解码转换。
 4)若呼入和呼入通道驱动皆为SIP通道时,该原生语音通道由称之为“外部原生语音通达”,意思是媒体流直接在呼入者终端对应的设备和呼出终端对应的设备之间传输
    而不经过Asterisk,但是媒体的控制信号任然保留在Asterisk上。