个人近期半年的规划

接下来的半年呢,主要做以下这些事情: 1.博客坚持写,自己的心得总结必须写出来。 2.jitter buffer 缓冲区算法 3.rtp/rtcp流控 4.时延控制/带宽侦测/音视频同步
分类: 其他 发布时间: 12-24 23:43 阅读次数: 0

C++ 11 成员的初始化

首先我们的对比下C++98和C++11对成员进行初始化的方式: 编译环境:linux g++ 2-7.cpp -o main #include <iostream> using namespace std; class Init { public: Init():a(5){ //c++ 98初始化成员的方式 } public: int a; int c = 10;//直接这么写,在c++98中不合法 }; int main(){ Init
分类: 其他 发布时间: 12-24 23:43 阅读次数: 0

C++ 11 final/overrid关键字

子类可以重写父类的方法,从而实现扩展自己的行为,但是某些情况下。 我们可能并不希望子类能够重新实现父类的方法,我们希望完全的终止重写行为,这个时候我们需要借助关键字:final. C++11和JAVA一样,使用关键字:final,来阻止子类对父类定义的方法进行重写. g++ 210.cpp -o test -std=c++11 #include <iostream> using namespace std; class Base { public: void msg1() { cou
分类: 其他 发布时间: 12-24 23:42 阅读次数: 0

C++ 11 模板函数的默认模板参数

关于默认的函数参数,有一条规则: void defFunc(int i ,int j = 2,int k = 3) { } 那就是默认实参必须在形参的右边. 为什么要这么规定? 其实我们调用一下代码就可以发现,必须这样: defFunc(1); 默认等于 defFunc(1,2,3) defFunc(1,8); 默认等于 defFunc(1,8,3) 如果不把默认实参放到形参的右边,那么我们的函数很可能就是: defFunc("默认参数" ,2,3) 很显然我们就得引入一个标志,告诉编译
分类: 其他 发布时间: 12-24 23:42 阅读次数: 0

git 上传/更新/添加 --系列操作笔记(一)

git工程现在大家用的很多了,用svn用久了,一直挺排斥新技术的,这2天是耐着性子仔细的研究的. 目的: 使用git上传/更新/添加文档到git服务器,实现远程和本地的代码同步. 在github.com上我们新建一个工程: 创建完成后,我们可以在github上看到: 点击Clone or Download,提取我们的git地址: https://github.com/zark19890929/gittest.git. 这个时候我们需要创建一个新的文件夹:test,并且进入到test文件夹下:
分类: 其他 发布时间: 12-24 23:42 阅读次数: 0

git 上传/更新/添加 --系列操作笔记(二)

在第一篇我们完成了上传和添加功能. 这一篇我们来实操一下更新. 最开始我们的项目配置如下: 这个时候我们更新了help.txt。 首先我们调用git diff来查看文件有何不同: (借助这个命令,我们以后可以只上传我们更新了的文件,对于没有更新的文件,那么我们就不必须进行更新了) 更新就是重新上传. git add help.txt git commit -m “更新测试” git push 但是这里会有一个问题: 服务器只有一个工程,同时维护的人员有2个,比如我下载了工程,但是另一个兄弟,更
分类: 其他 发布时间: 12-24 23:42 阅读次数: 0

linux android studio无法调试samsung s8 pluse解决笔记

1.进入到设置–开发者中心 打开USB调试模式 这里USB配置一定要选择-MTP(Media Transfer Protocol) 2.请参考下面的操作进行调试,一定要静心看。 https://blog.csdn.net/qq_27623521/article/details/78240910 3.大功告成.
分类: 其他 发布时间: 12-24 23:41 阅读次数: 0

webrtc技术难点笔记 --- 带github工程

webrtc工程有点大,自己强攻了一个多月,基本被拖进了无穷无尽多工程结构梳理中。 现在的思路就是: 总结webrtc里面的工程难点,然后到对应的github上去找开源项目,然后一个一个项目的研究,然后再回过头去研究工程. webrtc的研究点包括: 1.音视频的网络抖动缓冲策略 2.网络的拥塞处理策略 3.丢包重传策略 4. 对应的开源github工程: 1.video jitter buffer https://github.com/TaoistKing/Video-Jitter-Buff
分类: 其他 发布时间: 12-24 23:41 阅读次数: 0

webrtc笔记:NTP网络时间

最近在看webrtc中的video jitter buffer,里面有部分对时间单位的统一的设计. 以linux为例,系统函数获取的时间有2种: 1.从系统开始运行(可以理解到开机)到现在所经历的时间,时间精度到纳秒. struct timespec ts;//包含有秒和纳秒的结构体 clock_gettime(CLOCK_MONOTONIC,&ts); //从系统开始运行到现在的时间 2.获取当前电脑距离格林尼治时间的相对时间,时间单位精确到微秒. 比如我们当前电脑的时间就是: 在linu
分类: 其他 发布时间: 12-24 23:41 阅读次数: 0

C++ 11 webrtc 中是如何做对象类型判断的?

最近在看webrtc的代码,webrtc中有具体的代码专门讲解 webrtc如何来进行对象类型的判断? 比如需要判断出某个对象到底是指针类型,再比如判断,A和C到底是否是同一个类型. 主要的思想是借助sizeof和模板来实现的,在编译期间进行确认! 接下来我们重点讲解一下这个实现原理. 第一大要点:sizeof的用法.
分类: 其他 发布时间: 12-24 23:40 阅读次数: 0

写给大忙人看的数据库存储引擎-高级话题

导言在第一篇博文中,我们学习了b-tree和lsm-tree的索引管理方式,索引算法也在选择存储引擎类型时候起到了关键作用,下述大标题也同等重要需要考虑1一致性,事务和并发控制单体数据库,通常指的是关系型/SQL,支持强一致性和ACID事务,分布式数据库必须遵从cap理论,当出现故障的时候,选择一致性或者可用性,NoSql数据库内在的分布式特点使得第一代NoSQl数据库(包括ApacheCassa
分类: 数据库 发布时间: 12-24 23:40 阅读次数: 0

C++11 delete关键字 禁止默认拷贝构造函数和复制操作

在讲解delete关键字之前,我们先说说最早之前我们是如何禁止拷贝构造函数的! 把delete关键字引入的前因后果都深入的理解一下 ! class A { public: A(){} private: //拷贝构造函数 A(const A& other) { cout << "copy construcor" << endl; } void operator=(const A& other) {
分类: 其他 发布时间: 12-24 23:40 阅读次数: 0

编译器关键字整理笔记

大家根据自己的代码情况和设计需求合理使用~! attribute((warn_unused_result)): 如果函数的返回结果没有被使用,那么编译器就会发出警告. example: #if !defined(WARN_UNUSED_RESULT) #if defined(__GNUC__) #define WARN_UNUSED_RESULT __attribute__((warn_unused_result)) #else #define WARN_UNUSED_RESULT #endi
分类: 其他 发布时间: 12-24 23:40 阅读次数: 0

无符号类型的数据类型做减法

基础知识点: 1.计算机中数据都是以补码的形式存在的. 2.正数的补码是原码 负数的补码是将除符号位外其原码所有位按位取反,然后+1,符号位固定位1,表示是一个负数. 我们来简单的看一个demo. unsigned short i1 = 102; unsigned short i2 = 108; unsigned short i3 = i1 - i2; cout << i2 - i1 << endl; cout << i3 <<
分类: 其他 发布时间: 12-24 23:40 阅读次数: 0

webrtc video jitter buffer学习笔记(一)

关于video jitter buffer 仔细看了大概一周的时间,基本思路脑海中还是有数的,但是很多地方依然没有理的特别的顺,感觉是比较操蛋. video jitter buffer的设计思路,请参考: http://www.ctiforum.com/news/guonei/512085.html 基本概念: video jitter buffer 中的概念有: 1.基本类型成员,rtp包封装为CVMPacket,一个帧由多个packet来组成,组成的类型为:VCMFrameBuffer V
分类: 其他 发布时间: 12-24 23:39 阅读次数: 0

Linux C++ 线程同步锁和wait()/broadcast()功能(一)

首先说下linux下的线程同步锁的实现: 同步锁脱离不开:pthread_mutex_t,mutex是互斥的意思,因此linux下的锁是通过互斥信号来实现的. pthread_mutex_t:代表一个互斥锁,首先我们需要初始化这个互斥锁. 第一步我们需要初始化互斥锁: pthread_mutexattr_t attr; pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE
分类: 其他 发布时间: 12-24 23:39 阅读次数: 0

Linux C++ 线程同步锁和wait()/broadcast()功能(二)

在第一篇中,我们讲解了linux下锁的概念: https://blog.csdn.net/zhangkai19890929/article/details/85107046 这一篇我们主要讲解wait()和broadcast的 知识: 首先我们需要介绍的是: pthread_cond_t代表一个条件变量,pthread_mutex_t代表互斥锁,条件变量要配合互斥锁来完成。 在线程中,条件变量主要有2个比较大的动作: 1.线程等待"条件成立"而挂起 2.另一个线程使"条件成立" 因为同一时间我
分类: 其他 发布时间: 12-24 23:39 阅读次数: 0

webrtc video jitter buffer中的卡尔曼滤波器介绍(一)---概率论基础

首先弄明白基本点: 1.卡尔曼滤波器是用来干什么的? 2.如何使用卡尔曼滤波器? 再此之前我们先补充一些高等数学统计学的基础只是:方差/均方误差/. 标准差的平方 = 方差 标准差表示的数据的离散程度. 举个例子吧,以下例子取自:漫画统计学,日本人出版的,写的非常的通俗易懂,强烈推荐大学去看看. 有三个球队,他们的成绩如图所示: 这个时候,这三个球队的平均数如下图所示. 仅仅通过平均数是无法代表更直观的理解数据的。 C队存在229这样的超级数,很明显不能代表整体的实力. A队和B队的平均数更是
分类: 其他 发布时间: 12-24 23:39 阅读次数: 0

JavaScript实现复选框的全选、全部不选、反选

以较为简洁的程序实现复选框的全选、全部不选、反选 操作。 并且将可变的部分设置为JS的参数,以实现代码复用。 全选和全不选 第一个参数为复选框名称,第二个参数为是全选还是全部不选。 function allCheck(name,boolValue) {     var allvalue = document.getElementsByName(name);      for (var i = 0; i < allvalue.length; i++) {               if (a
分类: 其他 发布时间: 12-24 23:38 阅读次数: 0

如何使用正则表达式去除一篇文章两端的多余字符(python爬虫)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26870933/article/details/83650682 原文章格式: text =''' /*<![CDATA[*/(adsbygoogle=window.adsbygoogle||[]).push({});/*]]>*/ Does Neural Imprinting Really Exist? Neural Imprinting sounds like a term that
分类: 其他 发布时间: 12-24 23:38 阅读次数: 0