打电话开视频,离不开的VOIP网络SIP协议(打电话开视频用的是什么)

这年代,一部手机、一台电话就能想跟谁就跟谁开语音、通视频,你只感到了很自然、很理所应当。却不知这背后的技术之厉害,那只因你是一个普通的使用者。那么问题来了,如果你和我一样是一个IT界的追梦者,是不是多少得了解点这其中的原理奥义。

<——SIP协议的简介——>

会话初始协议SIP(Session Initiation Protocol)是由IETF提出并主持研究的一个在IP网络上进行多媒体通信的应用层控制协议,它被用来创建、修改、和终结一个或多个参加者参加的会话进程。简单来说,就是根据现在互联网中的IP寻址,来完成在网络中的音视频通话交流。现在SIP协议使用领域特别广泛,如海康威视、亿联通信、大华科技、也包含华为腾讯、字节等等。基本在音视频会话控制这块,SIP协议的使用还是较为广阔。

<—-SIP协议之音视频通话——->

如果说,让一个从来没认识过SIP协议的伙计,只通过三言两语就想搞明白SIP协议全套,那是不现实的。但是,如果花10分钟,读这篇文章,让你快速掌握SIP会议的核心内容,我觉得是可以实现的。因为我会告诉你,快速学就是要直奔核心,然后再向外突围。

下面这张图,就是本篇文章的核心,记住它,坐公交记它,坐地铁记它,吃饭睡觉都记它。等你随手就来,闭眼就写的时候,这个SIP协议的核心就基本掌握了。

以下是SIP协议中,使用音视频呼叫时候的流程控制图:

打电话开视频,离不开的VOIP网络SIP协议(打电话开视频用的是什么)

SIP呼叫流程

下面这个网络包,是通过在服务器上使用tcpdump抓包,并在windows上用WireShark工具查看。下面这17个信令交互流程,和上面的INVITE流程图完全一致。

打电话开视频,离不开的VOIP网络SIP协议(打电话开视频用的是什么)

呼叫INVITE

打电话开视频,离不开的VOIP网络SIP协议(打电话开视频用的是什么)

挂断Bye

<—-音视频呼叫的17个交互—->

请记住客户端A是20002230001,客户端B是20002230000,防止记忆错乱。

1、客户端A发INVITE请求到Server,请求Server来邀请客户端B加入会话。客户端A还通过INVITE消息的会话描述,将自身的IP地址10.230.9.106,音频端口号21000,视频端口21070,SDP协商的信息传送给Server。

INVITE sip:20002230000@39.106.209.165 SIP/2.0Via: SIP/2.0/udp 10.230.9.106:45426;rport;branch=z9hG4bK56308Max-Forwards: 70To: <sip:20002230000@39.106.209.165>From: <sip:20002230001@39.106.209.165>;tag=z9hG4bK73846736Call-ID: 509381976447CSeq: 1 INVITEContact: <sip:20002230001@10.230.9.106:45426;transport=udp>User-Agent: Zed-3-PDAService1-Extension: V1.0Content-Length: 351Content-Type: application/sdpv=0o=20002230001@39.106.209.165 0 0 IN IP4 10.230.9.106s=Session SIP/SDPc=IN IP4 10.230.9.106t=0 0m=audio 21000 RTP/AVP 114 101a=rtpmap:114 AMR/8000a=fmtp:114 mode-set=0a=rtpmap:101 telephone-event/8000a=fmtp:101 0-15a=ptime:100m=video 21070 RTP/AVP 126a=rtpmap:126 H264/90000a=fmtp:126 profile-level-id=42e00b;cif=1;fps=10

2、Server给客户端A发407 Proxy Authentication Required响应,表明要求对用户进行识别认证,并且通过Proxy-Authenticate字段携带Server支持的认证方式Digest和产生本次认证的nonce。

SIP/2.0 407 Proxy Authentication RequiredVia: SIP/2.0/UDP 10.230.9.106:45426;rport;branch=z9hG4bK56308From: <sip:20002230001@39.106.209.165>;tag=z9hG4bK73846736To: <sip:20002230000@39.106.209.165>;tag=04d930f20Call-ID: 509381976447CSeq: 1 INVITEUser-Agent: ASG SwitchContact: <sip:20002230000@39.106.209.165:7080>Proxy-Authenticate: Digest realm="ASG Switch", nonce="212a425d"Content-Length: 0

3、 客户端A发ACK消息给Server,证实已经收到Server对于INVITE请求的最终响应。

ACK sip:20002230000@39.106.209.165 SIP/2.0Via: SIP/2.0/UDP 10.230.9.106:45426;rport;branch=z9hG4bK56308Max-Forwards: 70To: <sip:20002230000@39.106.209.165>;tag=04d930f20From: <sip:20002230001@39.106.209.165>;tag=z9hG4bK73846736Call-ID: 509381976447CSeq: 1 ACKUser-Agent: Zed-3-PDAContent-Length: 0

4、客户端A重新发INVITE请求到Server。携带 Proxy-Authorization字段,包括认证方式DIGEST、用户标识(此时为电话号码)、域名、NONCE、URI和RESPONSE。

INVITE sip:20002230000@39.106.209.165 SIP/2.0Via: SIP/2.0/UDP 10.230.9.106:45426;rport;branch=z9hG4bK16771Max-Forwards: 70To: <sip:20002230000@39.106.209.165>From: <sip:20002230001@39.106.209.165>;tag=z9hG4bK73846736Call-ID: 509381976447CSeq: 2 INVITEContact: <sip:20002230001@10.230.9.106:45426;transport=udp>User-Agent: Zed-3-PDAService1-Extension: V1.0Proxy-Authorization: Digest username="20002230001", realm="ASG Switch", nonce="212a425d", uri="sip:20002230000@39.106.209.165", response="9a10b27ca9ea0e5a386df09896776ed7"Content-Length: 351Content-Type: application/sdpv=0o=20002230001@39.106.209.165 0 0 IN IP4 10.230.9.106s=Session SIP/SDPc=IN IP4 10.230.9.106t=0 0m=audio 21000 RTP/AVP 114 101a=rtpmap:114 AMR/8000a=fmtp:114 mode-set=0a=rtpmap:101 telephone-event/8000a=fmtp:101 0-15a=ptime:100m=video 21070 RTP/AVP 126a=rtpmap:126 H264/90000a=fmtp:126 profile-level-id=42e00b;cif=1;fps=10

5、Server给 客户端A回应100 Trying表示已经接收到请求消息,正在对其进行处理。

SIP/2.0 100 TryingVia: SIP/2.0/UDP 10.230.9.106:45426;rport;branch=z9hG4bK16771From: <sip:20002230001@39.106.209.165>;tag=z9hG4bK73846736To: <sip:20002230000@39.106.209.165>;tag=442048a6aCall-ID: 509381976447CSeq: 2 INVITEUser-Agent: ASG SwitchContact: <sip:20002230000@39.106.209.165:7080>Content-Length: 0

6、Server向客户端B发INVITE消息,并且通过该INVITE请求消息携带客户端A的SDP会话描述给客户端B。

INVITE sip:20002230000@114.242.25.68 SIP/2.0Via: SIP/2.0/UDP 39.106.209.165:7080;branch=6d1da8e3From: "æµè¯APP2" <sip:20002230001@39.106.209.165>;tag=2fe8f607Contact: <sip:20002230001@39.106.209.165:7080>To: <sip:20002230000@114.242.25.68>Call-ID: Anta16897569715b5d4f9c177f8850024e5b3e@190010acCSeq: 26032645 INVITEMax-Forwards: 70User-Agent: Zed-3-PDAService1-Extension: V1.0 close 1689756971Supported: timerSession-Expires: 90Content-Type: application/sdpContent-Length: 562v=0o=root 1830660323 1830660323 IN IP4 39.106.209.165s=sessionc=IN IP4 39.106.209.165t=0 0m=audio 24594 RTP/AVP 114 0 8 18 3 101a=RTPmap:114 AMR/8000a=fmtp:114 mode-set=0a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=rtpmap:18 G729/8000a=rtpmap:3 GSM/8000a=rtpmap:101 telephone-event/8000a=fmtp:101 0-15a=ptime:100m=video 40270 RTP/AVP 126 34 98a=rtpmap:126 H264/90000a=fmtp:126 profile-level-id=42e00b;cif=1;fps=10a=rtpmap:34 H263/90000a=fmtp:34 QCIF=1 CIF=1 MaxBR=4520a=rtpmap:98 MP4V-ES/90000a=fmtp:98 profile-level-id=3

7、客户端B给Server回应100 Trying表示已经接收到请求消息,正在对其进行处理。

SIP/2.0 100 TryingVia: SIP/2.0/UDP 39.106.209.165:7080;branch=6d1da8e3To: <sip:20002230000@114.242.25.68>From: "æµè¯APP2" <sip:20002230001@39.106.209.165>;tag=2fe8f607Call-ID: Anta16897569715b5d4f9c177f8850024e5b3e@190010acCSeq: 26032645 INVITEUser-Agent: Zed-3-PDAContent-Length: 0

8、客户端B振铃,并回180 Ringing响应通知Server。

SIP/2.0 180 RingingVia: SIP/2.0/UDP 39.106.209.165:7080;branch=6d1da8e3To: <sip:20002230000@114.242.25.68>;tag=9028d8f3a202e4f4From: "æµè¯APP2" <sip:20002230001@39.106.209.165>;tag=2fe8f607Call-ID: Anta16897569715b5d4f9c177f8850024e5b3e@190010acCSeq: 26032645 INVITEUser-Agent: Zed-3-PDAContent-Length: 0

9、Server回应180 Ringing响应给客户端A。

SIP/2.0 180 RingingVia: SIP/2.0/UDP 10.230.9.106:45426;rport;branch=z9hG4bK16771From: <sip:20002230001@39.106.209.165>;tag=z9hG4bK73846736To: <sip:20002230000@39.106.209.165>;tag=442048a6aCall-ID: 509381976447CSeq: 2 INVITEUser-Agent: ASG SwitchContact: <sip:20002230000@39.106.209.165:7080>Content-Length: 0

10、客户端B给Server回200 OK响应,表示其发过来的INVITE请求已经被成功接受、处理。并且通过该消息将自身的IP地址:192.168.2.63,音频端口21000,视频端口21070,以及SDP协商等信息传送给Server。

SIP/2.0 200 OKVia: SIP/2.0/UDP 39.106.209.165:7080;branch=6d1da8e3To: <sip:20002230000@114.242.25.68>;tag=9028d8f3a202e4f4From: "æµè¯APP2" <sip:20002230001@39.106.209.165>;tag=2fe8f607Call-ID: Anta16897569715b5d4f9c177f8850024e5b3e@190010acCSeq: 26032645 INVITEContact: <sip:20002230000@192.168.2.63:43518;transport=udp>User-Agent: Zed-3-PDAService1-Extension: V1.0Content-Length: 351Content-Type: application/sdpv=0o=20002230000@39.106.209.165 0 0 IN IP4 192.168.2.63s=Session SIP/SDPc=IN IP4 192.168.2.63t=0 0m=audio 21000 RTP/AVP 114 101a=rtpmap:114 AMR/8000a=fmtp:114 mode-set=0a=rtpmap:101 telephone-event/8000a=fmtp:101 0-15a=ptime:100m=video 21070 RTP/AVP 126a=rtpmap:126 H264/90000a=fmtp:126 profile-level-id=42e00b;cif=1;fps=10

11、Server给客户端B回应ACK,证实已经收到客户端B对于INVITE请求的最终响应。

ACK sip:20002230000@192.168.2.63:43518;transport=UDP SIP/2.0Via: SIP/2.0/UDP 39.106.209.165:7080;branch=6d1da8e3From: "æµè¯APP2" <sip:20002230001@39.106.209.165>;tag=2fe8f607To: <sip:20002230000@114.242.25.68>;tag=9028d8f3a202e4f4Call-ID: Anta16897569715b5d4f9c177f8850024e5b3e@190010acCSeq: 26032645 ACKMax-Forwards: 70User-Agent: ASG SwitchContent-Length: 0

12、Server给客户端A回应200OK,表示接受INVITE请求,并且将客户端B最后选择使用的SDP协商信息传送给客户端A。

SIP/2.0 200 OKVia: SIP/2.0/UDP 10.230.9.106:45426;rport;branch=z9hG4bK16771From: <sip:20002230001@39.106.209.165>;tag=z9hG4bK73846736To: <sip:20002230000@39.106.209.165>;tag=442048a6aCall-ID: 509381976447CSeq: 2 INVITEUser-Agent: Zed-3-PDAContact: <sip:20002230000@39.106.209.165:7080>Service1-Extension: V1.0 close 1689756971Content-Type: application/sdpContent-Length: 343v=0o=root 1748269658 1748269658 IN IP4 39.106.209.165s=sessionc=IN IP4 39.106.209.165t=0 0m=audio 18582 RTP/AVP 114 101a=rtpmap:114 AMR/8000a=fmtp:114 mode-set=0a=rtpmap:101 telephone-event/8000a=fmtp:101 0-15a=ptime:100m=video 49166 RTP/AVP 126a=rtpmap:126 H264/90000a=fmtp:126 profile-level-id=42e00b;cif=1;fps=10

13、客户端A发ACK消息给Server,证实已经收到Server对于INVITE请求的最终响应。

ACK sip:20002230000@39.106.209.165:7080 SIP/2.0Via: SIP/2.0/UDP 10.230.9.106:45426;rport;branch=z9hG4bK70120Max-Forwards: 70To: <sip:20002230000@39.106.209.165>;tag=442048a6aFrom: <sip:20002230001@39.106.209.165>;tag=z9hG4bK73846736Call-ID: 509381976447CSeq: 2 ACKContact: <sip:20002230001@10.230.9.106:45426;transport=udp>User-Agent: Zed-3-PDAContent-Length: 0

在此刻,主被叫双方都知道了对方的会话描述,成功启动通话。

中间就是conversation通话部分,主叫、被叫都把自己的音视频RTP包,发送到server协商好的音视频UDP端口,由server负责来交换转发RTP包。

14、客户端A主动发起挂机,发BYE消息给Server,请求结束本次会话。

BYE sip:20002230000@39.106.209.165:7080 SIP/2.0Via: SIP/2.0/UDP 10.230.9.106:45426;rport;branch=z9hG4bK00543Max-Forwards: 70To: <sip:20002230000@39.106.209.165>;tag=442048a6aFrom: <sip:20002230001@39.106.209.165>;tag=z9hG4bK73846736Call-ID: 509381976447CSeq: 6 BYEUser-Agent: Zed-3-PDAContent-Length: 0

15、Server给客户端B回200 OK,表明接受请求。

SIP/2.0 200 OKVia: SIP/2.0/UDP 10.230.9.106:45426;rport;branch=z9hG4bK00543From: <sip:20002230001@39.106.209.165>;tag=z9hG4bK73846736To: <sip:20002230000@39.106.209.165>;tag=442048a6aCall-ID: 509381976447CSeq: 6 BYEUser-Agent: Zed-3-PDAContact: <sip:20002230000@39.106.209.165:7080>Content-Length: 0

16、Server收到客户端A发过来的BYE消息,知道A已挂机,则给客户端B发BYE请求,请求结束本次会话。

BYE sip:20002230000@192.168.2.63:43518;transport=udp SIP/2.0Via: SIP/2.0/UDP 39.106.209.165:7080;branch=6d1da8e3From: <sip:20002230001@39.106.209.165>;tag=2fe8f607To: <sip:20002230000@114.242.25.68>;tag=9028d8f3a202e4f4Call-ID: Anta16897569715b5d4f9c177f8850024e5b3e@190010acCSeq: 26032649 BYEMax-Forwards: 70User-Agent: ASG SwitchContent-Length: 0

17、客户端B给Server回200OK,表示接受请求。

SIP/2.0 200 OKVia: SIP/2.0/UDP 39.106.209.165:7080;branch=6d1da8e3To: <sip:20002230000@114.242.25.68>;tag=9028d8f3a202e4f4From: <sip:20002230001@39.106.209.165>;tag=2fe8f607Call-ID: Anta16897569715b5d4f9c177f8850024e5b3e@190010acCSeq: 26032649 BYEUser-Agent: Zed-3-PDAContent-Length: 0

至此,就完成了一个SIP的音视频呼叫,是否感觉有点懂,又很多疑问呢?没事儿,接着往下看。

<—–为你答疑解惑—–>

1.从开篇文章第一张图片中,可以看到,谁发出的一个INVITE信令,一定要再发一个ACK收尾,这是要对应的。

2.这17个交互信令中,一定要明白传输SIP信令的UDP端口、SDP协商出来的传输音视频RTP的UDP端口。第一张图片中的客户端A的SIP信令发和收UDP端口是46117,而客户端B的SIP信令发和收UDP端口是43518,其中服务器server对外的SIP信令UDP端口是7080,服务器的这个端口是固定的。

一张图带你理解上面整个过程之后,确定的UDP端口通信流程。

打电话开视频,离不开的VOIP网络SIP协议(打电话开视频用的是什么)

3.简单说下SDP协商协议,这真没必要详细说,因为还要求你懂G711、H264常用的音视频编码。所以,我就简单说,让你懂大概,看关键。

这是第1个信令交互中的SDP信息:

v=0o=20002230001@39.106.209.165 0 0 IN IP4 10.230.9.106s=Session SIP/SDPc=IN IP4 10.230.9.106t=0 0m=audio 21000 RTP/AVP 114 101a=rtpmap:114 AMR/8000a=fmtp:114 mode-set=0a=rtpmap:101 telephone-event/8000a=fmtp:101 0-15a=ptime:100m=video 21070 RTP/AVP 126a=rtpmap:126 H264/90000a=fmtp:126 profile-level-id=42e00b;cif=1;fps=10

其中m行,代表media媒体行,audio代表音频,video代表视频。

其中a行,代表媒体的属性行,这个就要懂点音视频编码了。

<——好了到结尾线了———>

多余的解释:

1.掌握SIP协议中的音视频呼叫时关键,记住开篇那张图;

2.可以看我的另一篇文章:犹豫很久终于写下来了,从海康摄像头的ps流中提取h264原始数据

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023年8月27日 上午8:00
下一篇 2023年8月27日 上午8:10

相关推荐

  • 科研项目名称如何起培训

    科研项目的名称如何起培训 在开展科研项目时,确定科研项目的名称是至关重要的。一个合适的名称能够准确地传达科研项目的性质、目的和内容,从而吸引更多的关注和支持。在确定科研项目的名称时…

    科研百科 2024年10月10日
    15
  • 研究生功利心太重不适合做科研

    研究生功利心太重不适合做科研 随着科技的不断发展,科研作为其中的一个重要领域,越来越受到人们的关注。但是,科研不仅仅是一项技术,更是一项需要严谨的态度和认真的精神的。然而,有些研究…

    科研百科 2024年10月18日
    0
  • vps 服务器 管理系统

    VPS 服务器管理系统是一个非常重要的工具,可以帮助企业或个人更好地管理他们的虚拟专用服务器(VPS)。通过使用VPS服务器管理系统,用户可以轻松地进行配置、监控、安全维护和备份等…

    科研百科 2024年11月15日
    0
  • 项目进度跟进软件

    项目进度跟进软件 随着现代软件开发的日益复杂和快速,项目进度跟进变得越来越重要。项目进度跟进软件是一种可以帮助开发人员和项目管理人员跟踪项目进度的工具,能够帮助他们更好地协调工作,…

    科研百科 2024年8月20日
    45
  • 在2024年党建工作推进会上的讲话

    在2024年党建工作推进会上的讲话 尊敬的各位同志: 大家好! 今天,我们召开党建工作推进会,主要任务是回顾过去、展望未来,推动党建工作再上新台阶。 近年来,我们党高度重视党建工作…

    科研百科 2024年10月23日
    104
  • 科研项目负责人竞聘方案

    科研项目负责人竞聘方案 随着科技的不断发展,科研项目已经成为现代社会的重要组成部分。科研项目负责人的竞聘也成为了一个常见的职业选择。在这个背景下,我们有必要对科研项目负责人竞聘方案…

    科研百科 2024年4月11日
    77
  • 常州牧羊人智能化养殖亮剑中国畜牧业博览会

       江苏2016-05-25(商业电讯)–常州牧羊人为中国畜牧展带来了系列畜牧养殖新品及专业的畜牧养殖系统解决方案,包括养猪栏位饲喂称重系统、肉鸡笼养平养系…

    科研百科 2022年5月26日
    352
  • 软件开发 项目管理 工具

    软件开发项目管理工具:让软件开发变得更加高效和便捷 随着计算机技术的不断发展,软件开发已经成为了一个庞大的产业,每个软件开发团队都需要使用项目管理工具来帮助他们进行软件开发项目的管…

    科研百科 2024年5月30日
    90
  • 沂水县跋山水库管理中心:“三个强化”全面推进纪律作风集中整顿

    全县党员干部纪律作风集中整顿活动开展以来,跋山水库管理中心认真贯彻落实县委部署要求,迅速行动,突出“三个强化”,全面推进纪律作风集中整顿活动扎实有序开展。 强化思想认识,精心组织活…

    科研百科 2023年6月11日
    210
  • 农贸市场管理软件:最受欢迎的菜市场软件系统有哪些?(农贸市场软件哪个好)

    随着智慧农贸市场在全国飞速发展,智慧农贸的理念也日益深入人心。很多农贸市场的朋友都想给自己的市场引入一些管理软件系统,但是又不知道应该如何选择合适的软件系统。那么林鲲科技现在就结合…

    科研百科 2024年7月18日
    65