• JSSIP源码简介关于SIP协议使用的一个JavaScript库/JS在通讯中的应用


    JSSIP源码简介-关于SIP协议使用的一个JavaScript库/JS在通讯中的应用

    一 SIP协议是什么?

    首先来说一下SIP协议,下面是百度百科的一些选的片段:SIP是类似于HTTP的基于文本的协议。SIP可以减少应用特别是高级应用的开发时间。由于基于IP协议的SIP利用了IP网络,固定网运营商也会逐渐认识到SIP技术对于他们的深远意义。SIP(Session Initiation Protocol)是一个应用层的信令控制协议。用于创建、修改和释放一个或多个参与者的会话。这些会话可以是Internet多媒体会议[1]、IP电话或多媒体分发。会话的参与者可以通过组播(multicast)、网状单播(unicast)或两者的混合体进行通信。SIP它既不是会话描述协议,也不提供会议控制功能。SIP 独立于传输层。SIP 会话使用多达四个主要组件:SIP 用户代理、SIP 注册服务器、SIP 代理服务器和 SIP 重定向服务器。这些系统通过传输包括了 SDP 协议(用于定义消息的内容和特点)的消息来完成 SIP 会话。下面概括性地介绍各个 SIP 组件及其在此过程中的作用。

    简要来说,SIP协议用于IP电话等,不负责会话的具体描述,一般用来控制管理,如身份认证,控制连接等。在SIP协议中,使用用户代理UA进行对话,每个UA都是完全独立和平等的,合一进行直接的对话。在会话中,发送请求的一方成为UAC,即我们认为的客户端,接受的成为UAS,我们认为的服务器端。(是我们认为上的,实际应用以及在SIP协议中并未有什么区别,只是便于理解)。也可以通过中间的代理来进行通话。直接的一对一的通话是UAC--UAS。通过代理的话就是UAC--(UAS-UAC)--UAS中间的(UAS-UAC)即为中间的代理服务器,这种方式成为背靠背。关于更多此方面的和具体的东西,可以从下面的资料里看,说的挺明白清楚的,还有一些sip协议的具体格式,也都有。

     http://www.freeswitch.org.cn/2010/05/08/di-si-zhang-sip.html

    二 SIP协议栈

    关于SIP的使用,有GOOGLE的一个JS的协议栈,还有一个JSSIP的协议栈。都是基于JS的。基于其他语言的,我暂时没有了解。两个都是开源的,可以直接使用或者修改。最近在看JSSIP的,所以就主要说一说JSSIP。

    三 JSSIP的结构

    JSSIP的资料在www.jssip.net上有,文档API,源代码,还有快速入门用法,还有单元测试用例都是有的。下面是一个简单的用法:

    复制代码
    //Creating a JsSIP User Agent
    var configuration = {
      'outbound_proxy_set': 'ws://sip-ws.example.com',
      'uri':                'sip:alice@example.com',
     'password':           'superpassword'
    };
    var coolPhone = new JsSIP.UA(configuration);
    //Starting the User Agent
    coolPhone.start();
    //Making outbound calls
    var useAudio = true;
    var useVideo = true;
    var views = {
      'selfView':   document.getElementById('my-video'),
      'remoteView': document.getElementById('peer-video')
    };
    var eventHandlers = {
      'connecting': function(e){ // Your code here },
      'progress':   function(e){ // Your code here },
      'failed':     function(e){ // Your code here },
      'started':    function(e){ // Your code here },
      'ended':      function(e){ // Your code here }
    };
    coolPhone.call('sip:bob@example.com', useAudio, useVideo, eventHandlers, views);
    复制代码
    //Sending instant messaging
    var contentType = "text/plain";
    var text = 'Hello Bob!';
    var eventHandlers = {
      'succeeded': function(e){ // Your code here },
      'failed':    function(e){ // Your code here };
    };
    coolPhone.sendMessage('sip:bob@example.com', text, contentType, eventHandlers);
    复制代码
    复制代码

    API和快速用法的程序,上面给的网址很清楚,就不再赘述。如果想要修改源代码供自己使用,可能就需要弄懂内部的结构了。只是单纯使用的话就不必了。

    源码还是挺多的,2万行左右。里面的一些逻辑稍显复杂,我现在也没有每一行都看的很清楚,核心的部分大概懂了一些。以一些简单的图来说明吧:

    框架图:

    类图:

    时序图:

    有兴趣的可以一同探讨~图片可能不是很清楚,因为没办法放太大,相册里有原图,能够看的比较清楚。

    类图还有一些周边的类我没有画出来(屏幕放不太不想滚动才能看全,所以就把类图缩减了一点),主要是比较核心的一些类。

    代码从UA入手,其中SIPMessage,Parser等类比较重要。Grammar有一万多行,进行语法解析,看了个大概就没再仔细研究。

    这个库底层是基于WebSocket进行传输,在transport文件中可以看到。

    根据SIP协议的结构,有session,transaction,Dialog类,表示会话,事务,和对话。插一句话,这三个概念也是需要进行区别的,当然啦,这是比较基础的概念。

    Parser类对收到的信息进行解析,(String型),转换为自己定义的信息格式(SIPMessage的两个子类之一,分别表示response和request)。

    然后对要发出去的信息进行包装,变成String型的data发送出去。要发出去的信息用一个类表示,我们向这个类中填充数值,由程序进行转换。

    对这些信息的操作,都由UA进行流程控制。

  • 相关阅读:
    Qt(python) + 百度语音合成 实现demo
    windows7 + Qt(MSVC2017) + VS2019安装配置
    ubuntu下openCV-Haar特征分类器训练
    坚果云+typora(个人十分喜欢的一个记笔记方式)
    文本编辑--程序员专属技能
    ftp、tftp、nfs--服务器搭建
    QT--动态人流量监测系统
    C++ --内存四区概述
    CTFHUB-技能树-Web-信息泄露
    网络教育行业频发奖金高薪挖人,在线教育行业将迎来快速发展
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2998788.html
Copyright © 2020-2023  润新知