FreeSWITCH 电话会议(ESL实现)

场景描述

IM软件与办公相结合,发起人选择多人建立电话会议。

实现思路

获取参会人的电话号码后,通过ESL将每个电话号码呼入会议。

核心命令

originate sofia/gateway/gatewayName/telNumber &conference(conferenceName)

核心代码

// 初始化一个handle,用于标识到FreeSWITCH的Socket连接
esl_handle_t handle = {{ 0 }};

// ip = ...
// port = ...
// password = ...

// 连接服务器
esl_status_t status = esl_connect(&handle, ip, port, NULL, password);

// 错误处理
// ...

std::string conferenceName = getUuid();  // 创建一个 UUID 以唯一标识会议名称
std::vector<std::string> collTel;  // collection of telephone numbers
// collTel = ...
// std::string gatewayName = ...
// 遍历电话号码,将每一个电话号码呼入会议
for (auto iter = collTel.begin(); iter != collTel.end(); ++iter)
{
    std::ostringstream oss;
    oss << "api originate sofia/gateway/" << gatewayName << "/" << *iter
        << " &conference(" << conferenceName << ")\n\n";
    esl_send(&handle, oss.str().c_str());
}

// 断开连接
esl_disconnect(&handle);

其他实现方式

亦可利用自定义消息实现:在客户端发送自定义消息,在服务器端监听该消息并做相应处理。
这种方式没仔细研究,待有时间再将其补充完整。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
FreeSWITCH中,ESL(Event Socket Library)是一种基于网络的API,可以通过TCP/IP协议连接到FreeSWITCH,并发送命令或接收事件。使用ESL,可以在不修改FreeSWITCH源代码的情况下,实现FreeSWITCH的控制和管理。 要发送INFO消息,可以使用ESL API中的sendRecv()方法。该方法可以发送一个命令并等待FreeSWITCH的响应。下面是一个使用ESL发送INFO消息的示例代码: ``` #include <stdio.h> #include <string.h> #include <esl.h> int main(int argc, char *argv[]) { esl_handle_t handle = {{0}}; esl_status_t status; const char *uuid = "12345678-1234-1234-1234-123456789012"; const char *info = "Hello, world!"; // 连接到FreeSWITCH status = esl_connect(&handle, "127.0.0.1", 8021, NULL, "ClueCon"); if (status != ESL_SUCCESS) { printf("Failed to connect to FreeSWITCH\n"); return 1; } // 发送INFO消息 esl_send_recv(&handle, "sendmsg %s\n", "sip:1234@192.168.1.1;transport=tcp", "profile sip", "subject: INFO\r\n", "Content-Type: application/dtmf-relay\r\n", "Content-Length: 16\r\n", "\r\n", "Signal=1\r\nDuration=100\r\n" ); // 断开连接 esl_disconnect(&handle); return 0; } ``` 在上面的代码中,我们首先通过esl_connect()方法连接到FreeSWITCH。然后,使用esl_send_recv()方法发送一个名为"sendmsg"的命令,该命令可以发送SIP INFO消息。在命令中,我们指定了消息的目标地址、协议类型、消息头和消息体。最后,使用esl_disconnect()方法断开连接。 需要注意的是,上述代码中的消息体是一个DTMF Relay消息,这只是INFO消息的一种类型。在实际应用中,需要根据具体的需求,选择合适的消息类型和消息体格式。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值