Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于声网的音视频SDK和FreeSWITCH开发WebRTC2SIP Gateway 报文设计 (二)

基于声网的音视频SDK和FreeSWITCH开发WebRTC2SIP Gateway 报文设计 (二)

原创
作者头像
qzlink.com
修改于 2020-07-02 01:55:04
修改于 2020-07-02 01:55:04
1.1K0
举报

上一篇我们提到,常用的SIP 信令有:1注册、2振铃、3呼叫、4接听、5挂断、6取消

有了这几个报文,电话的呼入和呼出就可以基本实现,其他拒接、DTMF等类似。

如图所示:

约定:

1、 客户端和服务器JSON格式交互;

  • 必传参数:
    • msgtag 是消息唯一标志,
    • userid是谁触发的,
    • appid 作为一个应用的标记。
    • sign 签名加密 (看情况)

2、 服务器返回的报文必须包括msgtag \appid\errcode

代码语言:txt
AI代码解释
复制
errcode=1 说明有错误 errmsg就会有值 ;
代码语言:txt
AI代码解释
复制
如果errcode=0 说明返回结果正确
代码语言:txt
AI代码解释
复制
一般是返回的msgtag 是请求的msgtag+”_res”做为区分

3、 roomID 是房间号对应声网的渠道号,每个通话报文必须包括roomID 用途是什么自己想。

4、 callType 是video audio 前者代表视频呼叫,后者代表语音呼叫

5、 direction 呼叫方向

代码语言:txt
AI代码解释
复制
in 呼入 (SIP Server 把呼叫送到声网的SDK)
代码语言:txt
AI代码解释
复制
out 呼出(SDK把呼叫送到SIP Server)

6、 isSIP yes no 代表这通呼叫是内部呼叫(声网客户端实现) 还是SIP呼叫(走落地)

这篇文章我只是简单列出核心的报文DEMO格式。

信令1:注册报文

响应报文:

信令2:呼叫报文

响应报文:

信令3:振铃报文

响应报文:

信令4:接听报文

响应报文:

信令5:挂断报文

响应报文:

信令6:取消报文

响应报文:

如图上面设计的报文非常简单,相信大家都看得明白。不需要过多言语说明,供大家参考吧。

不论客户端还是WebRTC2SIP connector 本质上都是声网的音视频SDK客户端,然后集成了自定义的报文,所以他们初始化的时候,需要调用一个专门的的接口暂时叫做initSIP,调用这个接口的时候传递type 类型参数;如果是手机端或者电脑端、网页端调用,返回TCP Server地址和端口,供他们建立连接; 如果是connector转接服务器请求的话,除了返回TCP Server 地址和端口外,还要返回SIP Server地址及端口,以及呼叫送号前缀。不然SDK发起电话呼叫的时候,connector 不知道电话要转送到哪里。这个开发一个http接口就可以实现。

APP初始化,调用initSIP接口,建立TCP连接,或者呼叫的时候在建立TCP连接;

TCP Server维持所有终端的状态及网络位置做Session Manager 角色

主叫输入的号码编辑封装calling报文,通过tcp socket 发给服务器,同时UI呈现拨号等待页面;

被叫收到calling报文,就封装ringing报文,通过tcp socket 发给服务器,服务器查询Session Manager 查

询主被叫的IP和端口,实现消息的路由转发,主叫收到就显示振铃页面,同时 WebRTC2SIP connector 启动media coder线程去解析和resample 读取到的音频流。就这样一个个的报文交互串起来,就可以实现整个SIP呼叫逻辑。

有兴趣的同学,快去试试吧。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
大一C语言实训与总结
} 修正后的程序没有语法错误。执行结果将打印出 a=0 f=134.23,其中 a 的值为 0,f 的值为 134.23。
千山暮海雪
2024/12/25
1210
【python入门系列课程 第七课 计算机是如何做决定的(二)】
本系列课程是针对无基础的,争取用简单明了的语言来讲解,学习前需要具备基本的电脑操作能力,准备一个已安装python环境的电脑。如果觉得好可以分享转发,有问题的地方也欢迎指出,在此先行谢过。
叶子陪你玩
2020/03/12
4080
QTreeView使用总结13,自定义model示例,大大优化性能和内存[通俗易懂]
前面简单介绍过Qt的模型/视图框架,提到了Qt预定义的几个model类型: QStringListModel:存储简单的字符串列表 QStandardItemModel:可以用于树结构的存储,提供了层次数据 QFileSystemModel:本地系统的文件和目录信息 QSqlQueryModel、QSqlTableModel、QSqlRelationalTableModel:存取数据库数据
全栈程序员站长
2022/09/03
2.7K0
QTreeView使用总结13,自定义model示例,大大优化性能和内存[通俗易懂]
R7-1 学生平均成绩排序
假设学生的基本信息包括学号、姓名、三门课程成绩以及个人平均成绩,定义一个能够表示学生信息的结构类型。输入n(n<50)个学生的成绩信息,按照学生的个人平均分从高到低输出他们的信息。
苏泽
2024/03/01
2690
04:谁拿了最多奖学金
04:谁拿了最多奖学金 总时间限制:1000ms内存限制:65536kB描述 某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同: 1)     院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得; 2)     五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得; 3)     成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可
attack
2018/04/03
1.2K0
MySQL 经典30题,拿走不谢!!!
这里将开始我们的 sql 之旅,在这里希望对 sql 能力稍弱的同学,有一定的帮助。 如果大家在以下 sql 学习中,发现更具有优化性的建议,可以留言给小编或者加技术群交流,让我们一起成长。(底部有WeChat方式)
八点半的Bruce、D
2020/06/09
1.3K0
SQL之50个常用的SQL语句
50个常用的sql语句 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题: 1、查询“001”课程比“002”课程成绩高的所有学生的学号;  select a.S# from (select s#,score from SC where C#='001') a,(select s#,score  from SC where C#='002') b  wher
互联网金融打杂
2018/04/03
7910
常见的50道数据库面试题
前言:2021年的第一篇公众号,希望自己在学到知识的同时也能分享给大家,一起进步!!
小雯子打豆豆
2021/01/18
1.8K0
SQL语句面试题目_sql基础知识面试题
表结构,节选自:http://www.cnblogs.com/qixuejia/p/3637735.html 题目一,节选,自:https://wenku.baidu.com/view/cda288f1b90d6c85ed3ac671.html 题目二,节选,自:http://www.cnblogs.com/qixuejia/p/3637735.html (为了满足“题目”查询条件,在原文的基础上,插入的测试语句中”增加了几条sc,新增了条Course,修改了student的部分年龄)
全栈程序员站长
2022/09/27
9510
SQL笔试50题(上)
本节内容,我们使用在入门内容部分介绍的在线SQL平台sql fiddle进行测试。
fireWang
2020/02/18
8680
【Python百日精通】深入理解Python条件语句的高级用法
条件语句不仅用于基本的条件判断,还可以扩展到更复杂的逻辑中。以下是一些扩展用法的示例:
屿小夏
2024/08/27
1990
【Python百日精通】深入理解Python条件语句的高级用法
掌握Python控制流:if语句的高级用法
在Python编程中,控制流语句是构建逻辑和执行流程的基础。if语句是控制流语句中最基本、最常用的语句之一。通过if语句,我们可以根据条件执行不同的代码块。本文将详细介绍Python中if语句的高级用法,包括嵌套if、elif的使用、条件表达式、逻辑运算符、组合条件、短路逻辑等,并提供具体的示例代码,帮助全面掌握if语句的高级用法。
sergiojune
2024/07/22
1930
掌握Python控制流:if语句的高级用法
每天 3 分钟,小闫带你学 Python(七)
今天暂时不分享英文名言,因为昨天晚上看到4句话,特别想分享给大家。第一句『物来顺应』告诫我们事情已经发生了,就要顺应去面对;第二句『未来不迎』劝告我们不要为没有发生的事情而焦虑;第三句『当事不杂』告诉我们专注于做好当前的事情;第四句『季过不恋』指明已经过去的事情,无论是好是坏,都不必去留恋。
小闫同学啊
2019/07/30
5320
每天 3 分钟,小闫带你学 Python(七)
超级经典的SQL练习题(MySQL版本),你还怕SQL不过关吗?
微信搜索公众号【C you again】,回复“SQL”下载无水印PDF版本,方便收藏
C you again 的博客
2021/07/08
1.5K0
Python入门教程笔记(二)控制语句
计算机之所以能做很多自动化的任务,因为它可以自己做条件判断,通过条件判断,选择做什么样的逻辑(当然,逻辑是需要我们提前写好的),我们称之为条件分支判断。
Lemon黄
2020/10/10
4600
Python 条件控制 — if语句
引言 生活中的判断几乎是无所不在的,我们每天都在做各种各样的选择,如果这样?如果那样?…… 程序中的判断 流程判断示意图 image.png 成绩等级判断 60分以下为不及格 D 60 - 70 为及格 C 70 - 80 为良好 B 80 - 100 为优秀 A image.png 流程图可以非常直观地描述一个工作过程。 Python中的 if 语句 if 语句基本语法 在 Python 中,if 语句 就是用来进行判断的,格式如下: if 要判断的条件: 条件成立时,要做的事情 .
忆想不到的晖
2021/12/06
7040
Python 条件控制 — if语句
Python语言练习
Python程序由指令组成,运行程序时,计算机依据预设好的指令执行程序。 print是最简单,但很常用的指令,它用于将一些信息输出至屏幕上。 下面演示Python中的print指令:
荣仔_最靓的仔
2021/02/02
3.1K0
Python语言练习
深入理解Python中的if语句
Python 中的 条件控制语句 (Conditional control statement) 是通过一条或者多条语句的执行结果(True 或者 False),来决定执行的代码逻辑 。
皮大大
2021/10/08
1K0
深入理解Python中的if语句
SQL数据库面试题以及答案(50例题)
来源:blog.csdn.net/hundan_520520/article/details/54881208
肉眼品世界
2020/11/11
3.2K0
Golang框架实战-KisFlow流式计算框架(12)-基于反射自适应注册FaaS形参类型
接下来我们来增强KisFlow中Function对业务数据处理的聚焦,将之前Function的写法:
刘丹冰Aceld
2024/07/23
1310
相关推荐
大一C语言实训与总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档