FreeSWITCH rtp endpoint recvonly

查了下rtp.c的源码,远端端口为0就意味着recvonly,但其实不然,调用switch_rtp_new会马上返回失败

经过反复测试,增加下面几行代码之后终于变成了recvonly:

tech_pvt->mode = RTP_RECVONLY;

rtp_flags[SWITCH_RTP_FLAG_AUTOADJ]++;

switch_channel_set_variable(channel, "rtp_auto_adjust_threshold", "1");

有什么用?

用处大了,可以做录音呀监听呀什么的,接收别人的rtp流,下面是一个lua例子:

function debug(s)

freeswitch.consoleLog("ERR", s or "")

end

local api = freeswitch.API()

local uuid = api:executeString("create_uuid")

debug("uuid = " .. uuid .. "\n")

local local_addr = api:executeString("global_getvar local_ip_v4")

local local_port = 2000

local remote_addr = local_addr -- 必须给远端地址和远端端口赋值,尽管实际不发送rtp流

local remote_port = 3000 --

local ptime = 20

local codec = "PCMA"

local pt = 8

local rate = 8000

local cmd = "bgapi originate "

cmd = cmd .. "[origination_uuid=" .. uuid .. "]"

cmd = cmd .. string.format("[local_addr=%s,local_port=%d,remote_addr=%s,remote_port=%d,ptime=%d,codec=%s,pt=%d,rate=%d]", local_addr, local_port, remote_addr, remote_port, ptime, codec, pt, rate)

cmd = cmd .. "rtp"

cmd = cmd .. " &lua(asr.lua)"

debug(cmd)

local reply = api:executeString(cmd)

debug("reply = " .. reply)

stream:write(reply)

呼叫成功后就执行lua asr.lua,至于asr.lua要怎么写,得您自己脑补了

相关推荐
狂爱代码的码农2 天前
FreeSwitch之mod_cidlookup 和 mod_blacklist和mod_curl的抉择
freeswitch
狂爱代码的码农2 天前
FreeSwitch 的 `mod_blacklist` 模块详解
freeswitch
狂爱代码的码农20 天前
freeswitch在centos上编译过程
freeswitch
狂爱代码的码农1 个月前
debian12.9编译freeswitch1.10.12【默认安装】
freeswitch
Mike_Zhang2 个月前
FreeSWITCH日志功能分析及apr模拟
voip·freeswitch
贾宝玉的玉宝贾2 个月前
FreeSWITCH 简单图形化界面39 - Windows安装FreeSWITCH For IPPBX(WSL环境)
windows·voip·freeswitch·ippbx·sip测试
贾宝玉的玉宝贾2 个月前
FreeSWITCH 简单图形化界面38 - 使用uniapp中使用JsSIP进行音视频呼叫
uni-app·音视频·voip·freeswitch·ippbx·jssip
代码浪人2 个月前
docker 基于Debian镜像安装FreeSwitch1.10.7
docker·容器·debian·freeswitch
new_abc3 个月前
Sofia-SIP 使用教程
freeswitch·sofia
hongkid3 个月前
docker 部署freeswitch(非编译方式)
docker·容器·freeswitch