我是靠谱客的博主 失眠小甜瓜,最近开发中收集的这篇文章主要介绍FreeSwitch呼入处理流程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

        为了简单起见,本文分析一个单边呼叫。让终端呼入到FS,然后播放一个文件就退出,不执行FS的呼出动作。参考拨号方案:

    <extension name="fs_one_way_inbound">
      <condition field="destination_number" expression="^10086$">
        <action application="sleep" data="1000 "/>
        <action application="answer"/>
        <action application="playback" data="ivr/8000/ivr-welcome_to_freeswitch.wav"/>
      </condition>
    </extension>

        Sofia栈捕获INVITE消息后,处理100 Trying,调用模块初始化时注册的回调函数sofia_event_callback()。处理新的INVITE请求,首先调用switch_core_session_request_uuid()实例化Session对象,同时实例化Channel对象,并把Channel状态初始化为CS_NEW,激活通道处理线程。

        Sofia栈进一步处理INVITE消息,抛出nua_i_invite事件通报事件进展,这时驱动状态机变化,状态机由CS_NEW状态迁移到CS_INIT状态。最终由状态机核心代码里的switch_core_standard_on_init()驱动状态迁移到CS_ROUTING。进而执行核心回调switch_core_standard_on_routing(),这个函数执行拨号方案的定位与查找,记录一个todo list,查找结束后,状态迁移到CS_EXECUTE。核心回调switch_core_standard_on_execute()挨个执行前一步todo list的APP。执行answer时,会触发 SIP的200 OK消息发出;当执行完最后一条APP后,触发一个hangup,即发SIP BYE消息。

        后续的状态迁移省略。

 

说明:呼叫状态机会调用所有注册的状态回调函数,上图中仅体现推动状态迁移的关键调用。

最后

以上就是失眠小甜瓜为你收集整理的FreeSwitch呼入处理流程的全部内容,希望文章能够帮你解决FreeSwitch呼入处理流程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部