自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 资源 (2)
  • 收藏
  • 关注

原创 SIP开源服务器kamalio安装教程

1. 介绍kamailio是一款强大的开源的SIP信令服务器。通过一些简单的配置和参数设置即可进行使用,这里介绍在unbuntu-20.04 server版上的安装步骤。2 安装2.1 安装依赖sudo apt install libssl-dev libmysqlclient-dev autoconf libcurl4-openssl-dev libxml2-dev libpcre3-dev2.2 安装mysqlsudo apt install mysql-server安装完毕之后,使用

2022-01-20 09:49:20 6218 3

原创 lambda表达式

1. 介绍在C++11标准中,引入了lambda表达式,通过lambda表达式在代码中的使用,可以大大简化C++的代码,使得代码更加清晰并且容易阅读。lambda表达式在概念上,个人理解为是一个匿名的内部函数,然后通过函数指针的方式使外部可以使用这个内部函数。lambda表达式的结构如下所示:[捕获列表] (参数列表)-> 返回类型 { 函数体 }例子1int classicLambda(){ int a = 10; auto cLambda = [&a](in

2021-04-28 09:32:21 265

原创 左值和右值std::move和std::forward

1. 左值和右值C++中的表达式存在左值、右值之分,实际上这个语法表述继承自C语言,在C语言中,这两个语法词的意义很简单,左值表示可以在赋值语句左侧的表达式,右值表示可以在赋值语句右侧的表达式。但是C++中对这两个语法的语义进行了拓展,简单来说可以归纳如下:左值使用的是对象的身份(即内存中的位置);右值使用的是对象的值(内容);下面是一个左值和右值的最简单的例子:int a = 1;在上面代码的描述中,a和1都是表达式,不同的是,a是一个左值,1是一个右值,这个概念在实际上和C语言中的概

2021-04-28 09:29:32 446

原创 H323——460NAT穿透相关

1. 概述在H323中使用穿透相关的协议为H460.18和H460.19,H323的穿透协议利用了NAT和FW对于出站流量的限制比入站流量限制宽松的特性,从而实现了NAT穿透相关的功能。2. 信令穿透信令的NAT穿透的基本原理为当终端设备注册到相关的GK之后,会通过不断发送GRQ或者RRQ消息维持这一和GK之间在NAT/FW上的端口映射关系。建立这一关系之后,信令的流程就可以通过GK下发给终端设备,从而完成各项通话流程。相关的标准文档为H460.18。在这样的基础上,H323引申出了一个新的概念:t

2021-04-28 09:23:30 1564 1

原创 GNUGK添加SimplePasswordAuth账号

步骤第一步打开GNUGK的启动文件添加如下的内容:[SimplePasswordAuth];在这下面会存放简单账号认证中的账号密码信息[Gatekeeper::Auth];启动认证机制SimplePasswordAuth=required;RRQ,ARQ;简单账号密码认证是否为必须,对H323那些信令流程进行账号认证第二步添加账号信息使用gnugk提供的账号添加工具添加账号到配置文件(即gnugk的启动配置文件一般为gatekeeper.ini)中,命令如下所示: ./addpasswd

2021-04-28 09:19:03 409

原创 SIP协议层次划分

SIP是一种分层的协议,SIP的协议描述的层次结构从下至上可以分为如下层次:语法编码层:这一层指定了SIP使用ABNF编码格式。注:所谓的ABNF编码格式是一种数据的表述方式,在互联网中具有广泛的应用,其结构为name = elements crlf,名称即为规则名称,elements是对规则的补充,crlf则为标准的结束指示符(即\r\n)传输层:这一层负责定义客户端如何通过网络连接发送请求和接收响应,服务端如何接收请求和发送响应。交易层(transaction层):transactio

2021-04-21 14:22:29 2105

原创 ICE 流程(1)——candidate属性

1. 介绍ICE是针对NAT问题的综合性解决方案,candiate属性是ICE中用来描述可以用来和本地通信的地址相关的信息,在传统的概念上,这个信息一般仅需要三个:IP、端口、传输方式,但是为了完成整个ICE的协议的运作流程,对于一个candidate来说,还需要其他的一些和ICE协议相关的信息。2. candidate格式candidate的格式可以在RFC8839中找到,相关的定义如下:candidate-attribute = “candidate” “:”foundation SP

2021-04-11 11:57:41 4470

原创 二叉树的遍历

网上查二叉树遍历的相关资料,发现概念一大堆,还配着各种图和代码,其实总结下来就那么一点:遍历都是从左至右的,然后:前序遍历:根结点优先中序遍历:根结点第二后序遍历:根结点最后层序遍历:从上之下,一层一层遍历根结点。根结点的在遍历方式中的优先级在遍历方式的名字中,就有所反应了。...

2021-03-04 07:57:08 105 1

原创 一、SIP基础

#1. 概念讲述##1.1SIP request请求是SIP中一个最基本的概念之一,每一次关于SIP的操作都需要发送请求。##1.2 SIP response回复和请求在SIP中一般都是成对出现,回复中的内容是对端关于请求的处理结果。##1.3 transactionSIP协议是一种事务型协议。transaction的概念建立在请求和回复之上,一个请求和相关的最终回复就组成了一个transaction。(不包括关于ACK的处理)由于在一次通话建立到结束的过程中,会有多个Transaction,所

2021-03-03 11:46:40 726

原创 stun信令

#1. 简介stun协议本身是用来进行NAT穿透使用,其本身实际上是NAT内部设备获取外部IP地址的一种协议。STUN协议在RFC上目前经过三种演变,其中RFC3489上定义的STUN和之后的RFC5389和8489上定义的stun在概念上存在明显区分:RFC3489定义:Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs) (STUN)RFC5389和RFC8489:Se

2021-03-03 11:43:36 1777

原创 线程安全注解——GUARDED_BY

线程安全注解是现代C++开发的机制,可以在代码编译阶段检查锁的使用情况,从而发现线程同步的相关问题。#1. 线程安全注解的使用按照clang的线程安全注解文档 可以看到如果需要使用线程安全注解的相关功能需要对锁进行相关的封装之后才可以进行使用。目前存在clang存在两套线程安全注解的使用方法,本文仅介绍最新的线程安全注解使用方式(新的capability机制已经完全取代了之前的lockable机制)。在使用前,首先了解一下clang官方推荐的mutex.h中实现的几个宏CAPABILITY//该宏

2020-10-16 13:46:30 8830

原创 FECC——摄像头控制信令H.281和H224

#1. 支持的消息类型对于FECC协议来说,请求不会有对应的回复。因为摄像头的视觉反馈,可以替代实际响应的过程,FECC协议所需的是能够快速准确地传输控制信息。在FECC中支持以下消息类型:(1)START ACTION——请求摄像机三轴进行运动(2)CONTINUE ACTION——请求摄像机三轴进行运动(3)STOP ACTION——请求摄像机三轴进行运动(4)SELECT VIDEO SOURCE——请求切换到指定的视频源进行编码和传输(5)STORE PRESET——请求存储当前的视

2020-09-25 15:31:23 2511

原创 openSSL中SSL_MODE_AUTO_RETRY使用引发的问题

1. SSL_MODE_AUTO_RETRY的作用关于这个flag的作用,openSSL官方的解释如下所示:SSL_MODE_AUTO_RETRYNever bother the application with retries if the transport is blocking. If a renegotiation take place during normal operation, a **SSL_read(3)**or SSL_write(3) woul

2020-08-17 16:22:11 1236

原创 C++ vscode头文件找不到fatal error: No such file or directory

1. vscodeC++多文件编译vscode的多文件编译可以通过多种方式来实现,例如,直接的多文件编译,引入makefile生成多个task进行编译,这二者实际上都依赖于vscode中tasks.json完成。vscode默认生成的tasks.json如下所示:{ "tasks": [ { "type": "shell",#指定编译环境为shell "label": "C/C++: gcc-7 build active file

2020-08-11 12:09:47 12311

原创 vscode remote-ssh一直显示链接失败

vscode的remote-ssh工具很好用,但是在windows平台上使用vscode的remote-ssh功能时,一直显示链接失败。原因是windows自带的ssh工具一开始并不起效或者ssh工具并不存在。这时候只需要让remote-ssh工具使用一个可用的ssh工具即可。个人安装了一个git终端在电脑上,然后直接在vscode的配置中如下将git的ssh工具路径填写进去即可:替换完成之后,即可正常使用vscode的remote-ssh的功能。...

2020-08-11 12:05:32 8882 22

原创 H323——H239演示功能

1. 概述H239在ITU文档中实际命名为Role management and additional media channels for ITU-T H.300-series terminals,意为H300系列中断的角色管理和额外没媒体流,H239是H323中用来开启辅流的信令流程规范,会为相关的媒体流添加角色,该文档包含了控制,声明,能力交换等机制。在H239文档中定义了相关的几个术语,需要重点关注的是以下几个:1.1 control & indication: Messages,

2020-07-23 13:54:36 1848

原创 OpenH323中线程创建的方式

在分析线程模型时需要注意OpenH323中线程的实现有多种方式。1.继承PThread_H323例子如下:class OpalH224ReceiverThread : public PThread_H323{ PCLASSINFO(OpalH224ReceiverThread, PThread_H323); public: OpalH224ReceiverThread(OpalH224Handler *h224Handler, RTP_Session & rtpS

2020-07-22 16:35:07 161

原创 TIAS(RFC3890)的使用规则

1.概述TIAS用来描述媒体带宽的大小。在TIAS之前还有另外一个参数具有相同的作用,该参数为AS。2.AS不足AS局限性在于其所实际考虑的带宽包括了底层网络协议的带宽消耗,即在本质上,AS是是传输媒体时实际消耗的带宽,而不仅仅只是针对媒体数据的带宽。而这种现象的消耗在跨IPv4和IPv6的网络传输中更为明显。并且在某些情况下,媒体流可能会在不同的底层网络协议上进行传输,所以AS参数无法实际地表现出一个媒体流需要的带宽。AS参数的不足之处同样体现在和SDP的C行参数的联动上,C行参数可能在经过某些

2020-07-22 16:31:28 782

数值计算方法中的典型方法使用c++代码实现

数值计算方法中的典型方法使用c++代码实现。对数值计算方法中的典型方法都进行了实现。例如最小二乘法,辛普森公式,列主元消元法,插值法。

2016-10-29

基于最优二叉搜索树的用户登录系统模拟

AVL,用户登录系统

2016-05-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除