笔记
小哥山水之间
这个作者很懒,什么都没留下…
展开
-
【无标题】
单链表反转 :头上的拿到写到尾巴上原创 2022-01-20 21:41:05 · 270 阅读 · 0 评论 -
关系型数据库
各表通过某些共同的值相互关联,所以才叫关系型数据库。原创 2022-01-12 07:40:04 · 152 阅读 · 0 评论 -
快排-快速排序
原创 2022-01-11 23:06:07 · 114 阅读 · 0 评论 -
直接排序
直接插入排序,从第二个元素起开始,如果后面的元素比前一个大,不需要排序,如果小于前一个,则插入到数组第一个做哨兵,用这个元素和前面的每一个元素循环比较,找到比他大的,插入进去。...原创 2022-01-11 21:48:01 · 190 阅读 · 0 评论 -
冒泡算法
n个元素,冒泡要冒n-1趟,这里m是第几趟。n-m等于第m趟要比较几次。然后大的跑后面去,小的在前面。原创 2022-01-11 21:42:06 · 265 阅读 · 0 评论 -
linux为何要挂载-(转载)
原作者:java学习网https://mp.weixin.qq.com/s?src=11×tamp=1641864581&ver=3551&signature=q8dgQutu8BZWql7sAYf-76JF6q2W3oh5jd-AV46T9Qi9ta576qL7zmE0iNPGo3HKPQT0E3RYVm209xAxeuHeUffc4lr9N9icUZXNt-bQMcE0fA94l*RLjOIF26gAJQ2L&new=1Linux 系统中“一切皆文件”,所有原创 2022-01-11 09:36:48 · 581 阅读 · 0 评论 -
软链接和硬链接
硬链接:ln 源文件 链接文件hard链接文件和源文件共享同一个inode。inode中会对源文件以及硬链接文件进行计数,删一个减1,删到0时,删除真正的文件内容。l硬链接文件和源文件因为指向同一个inode,因此修改时间大小什么都完全一致。软链接:ln -s 源文件 链接文件软链接文件对应一个新的inode,删掉源文件,则无法访问软链接。...原创 2022-01-11 09:14:40 · 358 阅读 · 0 评论 -
shared_ptr是否是线程安全的?
等等等…原创 2022-01-11 08:47:32 · 199 阅读 · 0 评论 -
linux交换分区(swap)
linux交换分区即是linux的SWAP分区 SWAP就是LINUX下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用.它和Windows系统的交换文件作用类似,但是它是一段连续的磁盘空间,并且对用户不可见。需要注意的是,虽然这个SWAP分区能够作为"虚拟"的内存,但它的速度比物理内存可是慢多了,因此如果需要更快的速度的话,并不能寄厚望于SWAP,最好的办法仍然是加大物理内存.SWAP分区只是临时的解决办法.交换分区(swap)的合理值一般在内存的2 倍左右原创 2022-01-11 08:46:52 · 1378 阅读 · 0 评论 -
32位linux为啥用户使用内存不能超过3GB
linux32位操作系统将进程的虚拟地址空间作了分配,整个4GB被划分成了2部分,其中操作系统本身用去了一部分,共1GB,剩下的3GB空间都是留给进程使用的。那么从原则上讲,进程最多可以使用3GB的虚拟空间,也就是说整个进程在执行的时候,所有的代码,数据包括通过c语言malloc等方法申请的虚拟空间之和不可以超过3GB。如果使用超过3GB,使用64位处理器即可,虚拟地址空间超级大...原创 2022-01-09 11:28:53 · 1219 阅读 · 0 评论 -
为啥需要链接
编译的时候A模块不知道B模块接口的地址,所以填了个null,链接的时候,A可以通过B模块的符号表信息,查找到相应接口的地址,填到相应调用位置。符号表是由函数名或者变量名+地址组成。原创 2022-01-09 10:11:46 · 185 阅读 · 0 评论 -
为何要分页
根据程序的局部性原理,当一个程序在运行时,在某个时间段内,它只是频繁地用到了一小部分数据,也就是说,程序的很多数据其实在一个时间段内都是不会被用到的,人们很自然的想到了更小粒度的内存分割和映射的方法,使得程序的局部性原理得到充分的利用,大大提高了内存的使用率。这种方法就是分页。...原创 2022-01-08 20:18:02 · 683 阅读 · 0 评论 -
分布式系统-转载
一 分布式系统分布式系统的由来:国内来讲,移动互联网的爆发伴随着分布式系统的突现,移动互联网最大的特点是2(to)c的o2o产品越来越多,这跟传统2B的系统最大区别就是用户量的不同,2C系统的用户量远远要高于2b系统,这就对系统提出了各种各样的高标准,响应时间,性能,灾备,吞吐量等等,各种分布式技术也是为了这些标准而服务。分布式架构的应用:分布式文件系统分布式缓存系统分布式数据库分布式WebService分布式计算举例说明:分布式文件系统: 出名的有 Hadoop 的HDFS ,还有 g原创 2022-01-07 09:36:12 · 203 阅读 · 0 评论 -
rtcp协议
rtcp协议就是rtp协议的控制协议,像网络拥塞,发了多少包,收了多少包。这些都属于rtcp的范畴。接收端会向发送端发送rtco的数据报,收到rtcp的数据报之后,会将这部分数据报进行计算。计算完之后,就能评估出目前的带宽是多少,现在的流量是否已经到了瓶颈点。到了瓶颈点,我就减少包的发送量。带宽还很多,就增加发包量。...原创 2022-01-05 09:16:57 · 723 阅读 · 0 评论 -
阿秀那边看到两种判断大小端的方式
原创 2021-12-31 09:21:50 · 216 阅读 · 0 评论 -
rtp报文头
rtp模拟了tcp的一些东西。tcp和rtp都有sequence,都可以通过sequence number对包进行排序,但是和tcp的不同点是rtp每个包加1,第一个包是1,第二个包是2,一直加1,是按包来的,而不是按字节来的,tcp是按字节来的,tcp是流式的。同一帧数据,被拆包了,timestamp是一样的。多方通信的时候,每一个发送者都有一个ssrc,不能冲突,如果两个发送源ssrc一致,可以协商再分配。csrc相当于是混音或者混源,有好几个ssrcPT是payload type,标识这个r.原创 2021-12-28 21:25:55 · 629 阅读 · 0 评论 -
cmake转载
1.CMake是什么?引用百度的话就是CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,简单的说它就是一个可以用根据不同平台生成对应的编译脚本的工具。2.CMake怎么用?CMake工具使用一个名为CMakeLists.txt 的文件来描述构建过程,可以产生标准的构建文件,如 Unix 的 Makefile 或Windows Visual C++ 的 projects/workspaces 。文件 C原创 2021-12-25 22:43:11 · 88 阅读 · 0 评论 -
webrtc使用sdp协议详解
会话级描述是全局,只有一个,媒体级描述是多个媒体级描述会覆盖会话级描述。原创 2021-12-24 21:35:50 · 965 阅读 · 0 评论 -
webrtc媒体协商
sdp信息中包括媒体流,支持的解码器是什么等等。支持哪些流,ssrc是什么。peerconnection create offer,然后setlocalDescrption。(缓存自己的sdp信息)发给对端,对端收到之后setRemoteDescription,保存远端sdp信息,然后create answer,生成sdp信息,自己用setlocal description,自己保存起来,然后发给对端。流媒体服务要制作sdp信息,然后和webrtc客户端通信。流媒体服务器可以使用完整的webrtc库来.原创 2021-12-24 09:22:12 · 409 阅读 · 0 评论 -
TLS-SRTP协议详解
当webrtc通过tls握手完成,会把key和加密算法给srtp,由srtp进行数据的加密和解密。srtp使用的是对称的加解密算法。而dtls握手协议使用的是非对称的加解密算法。对称加密算法需要同一个密钥。此时通过tls握手,a给b自己的密钥,b给a自己的密钥,a用自己的密钥加密,b用a给的密钥解密。也就是key。dtls还交互密码套件,我给你我支持的加密算法,你给我你支持的加密算法。大家选两个都支持的,且优先级最高的,webrtc默认使用的是aes128dtls要解决的两个问题:1.交换密钥2原创 2021-12-23 21:13:51 · 1940 阅读 · 0 评论 -
DTLS协议详解
晚上写原创 2021-12-22 09:28:33 · 1995 阅读 · 0 评论 -
ICE工作原理
首先图中的两个终端通过stun服务器获取到自己的外网ip。首先两个端要通过信令服务器建立连接。原创 2021-12-21 21:59:01 · 602 阅读 · 0 评论 -
socket缓冲区
tcp socket缓冲区如果满了,滑动窗口就告诉对端我现在是0,不要发了原创 2021-12-21 15:30:14 · 957 阅读 · 0 评论 -
stun 协议
stun存在的意义就是进行nat穿越。上述这句话是对于stun客户端来说的。对于客户端来说,客户端首先要发送一个stun消息给到stun服务,stun服务收到这个消息,将发送这个消息的客户端ip地址和端口带回来(过nat为外网,不过为内网地址)。此时客户端即知道自己的外网地址了,当客户端与另外一端进行通讯的时候,通过candiate的交换,就可以将自己的外网地址告诉对方,当对方拿到这个外网地址,就可以进行nat穿越了。stun对于流媒体服务端的作用是在客户端发送stun请求时候带来用户名和密码,用户名原创 2021-12-20 09:04:21 · 564 阅读 · 0 评论 -
MCU与SFU的区别
MCU需要解码,再编码,再混屏。SFU服务器直接转发。多路分辨率的码流是simulcast。各层码流独立。而真正的svc是上面的两层数据依赖最下面的核心层码流,带宽不够的时候只传核心层,比较模糊,每多来一层,视频会更清晰,带宽好一点,就再加一层扩展层,视频更清晰了,带宽非常好的时候,边缘层也一块儿传过来,视频就会超清晰。simulcast和svc不能混用。...原创 2021-12-13 09:30:26 · 2723 阅读 · 0 评论 -
【无标题】
webrtc nack 丢包信息, sdp中apt是关联通道。原创 2021-12-13 08:03:59 · 150 阅读 · 0 评论 -
【无标题】
openssl 实现了tls 以及 dtls,tls基于tcp,dtls基于udp原创 2021-12-12 22:10:00 · 146 阅读 · 0 评论 -
如何生成私有证书
openssl req命令,openssl req - -help查看命令的具体含义。SSL代表一个连接,要跟socket绑定,实际上socket负责传输数据,加密解密相关的工作由SSL来做。SSLwrite 往socket写数据。SSLread从socket读数据。创建ssl实例的时候要绑定socket。openssl的使用:1.openssl初始化2.创建ssl上下文 ssl_ctx3.加载ssl证书4.加载ssl私钥5.创建ssl实例(绑定socket)5.通过ssl收发数据6原创 2021-12-12 21:55:16 · 269 阅读 · 0 评论 -
webrtc相关知识学习
stun协议:stun协议存在的目的就是进行NAT穿越。网络字节序采用的是大端排序方式。大端排序方式::数据的高字节保存在内存的低地址中。给stun服务器发binding request,服务器通过binding response返回客户端的映射地址。turn服务在stun服务之上。客户端通过turn服务获取relay server 的地址。...原创 2021-12-12 16:23:39 · 173 阅读 · 0 评论 -
rtcp
一般是rtp端口+1接收端会给发送端发送rtcp数据报,让发送端计算出当前的网络状态。例如带宽啊,流量啊。原创 2021-12-11 17:32:56 · 156 阅读 · 1 评论 -
【无标题】
TCP主动关闭连接,先发finish的,会处于timewait状态,因为万一另外一端收不到最后一个ack,另外一端回重发finish,让它重发ack,但是如果想要立马重新使用处于timewait状态的服务,需要设置socket的属性为reuse。三次握手需要确认两边sequence起始值,以及窗口大小和mss,一个消息最大多大。TCP的sequence num是按照字节来的。弱网情况下,TCP如果超时定时器是200ms,如果第一次没收到ack,就等200ms重传,如果重传还没收到ack,就等400ms原创 2021-12-11 16:27:58 · 225 阅读 · 0 评论 -
【无标题】
epoll和select监听的socket要设置成非阻塞(使用fcntl)recv数据==0时,说明链接断开,要关闭socket。listen的socket要使用默认的水平触发,可重复触发,不丢失的前来链接的客户端请求。数据则可以使用边沿触发,只触发一次,数据丢了关系不大。...原创 2021-12-09 21:52:01 · 148 阅读 · 0 评论 -
【无标题】
同一个帧的timestamp是相同的,包序号是连续的mark位标识一帧的结束rtcp的端口为rtp端口+1,rtp端口一般为偶数,所以rtcp端口为奇数。webrtc中因为需要nat穿越,多个端口比较麻烦,所以大多数时候rtp和rtcp端口复用一个端口...原创 2021-12-05 21:36:43 · 54 阅读 · 0 评论 -
【无标题】
NAT:网络地址转换,公网转私网,私网转公网STUN(Simple Traversal of User Datagram Protocol through Network Address Translators (NATs),NAT的UDP简单穿越)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于NAT路由器之后的主机之间建立UDP通信。...原创 2021-11-23 09:31:15 · 447 阅读 · 0 评论 -
mark位的作用
rtp打包h264,包含了三种类型的包:一个rtp包携带了一帧数据(single)多个rtp包携带了一帧数据(FU-A)一个rtp包携带了多帧数据(STAP-A)在实际应用中绝大部分采用的是前两种方式,对方式1常见的是对nalu的sps,pps进行打包,因为sps和pps数据量很小,一个rtp包足以携带,一般采用 sps,pps分别由一个rtp包携带的方式。对IDR数据及其他类型数据通常是采用方式2,因为视频帧数据通常比较大,一个rtp包不足以携带,分成多个rtp包携带,分包携带后对最后一个rtp包原创 2021-11-21 08:25:27 · 1567 阅读 · 0 评论 -
2021-11-02
原创 2021-11-02 09:22:22 · 46 阅读 · 0 评论 -
gdb常用命令记录
n是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。f 表示显示的格式,参见上面。如果地址所指的是字符串,那么格式可以是s,如果 地址是指令地址,那么格式可以是i。u 表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字 节,g表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。表示一个内存地址。n/f/u三个参数可以一起使用。原创 2021-10-16 17:00:39 · 218 阅读 · 0 评论 -
2021-10-16
1m的带宽是1m的字节数原创 2021-10-16 11:35:42 · 58 阅读 · 0 评论 -
HLS直播取流过程演示
一、HLS是什么HTTP Live Streaming(缩写是HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。是苹果公司QuickTime X和iPhone软件系统的一部分。 它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的extended M3U (m3u8)playlist文件,用于寻找可原创 2021-07-11 18:58:40 · 2342 阅读 · 0 评论 -
2021-07-07
这里写自定义目录标题码率:1Mbps代表每秒传输1,000,000位(bit),即每秒传输的数据量为:1,000,000/8=125,000Byte/s所以4mbps 换算过来就是每秒钟0.5m,所以对于4mbps码率的流缓冲区大于0.5m即可...原创 2021-07-07 10:56:56 · 77 阅读 · 0 评论