自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(91)
  • 问答 (2)
  • 收藏
  • 关注

原创 音视频--音频实时传输

实时音频的传输中为了提升音频质量,一般要对音频做特殊处理:降噪、回声消除、自动增益(3A算法)。通过编解码器自身的的算法特性可以实现上述内容。但是也有专门的库来帮助实现对音频质量的提升。speexdsp库可以对声音数据中的高频声音和低频声音进行抑制,并进行降噪。同时speexdsp也提供了3A算法对音频增益。

2024-05-23 16:14:01 25

原创 C++学习之基于apr构建不定长内存池申请分配

【代码】C++学习之基于apr构建不定长内存池申请分配。

2024-03-22 10:51:47 121

原创 C++学习之malloc开辟空间位置对访问该空间的影响

C和C++中malloc在函数内部和外部的使用时会影响其他函数访问其开辟的内存空间。

2023-11-27 15:02:49 400

原创 C++学习之值传递

c/c++中存在三种传值方式,在局部函数中,对这三种传值方式传入的参数进行修改,会得到不同的结果。

2023-11-27 14:29:59 438

原创 C++学习之强制类型转换

【代码】C++学习之强制类型转换。

2023-10-23 16:10:28 432

原创 C++基础--传指针或引用修改形参值

【代码】C++基础--传指针或引用修改形参值。

2023-09-01 10:13:03 269

原创 音视频--视频数据传输

1个比特. forbidden_zero_bit. 在 H.264 规范中规定了这一位必须为 0.禁止位,0表示正常,1表示错误,一般都是0;2个比特. nal_ref_idc. 取00~11,表示这个NALU的重要性,如00的NALU解码器可以丢弃它而不影响图像的回放.之前提到过,单个H264仅用1-23类型,24以及以后的用在RTP协议中 H264数据的头部,用于标识传输过程中H264的类型。

2023-08-09 17:21:27 806

原创 音视频--DTMF信号发送及检测

双音多频信号(英语:Dual-Tone Multi-Frequency,简称:DTMF),电话系统中电话机与交换机之间的一种信令,最常用于拨号时发送被叫号码。不过双音多频的发明,除了缩短拨号时间,也扩展了拨号之外的功能,例如自动总机、交互式语音应答。

2023-08-03 16:51:52 3346

原创 计算机基础--Redis

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。单线程,满足 redis 的串行原子,只不过 IO 多线程后,把 输入/输出 放到更多的线程里去并行。(网卡能够高效的使用)。执行命令仍然是单线程顺序执行,不需要担心线程安全问题。无论什么版本,工作线程就是一个,但是在6.x 高版本出现了 IO 多线程。虽然 Redis 中引入了多线程,但是。答:充分利用多核,提高网络吞吐。简单来说,为什么使用多线程?

2023-04-19 16:31:46 420 1

原创 计算机基础--MySQL--索引

建立索引以后,可以通过索引进行查询。更通俗的说,索引就相当于目录。主键索引其实并不是一种索引类型,而是根据主键,在主键上建立聚集索引,主键是具有唯一性且不能为空。使用 UNIQUE 参数可以设置索引为唯一性索引,在创建唯一性索引时,限制该索引的值必须是唯一的,但允许有空值(该空值也可以有多个)。除聚集索引外都称为非聚集索引,非聚集索引底层构建的B+树叶子节点里面存储了这个表的每一行数据的地址。索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。

2023-04-14 15:27:25 390

原创 开源代码走读--unimrcp

当unimrcp作为录音仪使用时,其rtp数据流在client端得发送流程及server端的解析流程

2023-04-11 16:23:33 659

原创 音视频--音频基础

将音频三元组(采样率、采样大小、通道数)的值转成另外一组值。三元组其中任意一个值发生改变就称为重采样, 例如44100/16/2 转成 48000/16/2。

2023-04-07 18:04:24 591

原创 计算机网络--基础通信概念

相应的,局域网中的计算机需要和其它局域网中的计算机、和互联网上的计算机进行通信的时候, 数据包必须要通过网关才可以到达,这就是网关的作用。网桥是属于数据链路层的一种设备,它的作用是扩展网络和通信手段,在各种传输介质中转发数据信号,扩展网络的距离,同时又有选择地将现有地址的信号从一个传输介质发送到另一个传输介质,并能有效地限制两个介质系统中无关紧要的通信。互联网可以看成是局域网、广域网等组成的一个最大的网络,它可以把世界上各个地方的网路都连接起来,个人、政府、学校、企业,只要你能想到的,都包含在内。

2023-04-07 09:09:30 453

原创 设计模式--装饰模式

设计模式--装饰模式

2023-02-23 14:42:07 59

原创 设计模式--工厂模式

这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。工厂模式主要使用了C++的多态特性。将存在继承关系的类,通过一个工厂类创建对应的子类(派生类)对象。在项目复杂的情况下,可以便于子类对象的创建。工厂模式的实现方式可分别简单工厂模式、工厂方法模式、抽象工厂模式,每个实现方式都存在优和劣。以制鞋厂为例对这三种工厂模式进行举例说明。

2023-02-23 10:31:05 383

原创 音视频基础--基础概念

(1)帧率:影响画面流畅度,与画面流畅度成正比。如果码率为变量,则帧率也会影响体积,帧率越高,每秒钟经过的画面越多,需要的码率也越高,体积也越大。(3)清晰度:在码率一定的情况下,分辨率与清晰度成反比关系:分辨率越高,图像越不清晰,分辨率越低,图像越清晰。在分辨率一定的情况下,码率与清晰度成正比关系,码率越高,图像越清晰;:编码器每秒编出的数据大小,单位是kbps,比如800kbps代表编码器每秒产生800kb(或100KB)的数据。(2)分辨率:影响图像大小,与图像大小成正比:分辨率越高,图像越大;

2023-02-22 13:49:53 113

原创 设计模式--单例模式

单例模式是为了保证某个类全局只有一个实例,且该类提供唯一的接口来访问该实例。

2023-01-18 09:41:04 70

原创 运维--Linux系统core文件生成配置

【参考文章】https://www.cnblogs.com/jefree/p/4439035.html。(1) 取消core文件大小限制。(2) 配置core文件产生路径。(3) 测试core文件生成。

2023-01-11 09:46:59 496

原创 C++学习之指针数组

主要是注意int和char的区别。

2023-01-09 17:14:27 100

原创 计算机基础--Git

Git本身就是一个代码版本控制器。针对一个项目开发过程,我们需要不断的添加新的功能或者修改bug,也就是要对代码的版本不断的备份和迭代。如何方便的对之前的代码进行备份,或者将当前的修改和之前的代码进行对比。这就促使了代码版本控制器的产生。此外,在进行代码开发过程中,可能涉及到不同的开发人员对同一个项目进行开发,这就需要保证不同的开发人员开发的代码互不干扰,但又能把每个人开发出的功能合并到主代码库中。这也是git具备的一个重要功能。

2022-11-02 09:12:04 159

原创 FreeSWITCH--构建一个新的module

Freeswitch构建一个新的模块时,必须实现load函数,如下:该load函数的简单实现如下:在mod_example_load中对可以当前模块进行一些必要的初始化操作,如资源分配等。除了load函数外,还可可以选择性的实现shutdown和runtime函数,如下:其中shutdown主要是在当前模块卸载时对占用的资源进行释放;runtime可以作为当前模块功能实现的主要入口,比如实现一个event_loop。简单实现如下所示:在当前模块加载时,会通过如下方式在core中初始化当前模块三个

2022-07-07 14:43:00 623

原创 运维--keepalived配置

(1) 修改sysctl.conf文件(2) 上述配置立即生效

2022-06-18 17:19:10 120

原创 运维--Linux下常用指令

批量注释1、在 10 - 20 行添加 // 注释:10,20s#^#//#g2、在 10 - 20 行删除 // 注释:10,20s#^//##g3、在 10 - 20 行添加 # 注释:333,34s/^/#/g4、在 10 - 20 行删除 # 注释:10,20s/#//g

2022-05-16 19:27:50 891

原创 运维--查看服务器规格

在选择服务器时有可能需要知道服务器的规格,具体一个Linux服务器规格的查看可以参照如下的命令行进行查阅总核数 = 物理CPU个数 X 每颗物理CPU的核数总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数(1) 查看物理CPU个数cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l(2) 查看每个物理CPU中core的个数(即核数)cat /proc/cpuinfo| grep "cpu cores"|

2022-04-21 09:32:25 1113

原创 FreeSWITCH--常用指令

参考freeswitch官方网站:http://www.freeswitch.org.cn/1. FS控制台常用指令查看sofia模块状态:sofia status查看freeswitch状态:status查看通话命令: show calls查看channel命令: show channels打开log命令:console loglevel 7关闭log命令:console loglevel 0重新加载xml: reloadxml开启全局信令追踪:sofia global sip

2022-04-20 09:23:20 3476

原创 Debug--multiple definition of `xxxx`问题解决及其原理

参考博客如下:https://blog.csdn.net/mantis_1984/article/details/53571758问题在一个模块中的C文件单独编译没有任何问题,但是在链接阶段发生错误–multiple definition of xxxx问题解决及其原理。但是实现上对“xxxx”并没有多重定义。解决方案解决方案参考上述博客一般在.h文件中定义一个变量声明时,在其他文件中只要包含了这个.h文件,编译的时候就会独立被编译器解释,然后每个.C文件会生成独立的标识符和符号表,所以上述代码

2022-04-18 15:36:54 251

原创 运维--CentOS7报错Failed to get D-Bus connection: Operation not permitted解决办法

执行:systemctl restart rsyslog报错:Failed to get D-Bus connection: Operation not permitted参考下列文章解决centos7中rsyslog无法启动的问题:https://www.jianshu.com/p/e670ae82e97a具体内容如下:WSL的CentOS7使用systemctl和service命令时报错Failed to get D-Bus connection: Operation not permitt

2022-04-13 20:56:39 3581 2

原创 协议--VRRP

近期在学习基于keepalived配置主备模式的服务集群,其中keepalived的实现是基于VRRP协议,因此梳理该篇文章以学习vrrp协议。1. VRRP协议简介1.1 概念虚拟路由冗余协议VRRP(Virtual Router Redundancy Protocol)通过把几台路由设备联合组成一台虚拟的路由设备,将虚拟路由设备的IP地址作为用户的默认网关实现与外部网络通信。当网关设备发生故障时,VRRP机制能够选举新的网关设备承担数据流量,从而保障网络的可靠通信。1.2 为什么需要VRRPV

2022-02-07 16:37:45 224

原创 C++学习之字符

参考文献c++字符串复制/string、char*、char[]转换C++ 字符串指针和字符串指针数组详解char*/char[]/string#include<iostream>#include<string>#include<cstring>using namespace std;int main(){ /* 定义一个const char* 然后将其转化为一个char* */ const char *strs = "test_st

2021-12-18 17:52:19 741

原创 C++学习之动态库&静态库

【参考连接】C++源文件从文本到可执行文件经历的过程C++静态库与动态库1. 什么是动(静态库)在程序编写的过程中,会使用到大量的函数,有些函数是自己定义的,有些则是直接从已有的第三方函数库中调用的。函数库文件分为两种类型,一种是静态库(库程序是直接注入目标程序的,不分彼此,库文件通常以.a结尾),另一种是动态库(库程序是在运行目标程序时(中)加载的,库文件通常以.so结尾)。2. 源代码到可执行文件的过程以“hello world”程序为例。这个程序得到可执行文件一般这样操作:首先执行g

2021-12-06 10:42:22 1085

原创 C++学习之boost安装及thread使用

项目需求需要在WSL中安装boost,boost的安装参考连接。但是使用boost/thread/thread.hpp的时候一直报错。前后尝试了多种方法,当采用下述g++命令时可以成功编译:$ g++ main.cpp -o main -L /usr/local/lib/ -lboost_system -lboost_thread -lpthread但是执行./main的时候依旧报如下错误./main: error while loading shared libraries: libboost_t

2021-09-26 21:18:04 559

原创 C++学习之头文件引用

目录结构如下test.h的定义如下:#ifndef TEST_H#define TEST_H#include<vector>#include<string>using namespace std;class Box{public: vector<int> myVector; void putData(int data); bool isEmpty();};#endiftest.cpp的定义如下#include <

2021-09-23 09:33:05 1157

原创 WebRTC--音视频通信

1. WebRTC的实现原理WebRTC的音视频通信时基于P2P的1.1 P2P模式(1) 传统的连接模式传统的音视频通话过程中,其模式是以服务器为中介进行数据的转发实现音视频通话。类似http协议:客户端⇋服务端(这里服务端返回的箭头仅仅代表返回请求数据)。在进行客户端A和客户端B的即时通讯时,进行文字、图片、录音等传输的时候:客户端A⇨服务器⇨客户端B。(2) P2P连接模式点对点的连接恰恰数据通道一旦形成,中间是不经过服务端的,数据直接从一个客户端流向另一个客户端:客户端A⇋客

2021-09-02 17:39:37 423

原创 协议--SIP/SDP

参考资料会话初始协议SIP与SDP简介完整SIP/SDP媒体协商概论-SIP/WebRTC概要SIP和SDP的关系SDP和RTP/RTCP是创建SIP媒体会话的最基本的要求。什么是SDP SDP的作用就是在媒体会话中,传递媒体流信息,允许会话描述的接收者去参与会话。SDP基本上在internet上工作。他定义了会话描述的统一格式,但并不定义多播地址的分配和SDP消息的传输,也不支持媒体编码方案的协商,这些功能均由下层传送协议完成。典型的会话传送协议包括:SAP(Session Announ

2021-08-27 18:40:06 4929 1

原创 协议--VOIP/SIP

参考资料通信系列2: 深入浅出SIP协议1. 什么是VOIP  VoIP的完整名字是Voice over Internet Protocol,可以简单理解为一种用因特网系统代替传统电话通讯系统进行语音通话的技术。VOIP和传统语音通话技术的最大区别是:传统语音通话采用的是模拟信号技术,模拟信号容易受到干扰,很难避免信号失真,另外,传统模拟信号通话技术的容量受到很多限制,所以信号是经过高失真压缩的,因此效果不会很理想;VOIP采用的是数字传输技术,在网络上传输的是包含语音信息的数据包,可以进行

2021-08-26 21:13:16 4739 2

原创 Android学习之Handler.post()

[1] 从Handler.post(Runnable r)再一次梳理Android的消息机制(以及handler的内存泄露)

2021-08-08 16:31:06 827

原创 C++学习之结构体

参考文献C语言中的结构体常用来做函数的封装,那么对于C的struct在一次进行回顾。(1) 结构体的定义和使用// 定义一个结构体struct Person{ int age; int height;};int main(){ struct Person person_1; // 对其中的变量赋值 person_1.age = 1; person_1.height = 134; struct Person *ptr = NULL; ptr = &perso

2021-07-30 09:42:32 73

原创 HTTP发展史

参考文献[1] 一篇文章带你详解 HTTP 协议(网络协议篇一)

2021-07-28 16:54:55 83

原创 服务端设计中的名词解释

参考文献[1] 负载均衡(Load Balancing)学习笔记(一)[2] 负载均衡(Load Balancing)学习笔记二[3] 转发和重定向的区别1. 常见名词1.1 负载均衡 (Load Balancing, LB)在分布式系统中,负载均衡(Load Balancing)是一种将任务分派到多个服务端进程的方法。例如,将一个HTTP请求派发到实际的Web服务器中执行的过程就涉及负载均衡的实现。一个HTTP请求到达Web服务器,这中间涉及多个过程,也存在多种不同负载均衡的方法。下图1是

2021-07-28 16:14:18 181

原创 C++学习之回调函数

参考文献1. 什么是回调函数回调函数就是通过函数指针调用函数。如果把函数的指针或者地址作为参数传递给另一个参数,当这个指针被用来调用其所指向的函数时,那么这就是一个回调的过程,这个被回调的函数就是回调函数。回调函数不是有该函数的实现方直接调用,而是在特定的事件或者条件发生时由另外的一方调用的,用于对该事件或者条件进行响应。回调函数就是在两个独立函数或者独立类通信的通道。举个例子:财务处是负责对公司财务状况和每个月的开销进行汇总老板只会去看每个月的报表那么在这个当中,老板不会去关心,财务整个汇总的

2021-07-28 14:13:41 17156 6

空空如也

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

TA关注的人

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