热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pjsip学习笔记11

关于模块的博文在这里:https:blog.csdn.netsmllyyarticledetails40824491一)关于invite会话参考博文内容摘录
关于模块的博文在这里: https://blog.csdn.net/smllyy/article/details/40824491

一) 关于invite 会话

参考博文内容摘录如下:
1) DialogINVITE会话和usage在单独的静态库中实现,即pjsip-ua库
2) DialogINVITE会话是一个在一个Dialog中的INVITE会话。如果应用决定使用高层的INVITE会话管理,它需要为每一个Dialog创建唯一一个Dialog INVITE会话实例
3) DialogINVITE usage是一个注册到endpoint的PJSIP模块。
     当一个Dialog有Dialog INVITE session时,这个模块需要作为Dialog usage注册到特定的Dialog。这将在INVITE会话创建的时候自动实现
3) INVITE会话状态机, 上半部分为caller(UAC), 下半部分为callee(USA)

4) 外呼的Dialog(即拨打电话的),应用需要使用pjsip_dlg_create_uac()创建一个UAC Dialog。
    接着调用pjsip_inv_create_uac()来创建invite会话,并将这个UAC实例作为这个函数的一个参数传入。
    禁止在invite会话被创建之前发送INVITE请求。

5) 呼入的Dialog,应用可以通过调用pjsip_inv_verify_request()来验证是否这个请求可以被接收。
    这个函数验证Supported,Require,和请求的消息体来确认这个请求是否可以被接收。
    如果这个请求不能被接收,应用将才拒绝的响应。
    如果这个请求可以被接收,应用创建通过调用pjsip_dlg_create_uas()来创建UAS Dialog。
    接着调用pjsip_inv_create_uas()来为这个Dialog创建invite会话,并将这个UAS Dialog实例,作为一个参数传入。
    应用禁止在invite会话创建之前发送任何响应。

6) Invite会话创建函数pjsip_inv_create_uac()和pjsip_inv_create_uas()函数)将自动注册invite会话usage到这个dialog。
     应用不需要调用pjsip_dlg_add_usage()来添加invite usage模块到这个Dialog

7) Invite会话处理所有能改变会话状态的SIP方法。如: INVITE,BYE,ACK,CANCEL,UPDATE和PRACK方法

8) 应用必须使用invite会话API来创建和发送请求和响应消息以确保请求和响应消息被正确处理并包含了会话正在使用的特性(如可靠临时响应)

9) 应用可以使用基本的Dialog API来创建和发送除了上面列出的之外的方法的请求和响应消息。例如,应用可以使用基本的Dialog API来创建和发送一个Dialog中的MESSAGE请求


二) 关于事务
        https://blog.csdn.net/smllyy/article/details/40822507
      PJSIP中的transation表示为pjsip_transaction结构
          通过pjsip_tsx_endpt_create_uac()/pjsip_tsx_create_uas()创建
          在初始化UAS之后,应用将需要调用pjsip_tsx_recv_msg()传入初始的请求消息,这样这个transaction的状态就从NULL变为TRYING。后续的重传请求将被这个事务终止。
          当应用想要使用这个Transaction发送请求或响应消息时,它将调用pjsip_tsx_send_msg()
          当有消息传给Transaction时(Endpoint传给的到来消息或TU传给的外出消息),或定时器超时,事务状态会自动改变,并且TU通过on_tsx_state()回调函数将被通知。
          如果Transaction的状态变为PJSIP_TSX_STATE_TERMINATED时,这个Transaction将被销毁。应用也可以调用pjsip_tsx_terminate()来强制终止这个Transaction。

     Transaction有两种类型的定时器:重传定时器和超时定时器。这两种定时器的值将被Transaction根据Transaction的类型(UAS或UAC)/transport(可靠或不可靠)/请求方法(INVITE和non-INVITE)来设置
     Transaction处理包括到来和外出的重传。到来的重传会被Transaction安静地终止和忽略;Transaction不会发出任何通知。Transaction在需要时,会自动重传外出消息;同样也不发出任何通(回调)

     *** Transaction使用核心API pjsip_endpt_send_request_stateless()和pjsip_endpt_send_response()来发送外出消息
       *** Transaction会增加使用的transport中的引用计数器    



三)  关于SDP协商

    http://blog.chinaunix.net/uid-790245-id-2037592.html
    https://blog.csdn.net/u011062712/article/details/23761139
    https://blog.csdn.net/smllyy/article/details/40824199

***  PJSIP中SDP offer/answer框架是基于RFC3264”An Offer/Answer模型使用会话描述协议(SDP)
***  Dialog invite会话提供SDP offer/answer和SIP协议的整合
****  拒绝某个Offer的流,该流的端口值必须设置为0
***  Offer如果是sendonly,则Answer必须为recvonly或者inactive;
     Offer如果是recvonly,则Answer必须为sendonly或者inactive;
     Offer如果是sendrecv,则Answer必须为sendrecv、recvonly、 sendonly或者inactive;
     Offer如果是inactive,则Answer必须为inactive。

      即使Offer是recvonly型,Answer的地址和端口也必须存在,因为需要传送RTCP, 端口为0表示拒绝。

推荐阅读
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 如何在窗口右下角添加调整大小的手柄
    本文探讨了如何在传统MFC/Win32 API编程中实现类似C# WinForms中的SizeGrip功能,即在窗口的右下角显示一个用于调整窗口大小的手柄。我们将介绍具体的实现方法和相关API。 ... [详细]
  • ImmutableX Poised to Pioneer Web3 Gaming Revolution
    ImmutableX is set to spearhead the evolution of Web3 gaming, with its innovative technologies and strategic partnerships driving significant advancements in the industry. ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本文介绍如何通过更改软件源来提前体验Ubuntu 8.10,包括详细的配置步骤和相关注意事项。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
author-avatar
他像强盗霸占了d我的心
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有