- 博客(72)
- 资源 (1)
- 收藏
- 关注
原创 《ZLMediaKit源码学习笔记》(2)MediaServer作为RTSP转发服务器
学习源码前,我们需要先熟悉如何使用ZLMediaKit提供的测试程序,正好本人手上有宇视摄像头,本节就测试下如何使用MediaServer来转发摄像头的RTSP流。
2022-02-07 22:53:50
5408
8
原创 《ZLMediaKit源码学习笔记》(1)windows下VS2022源码编译
学习源码前,需要先让程序跑起来,本节我们学习下在windows下如何使用Visual Studio 2022来编译ZLMediaKit。
2022-02-03 01:35:07
4689
2
原创 《ZLToolKit源码学习笔记》(16)网络模块之整体框架概述
网络模块主要是对系统网络相关API进行了封装,并提供了易用的TCP服务器、TCP客户端、UDP负载均衡服务器、TCP、UDP会话等基础类。
2022-01-21 21:12:54
3923
原创 《ZLToolKit源码学习笔记》(21)网络模块之TcpClient与Session
本节学习ZLToolKit的TCP客户端封装以及服务器侧收到客户端连接后的Session封装。
2022-01-21 20:25:48
2137
1
原创 《ZLToolKit源码学习笔记》(22)网络模块之UdpServer
服务器模型:与TcpServer类似,使用多线程+epoll (select),一个Serverfd + 多个epoll实例每一个线程都创建了一个epoll实例,并以ET边沿触发模式监听同一个Server fd的读事件,使用EPOLLEXCLUSIVE标志位防止惊群效应,线程阻塞在epoll_wait上等待客户端连接。当有客户端发送数据到Server fd时,针对该客户端创建一个新的会话(新的文件描述符,同样使用ET边沿触发),后续该客户端的数据将不会再发送到Server fd。
2022-01-16 21:13:14
3113
2
原创 《ZLToolKit源码学习笔记》(19)网络模块之套接字封装
套接字抽象封装,包含TCP服务器、TCP客户端(TCP session)、UDP套接字、与EventPoller关联处理描述符事件,数据发送以及接收处理等。
2022-01-15 20:31:05
2450
原创 《ZLToolKit源码学习笔记》(20)网络模块之TcpServer
创建多个子TcpServer对象,这些子TcpServer对象通过Socket对象克隆的方式在多个poller线程中监听同一个listen fd,这样这个TCP服务器将会通过抢占式accept的方式把客户端均匀的分布到不同的poller线程,通过该方式能实现客户端负载均衡以及提高连接接收速度。
2022-01-08 23:41:30
3158
1
原创 《ZLToolKit源码学习笔记》(18)网络模块之Buffer缓存
对原始数据char* data进行封装,提供不同的数据访问方式,用于TCP与UDP的数据收发。
2022-01-01 23:32:45
1942
1
原创 《ZLToolKit源码学习笔记》(17)网络模块之基础接口封装类SockUtil
本部分主要看下sockutil.h和sockutil.cpp两个文件。该模块统一封装不同平台下的网络相关API,作为后续网络编程的基础接口。
2021-12-28 20:42:25
2475
1
原创 《ZLToolKit源码学习笔记》(15)事件轮询模块之事件轮询器EventPoller
一个服务器程序,一般都需要处理三类事件:IO事件、定时事件、信号。而为了方便处理,我们需要统一事件源,比如使用IO复用来管理所有事件。其次,为了实现跨平台,我们需要提供一个平台无关的统一接口,与平台相关的实现在内部完成。比如对于IO复用,linux下有epoll,windows等其它平台有select,这里我们就可以统一封装,对外提供一致的接口。一个事件管理接口,还应该是支持多线程的,本节学习下ZLToolKit中的事件管理工具:EventPoller。
2021-12-25 23:09:41
1976
1
原创 《ZLToolKit源码学习笔记》(14)事件轮询模块之定时器
ZLToolKit的定时器是通过线程+循环判断任务的执行时间是否到达来实现,添加任务时,记录该任务下一次执行时间点,然后把定时任务插入到队列中,在线程runLoop中,检测队列中是否有任务已经到达执行时间点,有则立即执行该任务,否则,把最近将要执行的任务的时间点作为线程的休眠时间。以此循环,线程下一次唤醒后重复执行上述操作。
2021-12-25 15:12:46
1500
1
原创 《ZLToolKit源码学习笔记》(12)事件轮询模块之整体框架概述
事件轮询模块主要是统一封装了对事件的处理机制,包括管道、网络IO、定时器等。
2021-12-22 23:48:44
1373
1
原创 《ZLToolKit源码学习笔记》(13)事件轮询模块之管道的简单封装
管道是进程(线程)间通信的一种常用手段,本节学习下ZLToolKit对管道的封装。
2021-12-21 23:14:41
1429
原创 《ZLToolKit源码学习笔记》(11)线程模块之工作线程池WorkThreadPool
WorkThreadPool管理一组EventPoller事件轮询器线程,任务通过分配到不同的EventPoller来执行。
2021-12-19 21:25:09
1843
原创 《ZLToolKit源码学习笔记》(10)线程模块之线程池
基于任务队列(TaskQueue)和线程组(thread_group),实现线程池,线程池中所有线程等待在任务队列上,循环执行:等待任务到来->获取到任务->执行任务。
2021-12-18 23:13:50
2261
原创 《ZLToolKit源码学习笔记》(8)线程模块之线程负载计算器
一个线程,要么处于活跃状态,在执行任务,此时占用CPU,要么处于休眠状态,等待任务的到来,此时不占用CPU,ThreadLoadCounter就是用于统计某一段时间内,线程处于活跃状态所占的比率。也可以说是该线程对CPU的使用率。
2021-12-16 20:58:00
1802
原创 《ZLToolKit源码学习笔记》(5)工具模块之资源池
该部分功能在ResourcePool.h中实现,由shared_ptr_imp、ResourcePool_l、ResourcePool三个类组成。
2021-12-11 23:01:38
2415
原创 《ZLToolKit源码学习笔记》(4)工具模块之消息广播器
系列文章目录《ZLToolKit源码学习笔记》(1)VS2019源码编译《ZLToolKit源码学习笔记》(2)工具模块之日志功能分析《ZLToolKit源码学习笔记》(3)工具模块之终端命令解析《ZLToolKit源码学习笔记》(4)工具模块之消息广播器(本文)前言消息广播器相关功能对应NoticeCenter.h和NoticeCenter.cpp文件。目录系列文章目录前言一、使用二、源码结构分析2.1、事件管理:NoticeCenter2.2、事件分发
2021-11-22 21:09:50
2366
原创 《ZLToolKit源码学习笔记》(3)工具模块之终端命令解析
系列文章目录《ZLToolKit源码学习笔记》(1)VS2019源码编译《ZLToolKit源码学习笔记》(2)工具模块之日志模块分析《ZLToolKit源码学习笔记》(3)工具模块之终端命令解析(本文)文章目录系列文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言终端命令解析相关功能对应cmd.h和cmd.cpp文件。一、使用使用示例可以参见test_pingpong.cpp和test_shell.cpp,实
2021-11-14 18:23:02
2538
2
原创 《ZLToolKit源码学习笔记》(2)工具模块之日志功能分析
系列文章目录《ZLToolKit源码学习笔记》(1)VS2019源码编译《ZLToolKit源码学习笔记》(2)日志模块分析(本文)文章目录目录系列文章目录文章目录前言一、日志功能的使用1、日志级别2、日志的调用方式二、源码结构分析1、类图2、各模块分析2.1、LogContextCapturer:2.2、LogContext2.3、Logger2.4、logWriter2.5、LogChannel前言日志模块主要是logg
2021-11-06 22:37:08
4334
4
原创 《ZLToolKit源码学习笔记》(1)VS2019源码编译
系列文章目录ZLToolKit源码学习笔记(1):VS2019源码编译(本文)目录一、源码下载二、辅助工具下载1、cmake-gui2、类设计器三、VS2019编译1.通过cmake直接打开2.通过sln解决方案打开一、源码下载下载路径:https://github.com/ZLMediaKit/ZLToolKit二、辅助工具下载1、cmake-gui下载地址:https://cmake.org/files该路径下有cmake的各个版本,.
2021-11-06 14:45:57
5474
原创 线程池设计与实现
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分
2021-06-30 22:54:20
689
原创 SRS流媒体服务器和FFmpeg推流
目录一、SRS服务器搭建二、FFmpeg推流三、VLC拉流播放一、SRS服务器搭建可以在github或者码云下载SRS源码,切换到trunk目录,执行./configure && make编译。可能存在部分3rdparty目录下第三方依赖库.sh文件或者configure文件没有执行权限,可以chmod添加下。编译完成后,启动srs。./objs/srs -c conf/rtmp.conf二、FFmpeg推流ffmpeg -re -i test.fl.
2021-04-28 01:42:42
1682
1
原创 Ubuntu 16.04 SSH连接不上问题解决
第一步,检查是否安装ssh server。如果没有,通过以下命令安装。执行sudo ps -e |grep ssh 回车可以看到sshd,说明已经启动,否则需要开启ssh。root@ubuntu:~# apt-get install openssh-serverroot@ubuntu:~# ps -e |grep sshroot@ubuntu:~# /etc/init.d/ssh start第二步,检查防火墙状态,可能被防火墙拦截,如果开启,可以将其关闭后再测试。我这里是已经关闭的。root@u
2021-04-28 00:27:41
1594
转载 如何更好地理解和掌握 KMP 算法
作者:灵茶山艾府链接:https://www.zhihu.com/question/21923021/answer/37475572来源:知乎角色:甲:abbaabbaaba乙:abbaaba乙对甲说:「帮忙找一下我在你的哪个位置。」甲从头开始与乙一一比较,发现第 7 个字符不匹配。要是在往常,甲会回退到自己的第 2 个字符,乙则回退到自己的开头,然后两人开始重新比较。[1]这样的事情在字符串王国中每天都在上演:不匹配,回退,不匹配,回退,……但总有一些妖艳字符串要花自己不少的时间。上了
2020-06-21 22:09:07
258
原创 ffmpeg源码安装(1):linux
0X00、下载ffmpeg源码我们可以在ffmpeg官网下载源码,下载地址http://ffmpeg.org/download.html,目前最新版本是4.2.2。0X01、生成makefile把下载的源码放到linux系统中 ,我这里是放在/opt/目录下。[root@localhost opt]# ls -ldrwxr-xr-x. 18 root root 4096 5月 8 21:07 ffmpeg-4.2.2进入到ffmpeg-4.2.2目录,内容如下:[root@localho
2020-05-18 23:19:04
677
原创 C# DataGridView控件使用示例
using System;using System.Drawing;using System.Windows.Forms;public class Form1 : System.Windows.Forms.Form{ private Panel buttonPanel = new Panel(); private DataGridView songsDataGridView =
2017-08-22 23:15:57
3957
转载 JSP 获取访问者真正的IP地址
http://www.cnblogs.com/love540376/p/6285620.html?utm_source=itdadao&utm_medium=referral
2017-03-14 16:37:02
383
转载 Apache FileUpload详细介绍
http://www.open-open.com/lib/view/open1338108871261.html
2017-03-10 16:09:37
324
转载 Qt线程与事件循环的正确用法
周末天冷,索性把电脑抱到床上上网,这几天看了 dbzhang800 博客关于 Qt 事件循环的几篇 Blog,发现自己对 Qt 的事件循环有不少误解。从来只看到现象,这次借 dbzhang800 的博客,就代码论事,因此了解到一些 Qt 深层的实现,虽然是在 Qt 庞大的构架里只算的是冰山的一角,确让人颇为收益。 从 dbzhang800 的博客中转载两篇关于事件循环的文章,
2017-03-07 10:43:14
5945
1
转载 文件描述符标志
文件描述符标志执行时关闭标识位 FD_CLOEXEC 的作用首先先回顾 apue 中对它的描述:① 表示描述符在通过一个 exec 时仍保持有效(书P63,3.14节 fcntl 函数,在讲 F_DUPFD 时顺便提到)② 对打开文件的处理与每个描述符的执行时关闭(close-on-exec)标志
2016-12-20 16:17:21
550
原创 vs2012编写和使用动态库
一、编写动态库创建一个常规vc++空项目,在工程属性中,配置属性–>General–>configuration Type处,设置为dll。选择release版,生成解决方案即可。 mydll.h:#define MYDLL_H#define MYDLL __declspec(dllexport)MYDLL void printHello();#endif //MYDLL_H
2016-11-18 10:04:27
511
原创 虚拟盘、逻辑盘、卷的区别
1、虚拟磁盘使用RAID技术组合的多个物理磁盘组称为一个虚拟磁盘。2、逻辑磁盘虚拟磁盘可以在逻辑上再次进行划分,划分出的磁盘称为逻辑磁盘。比如,有4个各100G大小的物理磁盘,通过RAID技术组合成一个虚拟磁盘,这个虚拟磁盘有400G大小,但是操作系统不需要这么大的磁盘,所以,又再可以对这个虚拟磁盘进行划分,将它划分成4个逻辑磁盘,每个各100G大小,这里有一个问题,划分前和划分后
2016-11-04 12:53:37
5635
转载 RAID技术详解
一.RAID定义RAID(Redundant Array of Independent Disk 独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出,最初是为了组合小的廉价磁盘来代替大的昂贵磁盘,同时希望磁盘失效时不会使对数据的访问受损 失而开发出一定水平的数据保护技术。RAID就是一种由多块廉价磁盘构成的冗余阵列,在操作系统下是作为一个独立的大型存储设备出现。RAID可以充分发 挥出多
2016-11-03 14:44:57
352
转载 虚拟机桥接、NAT、host-only的区别
简单的说法桥接 通过使用物理机网卡 具有单独ipNAT 把物理机为路由器进行上网host-only 只能与物理机相连 下面是详细的解说VMWare提供了三种工作模式,它们是bridged(bridged模式)、NAT(网络地址转换模式)和host-only(主机模式)。要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式。1.bridged(桥接模式)
2016-08-07 20:10:31
1351
2
C++ Qt学生信息管理系统
2014-12-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人