exsip - SIP/VoIP 电话扩展库,简化 SIP 客户端使用#

示例

本库封装了 exsipclient 和 VoIP 引擎,提供更简洁的 API 接口,
让用户更容易上手 SIP/VoIP 电话功能。

基本用法:
local exsip = require "exsip"

-- 配置 SIP 账号
local config = {
    server = "192.168.1.100",
    port = 5060,
    domain = "192.168.1.100",
    user = "1001",
    password = "123456"
}

-- 设置事件回调
exsip.on("register", function(status)
    log.info("sip", "注册状态:", status)
end)

exsip.on("call", function(event, data)
    if event == "incoming" then
        log.info("sip", "来电:", data.from)
        exsip.accept()
    elseif event == "connected" then
        log.info("sip", "通话已建立")
    elseif event == "ended" then
        log.info("sip", "通话已结束")
    end
end)

-- 启动 SIP 服务
exsip.init(config)
exsip.start()

-- 拨打电话
-- exsip.dial("1002")

-- 发送消息
-- exsip.message("1002", "你好")

-- 挂断通话
-- exsip.hangUp()

exsip.init(config)#

配置 SIP 参数。

参数

传入值类型

解释

table

config 配置参数表

string

config.sip_server_addr SIP 服务器地址

number

config.sip_server_port SIP 服务器端口,默认 5060

string

config.sip_domain SIP 域

string

config.sip_username SIP 用户名

string

config.sip_password SIP 密码

string

config.sip_transport RTP 传输协议,”UDP” 或 “TCP”,默认 “TCP”

number

config.rtp_port 本地 RTP 端口,默认 40000

number

config.expires 注册有效期(秒),默认 600

table

config.codecs 编解码器列表,默认 {“PCMU”, “PCMA”}

number

config.ptime 打包时长(毫秒),默认 20

boolean

config.auto_answer 是否自动接听,默认 false

number

config.delay_auto_answer 自动接听延迟(秒),默认 0

number

config.call_timeout 拨号超时时间(秒),默认 30

number

config.adapter 网络适配器,nil=使用系统默认,socket.LWIP_GP=4G,socket.LWIP_STA=WiFi,socket.LWIP_ETH=以太网

返回值

返回值类型

解释

boolean

成功返回 true,失败返回 false

例子

exsip.init({
    sip_server_addr = "192.168.1.100",
    sip_server_port = 5060,
    sip_domain = "192.168.1.100",
    sip_username = "1001",
    sip_password = "123456",
    auto_answer = false,
    adapter = nil  -- 使用系统默认网卡
})

exsip.start()#

启动 SIP 服务。

参数

返回值

返回值类型

解释

boolean

成功返回 true,失败返回 false

例子

exsip.start()

exsip.stop()#

停止 SIP 服务。

参数

返回值

返回值类型

解释

nil

无返回值

例子

exsip.stop()

exsip.dial(target)#

拨打电话。

参数

传入值类型

解释

string

target 目标号码或 SIP URI,例如 “1002” 或 “sip:1002@example.com”

返回值

返回值类型

解释

boolean

成功返回 true,失败返回 false

例子

exsip.dial("1002")

exsip.accept()#

接听来电。

参数

返回值

返回值类型

解释

boolean

成功返回 true,失败返回 false

例子

exsip.accept()

exsip.hangUp()#

挂断通话。

参数

返回值

返回值类型

解释

boolean

成功返回 true,失败返回 false

例子

exsip.hangUp()

exsip.message(target, text)#

发送即时消息。

参数

传入值类型

解释

string

target 目标号码或 SIP URI

string

text 消息内容

返回值

返回值类型

解释

boolean

成功返回 true,失败返回 false

例子

exsip.message("1002", "你好")

exsip.on(callback)#

注册事件回调。

参数

传入值类型

解释

function

callback 统一回调函数,参数为 (event_type, arg1, arg2, arg3)

返回值

返回值类型

解释

nil

无返回值

例子

exsip.on(function(event_type, arg1, arg2, arg3)
    if event_type == "register" then
        local status, data = arg1, arg2
        log.info("sip", "注册状态:", status)
    elseif event_type == "ready" then
        log.info("sip", "服务就绪")
    elseif event_type == "call" then
        local event, data = arg1, arg2
        log.info("sip", "通话事件:", event)
    elseif event_type == "media" then
        local event, session = arg1, arg2
        log.info("sip", "媒体事件:", event)
    elseif event_type == "message" then
        local event, data = arg1, arg2
        log.info("sip", "消息事件:", event)
    elseif event_type == "voip" then
        local event, data = arg1, arg2
        log.info("voip", "VoIP事件:", event)
    elseif event_type == "error" then
        local action, payload = arg1, arg2
        log.error("sip", "错误:", action)
    end
end)

exsip.off(event)#

取消事件回调。

参数

传入值类型

解释

string

event 事件名称

返回值

返回值类型

解释

nil

无返回值

例子

exsip.off("call")

exsip.get_config()#

获取当前配置。

参数

返回值

返回值类型

解释

table

当前配置表

例子

local config = exsip.get_config()
log.info("当前用户:", config.user)

exsip.get_current_call()#

获取当前通话信息。

参数

返回值

返回值类型

解释

table

通话信息表,无通话时返回 nil

例子

local call = exsip.get_current_call()
if call then
    log.info("来电号码:", call.from)
end

exsip.is_started()#

检查 SIP 服务是否已启动。

参数

返回值

返回值类型

解释

boolean

已启动返回 true,否则返回 false

例子

if exsip.is_started() then
    log.info("SIP 服务已启动")
end

exsip.isRegistered()#

检查 SIP 是否注册成功。

参数

返回值

返回值类型

解释

boolean

已注册返回 true,否则返回 false

例子

if exsip.isRegistered() then
    log.info("SIP 已注册")
end

exsip.is_voip_running()#

检查 VoIP 引擎是否正在运行。

参数

返回值

返回值类型

解释

boolean

正在运行返回 true,否则返回 false

例子

if exsip.is_voip_running() then
    log.info("VoIP 引擎正在运行")
end