深入浅出MySQL事务(二)MVCC的实现原理 深入浅出MySQL事务(二)视图实现原理文章目录深入浅出MySQL事务(二)视图实现原理一、视图是如何创建的?二、查询逻辑三、更新逻辑四、小结上一篇文章介绍了事务隔离的实现,里面讲到,事务通过创建一个视图,然后根据视图逻辑来获取当前事务看到的数据,你可能会好奇这个视图是何方神圣,本文就来好好讲讲视图的实现原理。一、视图是如何创建的?在InnoDB里面,每个事务都有一个ID,叫做 trans...
深入浅出MySQL事务(一)事务隔离 深入浅出MySQL事务(一)事务隔离文章目录深入浅出MySQL事务(一)事务隔离一、为什么需要事务?二、隔离级别三、事务隔离的实现四、事务的启动方式五、小结一、为什么需要事务?事务有什么作用?简单的说,事务是确保一组操作要么全部成功,要么全部失败一个最经典的例子就是转账,假设A要给B转账,需要进行一下步骤检查A的余额是否足够减少A的余额增加B的余额如果由于意外,只执...
深入浅出MySQL索引(二)InnoDB存储引擎的索引 深入MySQL浅出索引(二)InnoDB存储引擎的索引文章目录深入MySQL浅出索引(二)InnoDB存储引擎的索引一、InnoDB的索引模型1.1 主键索引1.2 普通索引二、索引维护三、覆盖索引四、最左前缀原则在上一篇文章中介绍了为什么需要索引,以及常见的索引模型,本文讲介绍InnoDB的索引InnoDB使用B+Tree来组织索引,每个索引都是一棵B+Tree,不过对于主键索引和普通索引...
深入浅出MySQL索引(一)常见的索引模型 深入浅出索引(一)常见的索引模型文章目录深入浅出索引(一)常见的索引模型一、为什么需要索引?二、常见的索引模型2.1 有序数组2.2 哈希表2.3 二叉搜索树2.4 B-Tree2.5 B+Tree一、为什么需要索引?MySQL的数据存放在数据表中,数据表会被保存在磁盘上,例如下面我们创建一个数据表,那么在磁盘上就会有一个数据表文件来存放数据create table users( id ...
Linux进程管理(四)进程调度之抢占式调度 Linux进程管理(四)进程调度之抢占式调度文章目录Linux进程管理(四)进程调度之抢占式调度一、抢占式调度二、设置需要重新调度的标志的时机(TIF_NEED_RESCHED)三、进程抢占的时机3.1 用户态的抢占时机3.2 内核态的抢占时机四、总结上篇文章我们将了内核调度分为主动调度和抢占式调度,主动调度我们已经讲解过了,这篇文章我们来讲解一下抢占式调度一、抢占式调度我们说过,进程真正...
Linux进程管理(三)进程调度之主动调度 Linux进程管理(三)进程调度之主动调度文章目录Linux进程管理(三)进程调度之主动调度一、抢占式调度和主动调度二、主动调度的发生的情况三、schedule 函数四、总结在上一篇文章中,我们讲了Linux进程调度的总体内容,接下来的两篇文章我们将来讨论进程调度具体是什么时候发生的一、抢占式调度和主动调度前面我们说过,进程的切换总是通过 shedule 函数发生的,而 schedule ...
Linux进程管理(二)进程调度 Linux进程管理(二)进程调度文章目录Linux进程管理(二)进程调度一、进程调度解决什么问题?二、进程调度整体框架三、优先级与调度策略四、调度类五、运行队列和调度实体六、FIFO 和 RR 调度算法七、完全公平调度算法(CFS)八、总结一、进程调度解决什么问题?我们在使用电脑的时候,比如打开一个视频剪辑器,一个文本编辑器,可以认为它们都是一个进程。假如CPU是单核的,那么在同一时间只能运...
Linux进程管理(一)进程数据结构 Linux进程管理(一)进程数据结构文章目录Linux进程管理(一)进程数据结构双向链表任务ID信号处理进程状态进程调度运行统计信息进程亲缘关系内存管理文件与文件系统进程内核栈栈结构current宏Linux内核中使用 task_struct 结构来表示一个进程,这个结构体保存了进程的所有信息,所以它非常庞大,在讲解Linux内核的进程管理,我们有必要先分析这个 task_struct 中的各...
Linux进程间通讯(五)信号量 Linux进程间通讯(五)信号量文章目录Linux进程间通讯(五)信号量一、信号量集的创建二、信号量的设置三、信号量的PV操作四、SEM_UNDO标志的含义五、总结一、信号量集的创建信号量集的创建需要通过系统调用 semget,其定义如下(这里需要注意的是,semget创建的是一个信号量集合,也就是一个集合是可以包含多个信号量的)SYSCALL_DEFINE3(semget, key_t,...
Linux进程间通讯(四)共享内存 Linux进程间通讯(四)共享内存文章目录Linux进程间通讯(四)共享内存一、IPC总览三、将共享内存映射到进程虚拟地址空间四、访问共享内存五、总结一、IPC总览在内核中,对于共享内存、消息队列、信号量都是使用统一的机制管理起来的,都叫做 ipcxxx为了维护这三种进程间通讯的机制,内核定义了一个三项的数组,如下struct ipc_namespace {...... struct...
Linux进程间通讯(三)管道 Linux进程间通讯(三)管道文章目录Linux进程间通讯(三)管道一、匿名管道二、有名管道三、总结一、匿名管道匿名管道通过系统调用 pipe 创建,其定义如下int pipe(int fd[2])通过这个系统调用,可以在内核中创建一个管道,返回两个文件描述符,表示管道的两端,一个用于读,一个用于写下面看一看内核时如何实现的SYSCALL_DEFINE1(pipe, int _...
Linux进程间通讯(二)信号(下) Linux进程间通讯(二)信号(下)文章目录Linux进程间通讯(二)信号(下)一、信号的发送二、信号的处理三、总结上一篇文章讲解了信号的注册,这篇文件讲解信号的发送和信号的处理一、信号的发送我们可以直接通过 kill 或者 sigqueu 系统调用,给某个进程发送信号,也可以通过 tkill 或者 tgkill 给某个线程发送信号。虽然方法很多,但是最终调用的都是 do_send_sig...
Linux进程间通讯(一)信号(上) Linux进程间通讯(一) 信号(上)文章目录Linux进程间通讯(一) 信号(上)一、信号概述二、注册信号三、总结一、信号概述在Linux中,当遇到某些紧急的情况,可以给进程发送信号,紧急处理一些事情在Linux中,定义了许多信号,可以使用 kill -l 命令来查看# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4...
Linux文件系统(四)文件缓存 Linux文件系统(四)文件缓存文章目录Linux文件系统(四)文件缓存一、系统调用层和虚拟文件系统层二、ext4 文件系统层2.1 直接读写2.2 带缓存的读写三、总结前几篇文章讲解了文件系统的挂载和文件的打开,这篇文章讲解文件的读写一、系统调用层和虚拟文件系统层文件的读写就是通过调用 read、write 系统调用来实现的,由于读写的实现过程很多逻辑都是相似的,所以两部分放在一起讨论...
Linux文件系统(三)虚拟文件系统 Linux虚拟文件系统文章目录Linux虚拟文件系统一、文件系统框架二、挂载文件系统三、打开文件一、文件系统框架文件系统需要许多层的组件一起协作,具体怎么协作,下面来看一看在应用层,进程操作文件可以通过 open、read、write 等系统调用在内核,每个进程都需要对其打开的文件,维护一定的数据结构在内核,整个系统打开的文件,也需要维护一定的数据结构Linux可以支持多大数十种...
Linux文件系统(二)磁盘文件系统 磁盘文件系统文章目录磁盘文件系统一、inode与块的存储二、inode 位图和块位图三、文件系统的格式四、目录的存储形式五、软链接和硬链接的存储格式六、总结我们常见的磁盘长下面这样子,左边中间圆是磁盘的盘片,右边是抽象出来的图每一层有多个磁道,每个磁道有多个扇区,每个扇区大小为512个字节文件系统是安装在磁盘之上的,本文将讲解Linux主流的文件系统 —— ext系列的文件系统格式一、...
Linux文件系统(一)文件系统概述 Linux文件系统文章目录Linux文件系统一、文件系统的功能规划二、文件系统相关的命令三、文件系统相关的调用四、总结一、文件系统的功能规划文件系统是用来管理磁盘空间,存储文件的一套软件,它需要满足下面几个特点文件系统要有严格的组织形式,使得文件能以块为单位存储文件系统需要索引区,用来查找存储文件的多个块存放在哪个区域如果文件系统的某个文件时热点文件,最近经常被访问,那么...
Linux内存管理(一)Linux进程空间管理 Linux进程空间管理文章目录Linux进程空间管理一、用户态和内核态的空间划分二、用户态的布局三、内核态的布局一、用户态和内核态的空间划分每个进程或者线程都是一个task_struct,它们都有一个mm_struct用于管理内存struct mm_struct *mm;在mm_struct中有这样的一个变量unsigned long task_size; /* size of...
Linux内存管理(五)内核态内存映射 Linux内核态内存映射文章目录Linux内核态内存映射一、内核页表二、vmalloc 和 kmap_atomic 原理三、内核缺页异常四、总结首先,需要直到,内核态的内存映射机制,主要包含以下几个部分内核态内存映射函数 vmalloc、kmap_atomic 是如何工作的内核态页表放在哪里?是怎么工作的?swapper_pg_dir 是怎么回事?出现了内核态缺页异常应该怎么办?一...
Linux内存管理(四)用户态内存映射 Linux用户态内存映射文章目录Linux用户态内存映射一、mmap的原理二、用户态缺页异常三、总结前面讲解了虚拟地址空间是如何组织的,以及物理页是如何管理的。这篇文章将讲解这两者之间是如何映射起来的一、mmap的原理每个进程都有一个 vm_area_struct 列表,用于描述虚拟内存空间的不同内存块,这个变量的名称为 mmapstruct mm_struct { struct vm...
STL源码剖析(十八)关联式容器之hash_map、hash_multimap STL源码剖析(十八)关联式容器之hash_map、hash_multimap文章目录STL源码剖析(十八)关联式容器之hash_map、hash_multimap一、hash_map、hash_multimap的数据结构二、hash_map、hash_multimap的迭代器三、hash_map、hash_multimap的操作3.1 构造函数3.2 析构函数3.3 插入元素3.4 删除元素3...
STL源码剖析(十七)关联式容器之hash_set、hash_multiset STL源码剖析(十六)关联式容器之hash_set、hash_multiset文章目录STL源码剖析(十六)关联式容器之hash_set、hash_multiset一、hash_set、hash_multiset的数据结构二、hash_set、hash_multiset的迭代器三、hash_set、hash_multiset的操作3.1 构造函数3.2 析构函数3.3 插入元素3.4 删除元素3...
STL源码剖析(十六)关联式容器之hashtable STL源码剖析(十五)关联式容器之hashtable文章目录STL源码剖析(十五)关联式容器之hashtable一、hashtable的数据结构二、hashtable的迭代器三、hashtable的操作3.1 构造函数3.2 析构函数3.3 插入元素3.4 删除元素3.5 其他操作hashtable 是哈希表的意思,它并不是 STL 标准的,也就是 STL 并没有要求实现它。hashtable...
STL源码剖析(十五)关联式容器之map、multimap STL源码剖析(十五)关联式容器之map、multimap文章目录STL源码剖析(十五)关联式容器之map、multimap一、map、multimap的数据结构二、map、multimap的迭代器三、map、multimap的操作3.1 构造函数3.2 析构函数3.3 插入元素3.4 删除元素3.5 其他操作map 和 multimap 每个元素都是一个对组,有 key 也有 dadama...
STL源码剖析(十四)关联式容器之set、multiset STL源码剖析(十四)关联式容器之set、multi_set文章目录STL源码剖析(十四)关联式容器之set、multi_set一、set、multi_set简介二、set、multi_set的数据结构三、set、multiset的迭代器四、set、multiset的操作4.1 构造函数4.2 析构函数4.3 插入元素4.4 删除元素4.5 其他操作一、set、multi_set简介关联式容...
STL源码剖析(十三)关联式容器之rb_tree STL源码剖析(十三)关联式容器之rb_tree文章目录STL源码剖析(十三)关联式容器之rb_tree一、rb_tree的数据结构二、rb_tree的迭代器三、rb_tree的操作3.1 构造函数3.2 析构函数3.3 插入元素3.4 删除元素3.5 其他操作rt_tree是红黑树,在STL中,它并没有对使用者开放,但它非常重要,它作为set和map的底部支持这篇文章不详细讨论红黑树的算法...
Linux内存管理(三)物理内存管理(下) Linux物理内存管理(下)文章目录Linux物理内存管理(下)一、缓存区数据结构二、分配过程三、页面的换出四、总结前面讲的伙伴系统其管理的基本单位是页,一页有4K字节。但是如果我们需要更小的内存块,那物理内存应该如何分配呢?一、缓存区数据结构上一篇文章讲过,对于小块内存,会使用slub分配器,这篇文章就来解析它在创建进程的时候,会调用 dup_task_struct,它会复制一个 ta...
Linux内存管理(二)物理内存管理(上) Linux物理内存管理(上)文章目录Linux物理内存管理(上)一、物理内存的组织形式二、节点三、区域四、页五、页的分配六、总结一、物理内存的组织形式由于物理内存是连续的,页也是连续的,每个页的大小一样,从0开始给每个页编号,每个页用struct page表示,存放在一个大数组里。因此对于任何一个地址,只要除以页的大小,就可以得到对应页的编号,根据下标就可以找到对应的struct page结...
STL源码剖析(十二)序列式容器之slist STL源码剖析(十二)序列式容器之slist文章目录STL源码剖析(十二)序列式容器之slist一、slist的数据结构二、slist的迭代器三、slist的操作3.1 构造函数3.2 析构函数3.3 添加元素3.4 删除元素3.5 其他操作slist是这个版本的STL中的单向链表,它是非标准的,也就是STL的标准中并没有要求实现它。在C++11中,有一个标准的单向链表,称为forward_l...
STL源码剖析(十一)序列式容器之stack、queue、priority_queue STL源码剖析(十一)序列式容器之stack、queue、priority_queue文章目录STL源码剖析(十一)序列式容器之stack、queue、priority_queue一、stack1.1 stack的数据结构1.2 stack的操作二、queue2.1 queue的数据结构2.2 queue的操作三、priority_queue3.1 priority_queue的数据结构3.2 ...
STL源码剖析(十)序列式容器之deque STL源码剖析(十)序列式容器之deque文章目录STL源码剖析(十)序列式容器之deque一、deque的数据结构二、deque的迭代器三、deque的操作3.1 构造函数3.2 析构函数3.3 添加元素3.4 删除元素3.5 其他操作前面我们说的vector是单向开口,而deque是双向开口,也就是保证常数时间在头部和尾部插入元素一、deque的数据结构我们先讨论deque是如何实现双...
一文带你读懂指针 指针究竟是个什么东西?(一文带你看懂指针)文章目录指针究竟是个什么东西?(一文带你看懂指针)一、内存长什么样?二、变量在内存中的存储形式三、指针在内存中的存储形式3.1 指向普通变量的指针3.2 指向数组的指针3.3 指针数组3.4 指向指针的指针四、指针取值在初学学习指针的时候,难免会为其感到困惑,如指针数组、数组指针、指向指针的指针等形容常常让人头晕目眩,感到非常的玄乎其实只要明白指针的...
STL源码剖析(九)序列式容器之list STL源码剖析(九)序列式容器之list文章目录STL源码剖析(九)序列式容器之list一、list的数据结构二、list的迭代器三、list的操作3.1 构造函数3.2 析构函数3.3 添加元素3.4 删除元素3.5 其他操作一、list的数据结构list的底层是一个双向链表,下面来看一看list的数据结构template <class T, class Alloc = alloc...
STL源码剖析(八)序列式容器之vector STL源码剖析(八)序列式容器之vector文章目录STL源码剖析(八)序列式容器之vector一、容器简介二、vector的数据结构三、vector的迭代器四、vector的操作4.1 构造函数4.2 析构函数4.3 添加元素4.4 删除元素4.5 其他操作一、容器简介STL的容器分为序列式容器和关联式容器,所谓序列式容器是指其中的元素是可序的。所谓关联式容器,指的是每个元素都有key和v...
STL源码剖析(七)traits机制 STL源码剖析(七)traits机制文章目录STL源码剖析(七)traits机制一、为什么需要traits机制?二、iterator traits2.1 iterator traits的定义2.2 iterator traits相关的函数三、type traits一、为什么需要traits机制?traits可以称为萃取机,可以通过它来获取迭代器的一些信息,在STL算法中发挥巨大的作用如下面...
STL源码剖析(六)迭代器 STL源码剖析(六)迭代器文章目录STL源码剖析(六)迭代器一、什么是迭代器?二、实现一个简单的容器三、实现容器的迭代器四、STL迭代器的规范4.1 STL迭代器的规范4.2 STL迭代器的分类本文将带你学习什么是迭代器,以及STL的迭代器规范一、什么是迭代器?迭代器是一种有指针行为(->,*,++)的东西,它可以是原生指针,也可以是重载了``operator->、operat...
STL源码剖析(五)构造和析构的基本工具 STL源码剖析(五)构造和析构的基本工具文章目录STL源码剖析(五)构造和析构的基本工具一、如何将对象的内存分配释放与构造析构分开?二、construct三、destroy在C++中,使用new运算符的时候,会先为对象分配内存,然后再调用其构造函数。STL为了更加灵活,将内存的分配和对象的构造函数调用分开,前面我们所谈到的空间配置器只负责内存的分配和释放,STL为对象的构造和析构提供了两个全局...
STL源码剖析(四)模板的特化 STL源码剖析(四)模板的特化文章目录STL源码剖析(四)模板的特化一、什么是模板的特化?二、为什么需要模板的特化?三、模板特化的语法3.1 类模板的特化3.2 函数模板的特化在STL中,有许多地方使用到了模板的特化,在往下面讲解前,我们需要来学习以下什么是模板的特化,以及为什么需要模板的特殊还有其语法一、什么是模板的特化?首先看一个例子template <class T>...
STL源码剖析(三)第二级空间配置器 STL源码剖析(三)更加精致的空间配置器文章目录STL源码剖析(三)更加精致的空间配置器一、为什么需要更加精致的空间配置器?二、源码剖析2.1 初步分析2.2 分配内存(allocate)2.3 释放内存 (deallocate)2.4 内存池填充(refill)2.5 内存池(chunk_alloc)上一篇文章中,我们讨论了空间配置器的作用,还有看了普通的空间配置器的源码,接下来我们来剖析特...
STL源码剖析(二)第一级空间配置器 STL源码剖析(二)空间配置器之第一级空间配置器文章目录STL源码剖析(二)空间配置器之第一级空间配置器一、空间配置器的作用二、空间配置器定义三、第一级空间配置器源码剖析一、空间配置器的作用在学习空间配置器之前,我们需要先知道它是用来干嘛的,简单的说,它就是给容器分配内存的工具,每个容器都需要指定一个空间配置器,用于分配内存和释放内存我们先看一眼vector容器的源码template &...
STL源码剖析(一)STL简介 STL源码剖析(一)STL简介文章目录STL源码剖析(一)STL简介一、STL概述二、STL六大组件2.1 容器(containers)2.2 算法(algorithms)2.3 迭代器(iterators)2.4 仿函数(functors)2.5 适配器(adapter)2.6 配置器(allocators)三、源码下载一、STL概述STL是Standard Template Librar...
数据结构与算法之树(四)红黑树 数据结构与算法之树数据结构与算法之树(一)二叉树概念及遍历方式(图文并茂)数据结构与算法之树(二)二叉查找树数据结构与算法之树(三)AVL树数据结构与算法之树(四)红黑树数据结构与算法之树(四)红黑树文章目录数据结构与算法之树(四)红黑树一、为什么需要红黑树?二、红黑树性质三、红黑树的插入操作3.1 情况分类3.2 调整操作四、总结上一篇文章我们介绍了平衡二叉搜索树和讲解了AVL树还...
数据结构与算法之树(三)AVL树 数据结构与算法之树数据结构与算法之树(一)二叉树概念及遍历方式(图文并茂)数据结构与算法之树(二)二叉查找树数据结构与算法之树(三)AVL树数据结构与算法之树(四)红黑树数据结构与算法之树(三)AVL树文章目录数据结构与算法之树(三)AVL树一、什么是平衡二叉树?二、什么是AVL树?三、AVL树的调整策略3.1 旋转操作3.1.1 左旋3.1.2 右旋3.2 需要调整的节点3.3 情况...
数据结构与算法之树(二)二叉查找树 数据结构之树数据结构之树(一)二叉树概念及遍历方式(图文并茂)数据结构之树(二)二叉查找树数据结构之树(三)红黑树数据结构之树(二)二叉查找树文章目录数据结构之树(二)二叉查找树一、二叉查找树结构二、二叉查找树查找三、二叉查找树插入四、二叉查找树删除五、二叉查找树的不足一、二叉查找树结构二叉查找树的二叉树的一种常见类型,又可以称为二叉搜索树。顾名思义,二叉查找树支持快速的查找,不仅如...
数据结构与算法之树(一)二叉树概念及遍历方式(图文并茂) 数据结构之树数据结构之树(一)二叉树概念及遍历方式(这也许是你见过最详细的教程)数据结构之树(二)二叉查找树数据结构之树(三)红黑树数据结构之树(一)二叉树概念及遍历方式(这也许是你见过最详细的教程)文章目录数据结构之树(一)二叉树概念及遍历方式(这也许是你见过最详细的教程)一、树的基本概念二、二叉树的定义2.1 二叉树的定义2.2 满二叉树2.3 完全二叉树三、二叉树的存储方式3.1 ...
我的开源项目-liveRtspServer liveRtspServerGitHub传送门文章目录liveRtspServer一、项目简介二、功能介绍三、依赖四、编译四、用法五、效果六、联系方式一、项目简介基于live555的RTSP服务器二、功能介绍RTP/UDP 单播RTP/UDP 多播RTP/TCP采集V4L2摄像头数据,编码成H.264采集ALSA声卡数据,编码成AAC三、依赖live555X264...
live555源码分析(八)多播 live555源码分析系列live555源码分析(一)live555初体验live555源码分析(二)基本组件上live555源码分析(三)基本组件下live555源码分析(四)RTSPServer分析live555源码分析(五)DESCRIBE请求的处理live555源码分析(六)SETUP和PLAY请求的处理live555源码分析(七)播放过程live555源码分析(八)多播...
live555源码分析(七)播放过程 live555源码分析系列live555源码分析(一)live555初体验live555源码分析(二)基本组件上live555源码分析(三)基本组件下live555源码分析(四)RTSPServer分析live555源码分析(五)DESCRIBE请求的处理live555源码分析(六)SETUP和PLAY请求的处理live555源码分析(七)播放过程live555源码分析(八)多播...
live555源码分析(六)SETUP和PLAY请求的处理 live555源码分析系列live555源码分析(一)live555初体验live555源码分析(二)基本组件上live555源码分析(三)基本组件下live555源码分析(四)RTSPServer分析live555源码分析(五)DESCRIBE请求的处理live555源码分析(六)SETUP和PLAY请求的处理live555源码分析(七)播放过程live555源码分析(八)多播...
live555源码分析(五)DESCRIBE请求的处理 live555源码分析系列live555源码分析(一)live555初体验live555源码分析(二)基本组件上live555源码分析(三)基本组件下live555源码分析(四)RTSPServer分析live555源码分析(五)DESCRIBE请求的处理live555源码分析(六)SETUP请求的处理live555源码分析(七)PLAY请求的处理live555源码分析(八)播放过...
live555源码分析(四)RTSPServer分析 live555源码分析系列live555源码分析(一)live555初体验live555源码分析(二)基本组件上live555源码分析(三)基本组件下live555源码分析(四)RTSPServer分析live555源码分析(五)DESCRIBE请求的处理live555源码分析(六)SETUP请求的处理live555源码分析(七)PLAY请求的处理live555源码分析(八)播放过...
live555源码分析(三)基本组件下 live555源码分析系列live555源码分析(一)live555初体验live555源码分析(二)基本组件上live555源码分析(三)基本组件下live555源码分析(四)RTSPServer分析live555源码分析(五)DESCRIBE请求的处理live555源码分析(六)SETUP请求的处理live555源码分析(七)PLAY请求的处理live555源码分析(八)播放过...
live555源码分析(二)基本组件上 live555源码分析系列live555源码分析(一)live555初体验live555源码分析(二)基本组件上live555源码分析(三)基本组件下live555源码分析(四)RTSPServer分析live555源码分析(五)DESCRIBE请求的处理live555源码分析(六)SETUP请求的处理live555源码分析(七)PLAY请求的处理live555源码分析(八)播放过...
live555源码分析(一)live555初体验 live555源码分析系列live555源码分析(一)live555初体验live555源码分析(二)基础组件live555源码分析(三)RTSPServer分析live555源码分析(四)DESCRIBE请求的处理live555源码分析(五)SETUP请求的处理live555源码分析(六)PLAY请求的处理live555源码分析(七)播放过程live555源码分析(八)多播li...
Linux驱动系列目录 Linux驱动入门系列Linux驱动入门(一)字符设备驱动基础Linux驱动入门(二)操作硬件Linux驱动入门(三)Led驱动Linux驱动入门(四)非阻塞方式实现按键驱动Linux驱动入门(五)阻塞方式实现按键驱动Linux驱动入门(六)poll机制实现按键驱动Linux驱动入门(七)使用定时器消除按键抖动Linux misc设备驱动Linux misc设备(一)misc驱动...
Linux I2C总线(二)I2C设备驱动编写方法 Linux I2C总线Linux I2C总线(一)I2C驱动框架Linux I2C总线(二)I2C设备驱动编写方法Linux I2C总线(二)I2C设备驱动编写方法文章目录Linux I2C总线(二)I2C设备驱动编写方法一、I2C驱动的注册二、I2C设备的注册2.1 静态注册2.2 动态注册2.3 在用户空间注册三、I2C数据传输四、I2C驱动模板一、I2C驱动的注册1.设置I2C驱...
Linux I2C总线(一)I2C驱动框架 Linux I2C总线Linux I2C总线(一)I2C驱动框架Linux I2C总线(二)I2C设备驱动编写方法Linux I2C总线(一)I2C驱动框架文章目录Linux I2C总线(一)I2C驱动框架一、Linux I2C驱动的主要对象1.1 I2C总线1.2 I2C设备1.3 I2C驱动1.4 I2C适配器二、Linux I2C驱动框架三、I2C驱动框架源码剖析3.1 注册I2C设...
Linux input子系统(二)input子系统驱动 Linux input子系统Linux input子系统(一)input设备应用编程Linux input子系统(二)input子系统驱动Linux input子系统(二)input子系统驱动文章目录Linux input子系统(二)input子系统驱动一、input子系统驱动框架1.1 input子系统的主要对象1.2 input子系统的驱动框架二、input设备驱动编写2.1 分配一个...
Linux input子系统(一)input设备应用编程 Linux input子系统Linux input子系统(一)input设备应用编程Linux input子系统(二)input子系统驱动Linux input子系统(一)input设备应用编程文章目录Linux input子系统(一)input设备应用编程一、使用hexdump读取input设备二、input事件分析三、input设备应用编程Linux内核提供input子系统给输入设备...
Linux platform总线 Linux platform总线文章目录Linux platform总线一、总线概念二、platform驱动框架详解2.1 platform驱动框架2.2 platform_device和platform_driver的匹配规则2.3 platform_device中的资源描述三、platform驱动框架源码剖析四、platform驱动程序模板一、总线概念在Linux驱动模型中总要关心三个对...
Linux misc设备(二)蜂鸣器驱动 Linux misc设备驱动Linux misc设备(一)misc驱动框架Linux misc设备(二)蜂鸣器驱动Linux misc设备(二)蜂鸣器驱动文章目录Linux misc设备(二)蜂鸣器驱动一、注册misc设备二、硬件操作2.1 GPIO设置2.2 PWM定时器的时钟设置2.3 PWM定时器设置三、源码四、测试本文将介绍如何基于misc框架写一个蜂鸣器驱动程序一、注册mis...
Linux misc设备(一)misc驱动框架 Linux misc设备Linux misc设备(一)misc驱动框架Linux misc设备(二)蜂鸣器驱动Linux misc设备(一)misc驱动框架文章目录Linux misc设备(一)misc驱动框架一、misc简介二、misc驱动框架三、misc源码剖析四、misc设备实例驱动编写模板一、misc简介Linux的驱动设计是趋向于分层的,大多数设备都有自己归属的类型,例如按键...
Linux驱动入门(七)使用定时器消除按键抖动 Linux驱动入门系列Linux驱动入门(一)字符设备驱动基础Linux驱动入门(二)操作硬件Linux驱动入门(三)Led驱动Linux驱动入门(四)非阻塞方式实现按键驱动Linux驱动入门(五)阻塞方式实现按键驱动Linux驱动入门(六)poll机制实现按键驱动Linux驱动入门(七)使用定时器消除按键抖动Linux驱动入门(七)使用定时器消除按键抖动文章目录Linux驱动入...
Linux驱动入门(六)poll机制实现按键驱动 Linux驱动入门系列Linux驱动入门(一)字符设备驱动基础Linux驱动入门(二)操作硬件Linux驱动入门(三)Led驱动Linux驱动入门(四)非阻塞方式实现按键驱动Linux驱动入门(五)阻塞方式实现按键驱动Linux驱动入门(六)poll机制实现按键驱动Linux驱动入门(七)使用定时器消除按键抖动Linux驱动入门(六)poll机制实现按键驱动文章目录Linux驱动...
Linux驱动入门(五)阻塞方式实现按键驱动 Linux驱动入门(一)字符设备驱动基础Linux驱动入门(二)操作硬件Linux驱动入门(三)Led驱动Linux驱动入门(四)非阻塞方式实现按键驱动Linux驱动入门(五)阻塞方式实现按键驱动Linux驱动入门(六)poll机制实现按键驱动Linux驱动入门(七)使用定时器消除按键抖动Linux驱动入门(五)阻塞方式实现按键驱动文章目录Linux驱动入门(五)阻塞方式实现按键驱...
Linux驱动入门(四)非阻塞方式实现按键驱动 Linux驱动入门系列Linux驱动入门(一)字符设备驱动基础Linux驱动入门(二)操作硬件Linux驱动入门(三)Led驱动Linux驱动入门(四)非阻塞方式实现按键驱动Linux驱动入门(五)阻塞方式实现按键驱动Linux驱动入门(六)poll机制实现按键驱动Linux驱动入门(七)使用定时器消除按键抖动Linux驱动入门(四)非阻塞方式实现按键驱动文章目录Linux驱动入...
Linux驱动入门(三)Led驱动 Linux驱动入门系列Linux驱动入门(一)字符设备驱动基础Linux驱动入门(二)操作硬件Linux驱动入门(三)Led驱动Linux驱动入门(四)轮询实现按键驱动Linux驱动入门(五)中断实现按键驱动Linux驱动入门(六)poll机制实现按键驱动Linux驱动入门(七)使用定时器防按键抖动Linux驱动入门(三)Led驱动文章目录Linux驱动入门(三)Led驱动一、注...
Linux驱动入门(二)操作硬件 Linux驱动入门系列Linux驱动入门(一)字符设备驱动基础Linux驱动入门(二)操作硬件Linux驱动入门(三)Led驱动Linux驱动入门(四)轮询实现按键驱动Linux驱动入门(五)中断实现按键驱动Linux驱动入门(六)poll机制实现按键驱动Linux驱动入门(七)使用定时器防按键抖动Linux驱动入门(二)操作硬件文章目录Linux驱动入门(二)操作硬件一、通用做...
Linux驱动入门(一)字符设备驱动基础 Linux驱动入门(一)字符设备驱动基础Linux驱动入门系列Linux驱动入门(一)字符设备驱动基础Linux驱动入门(二)Led驱动Linux驱动入门(三)轮询实现按键驱动Linux驱动入门(四)中断实现按键驱动Linux驱动入门(五)poll机制实现按键驱动Linux驱动入门(六)使用定时器防按键抖动文章目录Linux驱动入门(一)字符设备驱动基础一、驱动简介二、字符设备驱动...
深入学习Linux摄像头(四)三星平台fimc驱动详解 深入学习Linux摄像头系列深入学习Linux摄像头(一)v4l2应用编程深入学习Linux摄像头(二)v4l2驱动框架深入学习Linux摄像头(三)虚拟摄像头驱动分析深入学习Linux摄像头(四)三星平台fimc驱动详解深入学习Linux摄像头(四)三星平台fimc驱动详解文章目录深入学习Linux摄像头(四)三星平台fimc驱动详解一、硬件接口二、fimc驱动总览三、源码分析3.1...
深入学习Linux摄像头(三)虚拟摄像头驱动分析 深入学习Linux摄像头系列深入学习Linux摄像头(一)v4l2应用编程深入学习Linux摄像头(二)v4l2驱动框架深入学习Linux摄像头(三)虚拟摄像头驱动分析深入学习Linux摄像头(五)三星平台fimc驱动详解一深入学习Linux摄像头(六)三星平台fimc驱动详解二深入学习Linux摄像头(三)虚拟摄像头驱动分析上一篇文章讲解了V4L2的驱动框架,这一节我们来分析一个驱...
深入学习Linux摄像头(二)v4l2驱动框架 深入学习Linux摄像头系列深入学习Linux摄像头(一)v4l2应用编程深入学习Linux摄像头(二)v4l2驱动框架深入学习Linux摄像头(三)虚拟摄像头驱动分析深入学习Linux摄像头(五)三星平台fimc驱动详解一深入学习Linux摄像头(六)三星平台fimc驱动详解二深入学习Linux摄像头(二)v4l2驱动框架文章目录深入学习Linux摄像头(二)v4l2驱动框架一、V...
从零开始写一个RTSP服务器(九)一个RTP OVER RTSP/TCP的RTSP服务器 从零开始写一个RTSP服务器系列★我的开源项目-RtspServer从零开始写一个RTSP服务器(一)不一样的RTSP协议讲解从零开始写一个RTSP服务器(二)RTSP协议的实现从零开始写一个RTSP服务器(三)RTP传输H.264从零开始写一个RTSP服务器(四)一个传输H.264的RTSP服务器从零开始写一个RTSP服务器(五)RTP传输AAC从零开始写一个RTSP服务器(六)一...
从零开始写一个RTSP服务器(八)一个多播的RTSP服务器 从零开始写一个RTSP服务器系列★我的开源项目-RtspServer从零开始写一个RTSP服务器(一)不一样的RTSP协议讲解从零开始写一个RTSP服务器(二)RTSP协议的实现从零开始写一个RTSP服务器(三)RTP传输H.264从零开始写一个RTSP服务器(四)一个传输H.264的RTSP服务器从零开始写一个RTSP服务器(五)RTP传输AAC从零开始写一个RTSP服务器(六)一...
从零开始写一个RTSP服务器(七)多播传输RTP包 从零开始写一个RTSP服务器系列从零开始写一个RTSP服务器(一)不一样的RTSP协议讲解从零开始写一个RTSP服务器(二)RTSP协议的实现从零开始写一个RTSP服务器(三)RTP传输H.264从零开始写一个RTSP服务器(四)一个传输H.264的RTSP服务器从零开始写一个RTSP服务器(五)RTP传输AAC(待写)从零开始写一个RTSP服务器(六)一个传输AAC的RTSP服务器...
从零开始写一个RTSP服务器(六)一个传输AAC的RTSP服务器 从零开始写一个RTSP服务器系列从零开始写一个RTSP服务器(一)不一样的RTSP协议讲解从零开始写一个RTSP服务器(二)RTSP协议的实现从零开始写一个RTSP服务器(三)RTP传输H.264从零开始写一个RTSP服务器(四)一个传输H.264的RTSP服务器从零开始写一个RTSP服务器(五)RTP传输AAC从零开始写一个RTSP服务器(六)一个传输AAC的RTSP服务器从零开始...
从零开始写一个RTSP服务器(五)RTP传输AAC 从零开始写一个RTSP服务器系列从零开始写一个RTSP服务器(一)不一样的RTSP协议讲解从零开始写一个RTSP服务器(二)RTSP协议的实现从零开始写一个RTSP服务器(三)RTP传输H.264从零开始写一个RTSP服务器(四)一个传输H.264的RTSP服务器从零开始写一个RTSP服务器(五)RTP传输AAC从零开始写一个RTSP服务器(六)一个传输AAC的RTSP服务器(待写)...
从零开始写一个RTSP服务器(四)一个传输H.264的RTSP服务器 从零开始写一个RTSP服务器系列从零开始写一个RTSP服务器(一)不一样的RTSP协议讲解从零开始写一个RTSP服务器(二)RTSP协议的实现从零开始写一个RTSP服务器(三)RTP传输H.264从零开始写一个RTSP服务器(四)一个传输H.264的RTSP服务器从零开始写一个RTSP服务器(五)RTP传输AAC(待写)从零开始写一个RTSP服务器(六)一个传输AAC的RTSP服务器(...
从零开始写一个RTSP服务器(三)RTP传输H.264 从零开始写一个RTSP服务器系列从零开始写一个RTSP服务器(一)不一样的RTSP协议讲解从零开始写一个RTSP服务器(二)RTSP协议的实现从零开始写一个RTSP服务器(三)RTP传输H.264从零开始写一个RTSP服务器(四)一个传输H.264的RTSP服务器(待写)从零开始写一个RTSP服务器(五)RTP传输AAC(待写)从零开始写一个RTSP服务器(六)一个传输AAC的RTSP...
从零开始写一个RTSP服务器(二)RTSP协议的实现 从零开始写一个RTSP服务器系列从零开始写一个RTSP服务器(一)不一样的RTSP协议讲解从零开始写一个RTSP服务器(二)RTSP协议的实现从零开始写一个RTSP服务器(三)RTP传输H.264(待写)从零开始写一个RTSP服务器(四)一个传输H.264的RTSP服务器(待写)从零开始写一个RTSP服务器(五)RTP传输AAC(待写)从零开始写一个RTSP服务器(六)一个传输AAC的...
从零开始写一个RTSP服务器(一)RTSP协议讲解 从零开始写一个RTSP服务器系列从零开始写一个RTSP服务器(一)不一样的RTSP协议讲解从零开始写一个RTSP服务器(二)RTP传输H.264(待写)从零开始写一个RTSP服务器(三)一个传输H.264的RTSP服务器(待写)从零开始写一个RTSP服务器(四)RTP传输AAC(待写)从零开始写一个RTSP服务器(五)一个传输AAC的RTSP服务器(待写)从零开始写一个RTSP服务器(...
我的开源项目-RtspServer 我的开源项目-RtspServer文章目录我的开源项目-RtspServer一、项目介绍二、功能介绍三、开发环境四、使用方法4.1 传输音视频文件4.2 采集V4L2摄像头4.3 采集ALSA音频设备4.4 RTP_OVER_RTSP4.5 多播五、技术点一、项目介绍使用C++实现的一个RTSP服务器GitHub传送门二、功能介绍支持H264、AAC的音视频格式支持传输H2...
深入学习Linux摄像头(一)v4l2应用编程 深入学习Linux摄像头系列深入学习Linux摄像头(一)v4l2应用编程深入学习Linux摄像头(二)v4l2驱动框架深入学习Linux摄像头(三)编写最简单的虚拟摄像头驱动深入学习Linux摄像头(四)摄像头硬件接口(基于S5PV210)深入学习Linux摄像头(五)三星平台fimc驱动详解一深入学习Linux摄像头(六)三星平台fimc驱动详解二深入学习Linux摄像头(七)编...
Linux epoll内核源码剖析 IO多路复用接口Linux内核源码剖析,源码之前,了无密码poll Linux内核源码剖析select Linux内核源码剖析epoll Linux内核源码剖析epoll Linux内核源码剖析前面介绍了select/poll,此文章将讲解epoll,epoll是select/poll的增强版,epoll更加高效,当然也更加复杂epoll高效的一个重要的原因是在获取事件的时候,它无须遍...
Linux select内核源码剖析 poll Linux内核源码剖析select Linux内核源码剖析select Linux内核源码剖析select的原理其实是和poll是一样的,都是采用轮询的方式。select相对于poll也许是比较节省空间吧,因为select是采用bitmap来标志的本文先讲解一下如何在应用层使用select,然后再深入内核剖析select机制select应用程序select可以监听多个文件描述...
Linux poll内核源码剖析 int do_sys_poll(struct pollfd __user *ufds, unsigned int nfds, struct timespec *end_time){ long stack_pps[POLL_STACK_ALLOC/sizeof(long)]; struct poll_list *const head = (struct poll_list *)sta...
Linux I2C驱动框架(超详细) Linux I2C驱动框架一、总览全局在讨论I2C驱动框架前,先讨论几个重要的概念1、I2C总线struct bus_type i2c_bus_type = { .name = "i2c", .match = i2c_device_match, .probe = i2c_device_probe, .remove = i2c_device_remove, .shutdow...
使用mp4v2封装H.264成mp4最简单示例 #include <stdio.h>#include <string.h>#include <stdlib.h>#include <mp4v2/mp4v2.h>int getNalu(FILE *pFile, unsigned char *pNalu){ unsigned char c; int pos = 0; ...
rtmp协议详解 前言最近在学习rtmp协议,在看官方文档的时候总是懵懵懂懂,硬生生看了两天,现在基本上了解rtmp协议了,想用自己觉得比较清晰的方式来讲解rtmp协议,希望能够对向我一样的初学者有所帮助。本文将通过以下四部分讲解rtmp协议。1、消息2、块3、rtmp的消息类型4、实例分析rtmp传输过程一、消息消息是rtmp的基本数据单元,服务端和客户端通过在网络上发送RTMP消息进行通讯。...
实例讲解AMF格式 AMF协议是Action Message Format协议的简称,AMF协议是Adobe公司的协议,主要用于数据交互和远程过程调用。AMF采用二进制编码,这种方式可以高度压缩数据,因此非常适合用来传递大量的资料。AMF使用第一个字节作为该数据的格式,有以下几种格式typevalueNumber0×00Boolean0x01String0x02Obje...
将H.264封装为FLV格式 本文将介绍如何将H.264封装成flv格式。在看本文之间,建议先看一看下面两篇文章:H.264码流结构FLV格式详解首先说一说构建一个FLV文件需要什么?FLV Header + FLv script tag + FLV Video tag + FLV Audio tag由于这里只是封装H.264,所以不包括Audio tag。下面将通过分析示例来说明FLV Header + FL...
FLV格式详解 前言最近因为要使用rtmp推H.264,了解到rtmp只能推flv格式,不能直接推H.264,所以专门学习了flv格式,自己将H.264格式封装成Flv,盯着一堆二进制看了两天,哈哈哈,有点头大。这篇文章将介绍Flv格式,至于如何将H.264封装成Flv,以及如何使用rtmp推H.264将在后面的文章介绍。Flv文件格式Flv由 “Flv header” 和 “Flv Body”组成。F...
从零开始写一个通用的Makefile 本文将通过一步一步地介绍如何写出一个通用的Makefile第一部分先来看一下我们此时要编译的代码main.h#ifndef _MAIN_H_#define _MAIN_H_#define NUM 3#endifmain.c#include &amp;lt;stdio.h&amp;gt;#include &quot;main.h&quot; int main(int
使用SDL实现一个简单的YUV播放器 本文将通过几个简单示例,最后实现一个YUV播放器本文内容如下1、SDL的基本操作2、SDL的处理事件3、SDL的纹理渲染4、使用SDL实现YUV播放器1.SDL的基本操作这个例子中,使用SDL来显示一个窗口使用SDL创建一个窗口的基本流程如下SDL_Init 初始化SDLSDL_CreateWindow 创建一个窗口SDL_CreateRenderer 创建一个操作窗口的渲...
C语言函数调用是怎么样一个过程? 大多数CPU上的程序实现使用栈来支持函数调用操作,栈被用来传递函数参数、存储返回信息、临时保存寄存器原有的值以备恢复以及用来存储局部变量。 函数调用操作所使用的栈部分叫做栈帧结构,每个函数调用都有属于自己的栈帧结构,栈帧结构由两个指针指定,帧指针(指向起始),栈指针(指向栈顶),函数对大多数数据的访问都是基于帧指针。下面是结构图栈指针和帧指针一般...
ffmpeg裁剪视频 使用ffmpeg裁剪一段视频主要需要一下几步1、avformat_open_input /* 打开输入文件 */2、avformat_alloc_output_context2 /* 打开输出文件 */3、avformat_new_stream /* 为输出文件创建流 */4、avcodec_copy_context && avcodec_parameters_c...
ffmpeg从MP4抽取H.264视频数据 看此文章之前,建议先看一看:https://blog.csdn.net/weixin_42462202/article/details/88182605使用ffmpeg读取H264并不能直接得到NALU单元,必须从读取出来的AVPacket与AVFormatContext->streams[video_index]->codec->extradata提取出来。输出H.26...