• freeswitch之媒体协商模式


    • 默认模式:

         主叫发送呼叫INVITE到freeswitch,freeswitch在呼叫被叫时,使用自己的媒体编码能力呼叫被叫。这样freeswitch分别与主、被叫进行媒体协商时,可以使用主、被叫不同时支持的编码进行通话。freeswitch收到主、被叫的媒体数据后,进行解码、转码、重新编码再发给对端。

    图中,左边是主叫发给freeswitch的INVITE媒体参数,右边是freeswitch发给被叫INVITE的媒体参数

    配置:默认就是此种模式

    图中,左边是主叫发给freeswitch的INVITE媒体参数,右边是freeswitch发给被叫INVITE的媒体参数

    • 代理模式

        主叫发送呼叫INVITE到freeswitch,freeswitch在呼叫被叫时,使用主叫的媒体编码能力呼叫被叫。这样freeswitch分别与主、被叫进行媒体协商时,使用的编码是双方都支持的,不需要转码。freeswitch负责接收双方媒体数据并转发给对端。

     

     图中,左边是主叫发给freeswitch的INVITE媒体参数,右边是freeswitch发给被叫INVITE的媒体参数

    配置:

    conf/dialplan/default.xml:

    设置proxy_media=true

    1. <extension name="Local_Extension">
    2. <condition field="destination_number" expression="^(10[01][0-9])$">
    3. + <action application="set" data="proxy_media=true"/>

    • 旁路模式

       主叫发送呼叫INVITE到freeswitch,freeswitch在呼叫被叫时,使用主叫的媒体能力(整个SDP)呼叫被叫。这样由主、被叫独立进行媒体协商时,freeswitch不参与媒体传输,建立通话后,媒体数据(RTP)在主、被叫之间直接传输,不需要经过freeswitch处理。

     图中,左边是主叫发给freeswitch的INVITE媒体参数,右边是freeswitch发给被叫INVITE的媒体参数

    配置:
    conf/dialplan/default.xml:

    设置inbound-bypass-media=true

    1. <extension name="Local_Extension">
    2. <condition field="destination_number" expression="^(10[01][0-9])$">
    3. + <action application="set" data="inbound-bypass-media=true"/>

    • 关键说明
    1. 默认方式在主、被叫编码协商不一致时,提供转码能力,支持录音
    2. 代理模式负责转发媒体数据,可以处理nat问题
    3. 旁路模式不修改SDP参数,也不转发媒体数据,一般用于通话双方在局域网内场景

  • 相关阅读:
    linux下最全curl命令使用方式学习和拓展
    【C++】C++ 语言对 C 语言的加强 ① ( 实用性增强 - 变量任意位置定义 | register 关键字增强 - 自动进行寄存器优化 )
    Basic Facilities of a Virtio Device (二)
    Python学习记录 析构函数
    MongoDB(三)之SpringBoot整合
    爬虫如何选择工具和编程语言
    各种类型的API接口,应有尽有
    类和对象(下)
    MFC图形函数学习03——画直线段函数
    SpringBoot中常用校验注解简介说明
  • 原文地址:https://blog.csdn.net/szkbsgy/article/details/126472886