- 博客(96)
- 问答 (2)
- 收藏
- 关注
原创 C++学习之避免使用野指针
所以,简单来说,不使用saved_struct_a来保存struct_a的指针,在释放struct_b之后,并不会使struct_a立即失效或无法访问(因为它的内存还未被释放),但确实会导致你失去对这块已分配内存的控制,增加内存泄漏的风险,并且在实践中很难安全地再次访问或释放这块内存。之后释放b_ptr, 那么a_ptr指向的内存是否还可以访问?如果没有使用saved_struct_a来保存struct_a的指针,而是直接释放了struct_b,struct_b的一个成员是指向struct_a的指针。
2024-06-01 14:44:06
375
原创 音视频--视频实时传输(一)
参考:https://blog.csdn.net/qq_42233059/article/details/134628085视频编解码的目标是在保持高质量视频的前提下,减小视频数据的存储和传输开销。常用的视频编解码标准包括H.264/AVC、HEVC/H.265、VP9等。在视频编解码领域,H.264/AVC、HEVC/H.265和VP9是最常用的标准。这些标准通过采用先进的压缩算法和视频处理技术,实现了更高效的视频压缩和传输。
2024-05-24 09:55:34
981
原创 音视频--音频实时传输
实时音频的传输中为了提升音频质量,一般要对音频做特殊处理:降噪、回声消除、自动增益(3A算法)。通过编解码器自身的的算法特性可以实现上述内容。但是也有专门的库来帮助实现对音频质量的提升。speexdsp库可以对声音数据中的高频声音和低频声音进行抑制,并进行降噪。同时speexdsp也提供了3A算法对音频增益。
2024-05-23 16:14:01
775
原创 音视频--视频数据传输
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
871
原创 音视频--DTMF信号发送及检测
双音多频信号(英语:Dual-Tone Multi-Frequency,简称:DTMF),电话系统中电话机与交换机之间的一种信令,最常用于拨号时发送被叫号码。不过双音多频的发明,除了缩短拨号时间,也扩展了拨号之外的功能,例如自动总机、交互式语音应答。
2023-08-03 16:51:52
5426
原创 计算机基础--Redis
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。单线程,满足 redis 的串行原子,只不过 IO 多线程后,把 输入/输出 放到更多的线程里去并行。(网卡能够高效的使用)。执行命令仍然是单线程顺序执行,不需要担心线程安全问题。无论什么版本,工作线程就是一个,但是在6.x 高版本出现了 IO 多线程。虽然 Redis 中引入了多线程,但是。答:充分利用多核,提高网络吞吐。简单来说,为什么使用多线程?
2023-04-19 16:31:46
465
原创 计算机基础--MySQL--索引
建立索引以后,可以通过索引进行查询。更通俗的说,索引就相当于目录。主键索引其实并不是一种索引类型,而是根据主键,在主键上建立聚集索引,主键是具有唯一性且不能为空。使用 UNIQUE 参数可以设置索引为唯一性索引,在创建唯一性索引时,限制该索引的值必须是唯一的,但允许有空值(该空值也可以有多个)。除聚集索引外都称为非聚集索引,非聚集索引底层构建的B+树叶子节点里面存储了这个表的每一行数据的地址。索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
2023-04-14 15:27:25
429
原创 音视频--音频基础
将音频三元组(采样率、采样大小、通道数)的值转成另外一组值。三元组其中任意一个值发生改变就称为重采样, 例如44100/16/2 转成 48000/16/2。
2023-04-07 18:04:24
803
原创 计算机网络--基础通信概念
相应的,局域网中的计算机需要和其它局域网中的计算机、和互联网上的计算机进行通信的时候, 数据包必须要通过网关才可以到达,这就是网关的作用。网桥是属于数据链路层的一种设备,它的作用是扩展网络和通信手段,在各种传输介质中转发数据信号,扩展网络的距离,同时又有选择地将现有地址的信号从一个传输介质发送到另一个传输介质,并能有效地限制两个介质系统中无关紧要的通信。互联网可以看成是局域网、广域网等组成的一个最大的网络,它可以把世界上各个地方的网路都连接起来,个人、政府、学校、企业,只要你能想到的,都包含在内。
2023-04-07 09:09:30
552
原创 设计模式--工厂模式
这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。工厂模式主要使用了C++的多态特性。将存在继承关系的类,通过一个工厂类创建对应的子类(派生类)对象。在项目复杂的情况下,可以便于子类对象的创建。工厂模式的实现方式可分别简单工厂模式、工厂方法模式、抽象工厂模式,每个实现方式都存在优和劣。以制鞋厂为例对这三种工厂模式进行举例说明。
2023-02-23 10:31:05
424
原创 音视频基础--基础概念
(1)帧率:影响画面流畅度,与画面流畅度成正比。如果码率为变量,则帧率也会影响体积,帧率越高,每秒钟经过的画面越多,需要的码率也越高,体积也越大。(3)清晰度:在码率一定的情况下,分辨率与清晰度成反比关系:分辨率越高,图像越不清晰,分辨率越低,图像越清晰。在分辨率一定的情况下,码率与清晰度成正比关系,码率越高,图像越清晰;:编码器每秒编出的数据大小,单位是kbps,比如800kbps代表编码器每秒产生800kb(或100KB)的数据。(2)分辨率:影响图像大小,与图像大小成正比:分辨率越高,图像越大;
2023-02-22 13:49:53
147
原创 运维--Linux系统core文件生成配置
【参考文章】https://www.cnblogs.com/jefree/p/4439035.html。(1) 取消core文件大小限制。(2) 配置core文件产生路径。(3) 测试core文件生成。
2023-01-11 09:46:59
604
原创 计算机基础--Git
Git本身就是一个代码版本控制器。针对一个项目开发过程,我们需要不断的添加新的功能或者修改bug,也就是要对代码的版本不断的备份和迭代。如何方便的对之前的代码进行备份,或者将当前的修改和之前的代码进行对比。这就促使了代码版本控制器的产生。此外,在进行代码开发过程中,可能涉及到不同的开发人员对同一个项目进行开发,这就需要保证不同的开发人员开发的代码互不干扰,但又能把每个人开发出的功能合并到主代码库中。这也是git具备的一个重要功能。
2022-11-02 09:12:04
193
原创 FreeSWITCH--构建一个新的module
Freeswitch构建一个新的模块时,必须实现load函数,如下:该load函数的简单实现如下:在mod_example_load中对可以当前模块进行一些必要的初始化操作,如资源分配等。除了load函数外,还可可以选择性的实现shutdown和runtime函数,如下:其中shutdown主要是在当前模块卸载时对占用的资源进行释放;runtime可以作为当前模块功能实现的主要入口,比如实现一个event_loop。简单实现如下所示:在当前模块加载时,会通过如下方式在core中初始化当前模块三个
2022-07-07 14:43:00
785
原创 运维--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
1044
原创 运维--查看服务器规格
在选择服务器时有可能需要知道服务器的规格,具体一个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
1229
原创 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
4110
原创 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
324
原创 运维--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
4117
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
264
原创 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
829
原创 C++学习之动态库&静态库
【参考连接】C++源文件从文本到可执行文件经历的过程C++静态库与动态库1. 什么是动(静态库)在程序编写的过程中,会使用到大量的函数,有些函数是自己定义的,有些则是直接从已有的第三方函数库中调用的。函数库文件分为两种类型,一种是静态库(库程序是直接注入目标程序的,不分彼此,库文件通常以.a结尾),另一种是动态库(库程序是在运行目标程序时(中)加载的,库文件通常以.so结尾)。2. 源代码到可执行文件的过程以“hello world”程序为例。这个程序得到可执行文件一般这样操作:首先执行g
2021-12-06 10:42:22
1187
原创 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
678
原创 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
1260
原创 WebRTC--音视频通信
1. WebRTC的实现原理WebRTC的音视频通信时基于P2P的1.1 P2P模式(1) 传统的连接模式传统的音视频通话过程中,其模式是以服务器为中介进行数据的转发实现音视频通话。类似http协议:客户端⇋服务端(这里服务端返回的箭头仅仅代表返回请求数据)。在进行客户端A和客户端B的即时通讯时,进行文字、图片、录音等传输的时候:客户端A⇨服务器⇨客户端B。(2) P2P连接模式点对点的连接恰恰数据通道一旦形成,中间是不经过服务端的,数据直接从一个客户端流向另一个客户端:客户端A⇋客
2021-09-02 17:39:37
504
原创 协议--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
6081
1
原创 协议--VOIP/SIP
参考资料通信系列2: 深入浅出SIP协议1. 什么是VOIP VoIP的完整名字是Voice over Internet Protocol,可以简单理解为一种用因特网系统代替传统电话通讯系统进行语音通话的技术。VOIP和传统语音通话技术的最大区别是:传统语音通话采用的是模拟信号技术,模拟信号容易受到干扰,很难避免信号失真,另外,传统模拟信号通话技术的容量受到很多限制,所以信号是经过高失真压缩的,因此效果不会很理想;VOIP采用的是数字传输技术,在网络上传输的是包含语音信息的数据包,可以进行
2021-08-26 21:13:16
6249
2
空空如也
笔记本电脑屏幕发白,从颜色管理调节Gamma值,重启后又恢复到调节前的状态。如何解决?
2021-03-05
应届生拿了好未来服务端的offer,向前辈问一下这个公司的技术怎么样?
2020-12-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人