自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(88)
  • 收藏
  • 关注

原创 《手把手带你学会git开发流程》

该命令的意思是把远程库中的更新合并到(pull=fetch+merge)本地库中,–-rebase的作用是取消掉本地库中刚刚的commit,并把他们接到更新后的版本库之中。如果你是组织者,那可以直接克隆主项目,如果你是社区成员,你看到这个项目不错,你也想贡献你的代码,那你需要fork,点击fork。总之就是 我提交上自己的fork的仓库 同步的时候 从远端同步,递增推送,层层关系,大概就是这样。对于fork的主仓库是没有主仓库信息的,我们需要追踪他,所以要添加上游地址。左边对应主仓库的地址,右边自己的。

2023-02-04 12:53:37 605 2

原创 《OpenGL 模型》 渲染出帅气的暗影战士

3D建模工具,可以让艺术家创建复杂的形状,Assimp库用于加载,如加载obj格式的文件到我们的程序之中,下载CMAKE用于构建该库(会有很多问题),不过!我已经为大家整理好了,大家加入到自己的ide中,设置好链接,头文件加入就好,文件我放在这里,直接用。理解模型构建的基础单位 是网格,就可以了,相当于积木块一样,组成一个大玩具,我们先需要定义一个OpenGL的网格类,来接收通过Assimp解析后的数据(网格(Mesh)代表的是单个的可绘制实体)话不多说,直接上代码,看看网格类。不多解释,直接上代码。

2022-12-21 10:23:26 508

原创 《线程池》

程序里的指令操作,涉及IO的一些操作,比如设备、文件、网络操作(等待客户端连接IO操作是可以把程序阻塞住的)单核上,严格意义上还是只执行一个线程,每个线程时间片占用的CPU时间片非常短,宏观上看还是串行的。多核上,多个线程是在真正的同时执行。程序里的指令操作都是用作计算的。

2022-11-22 14:39:34 141

原创 《搞定音频技术》

这样我们就实现了音频信号的采集,我们常说的 PCM 文件就是未经封装的音频原始文件或者叫做音频“裸数据”选用什么样的采样率是根据具体用途来决定的,只是为了听见人声、听懂对方在说什么,8kHz.在网络音视频会议场景需要平衡音质和传输带宽消耗,我们一般可以使用 16kHz 或者 32kHz 的采样率。采样率就是 1 秒内采集到的采样点的个数,一般用赫兹 Hz 来表示。然后,振膜随空气抖动的振幅大小产生相应的电学信号。通道数的物理含义其实就是同一时间采集或播放的音频信号的总数。

2022-11-04 17:07:44 1854

原创 《C++设计模式》

理解松耦合设计思想掌握面向对象的设计原则掌握重构技法改善设计掌握GOF核心设计模式每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。核心:可复用的面向对象。定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中,Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(override重写)该算法的某些特定步骤。----《设计模式》GOF。

2022-11-04 10:19:00 303

原创 HLS点播 直播

点播与直播服务器不同的地方是, 直 播的 m3u8 文件会不断更新,而点播的 m3u8 文件是不会变的,只需要客户端在开始时请 求一次即可。客户端与服务器通过 HTTP 协议进行交互,以两级 m3u8 嵌套为例,客户端先 GET 请求 到一级 m3u8,一级 m3u8 里面包含了服务器端可以用于传播的一个或多个不同带宽的 URL, 这 URL 可以获取到二级 m3u8;流式媒体在播放前并不下载整个文件,只将开始部分内容存入内存,流式媒体 的数据流随时传送随时播放,只是在开始时有一些延迟。

2022-10-16 11:12:40 336

原创 C++从入门到精通 C++98.11.14.17

namespace 命名控件 {.....} 防止名字冲突在同一机制func();结构体int age;//函数 return 5;} };}

2022-10-13 21:26:44 1046

原创 《 罗剑锋的C++实战笔记 》

预处理# ifndef __HEAD_H__ # define __HEAD_H__ //头文件 # endif # if __linux__ # define HAS_LINUX 1 # endif1# ifndef __HEAD_H__ # define __HEAD_H__ //头文件 # endif # if __linux__ # define HAS_LINUX 1 # endif包含头文件#include 不止包含头文件 包含任意头文件。

2022-10-07 09:08:57 1211 1

原创 WebRTC

1.音视频处理+即使通信的开源库2.谷歌开源3.跨平台的多媒体框架。

2022-09-19 09:51:38 209

原创 《玩转Git三剑客》

git checkout 3d4731d90 我们切换到这个commit中 并没有创建分支 会进入分离头指针的状态 当我们 改动文件并commit时,如下,若不创建分支补充,会当作垃圾处理。git add -u 在已经添加到暂存区的文件,一并在此添加管理(避免修改了这些文件,繁琐添加,所以 -u 一并处理)将文件添加到暂存区,此时文件已经被git管理,可以暂存 也可以回退,添加之后在提交到仓库分支。查找 文件类型 哈希值值。ssh -keygen -t -rsa -b 4096 -C “邮箱”

2022-09-18 09:53:29 531

原创 web serveer

主线程使用某种算法来主动选择子线程.最简单、最常用的算法是随机算法和RoundRobin(轮流选取)算)法,但更优秀、更智能的算法将使任务在各个工作线程中更均匀地分配,从而减轻服务器的整体压力.主线程和所有子线程通过一个共享的工作队列来同步,子线程都睡眠在该工作队列上.当有新的任务到来时,线程池是由服务器预先创建的一组子线程,线程池中的线程数量应该和cpu数量差不多.线程池中的所有子线程都运行着相同的代码.当有新的任务到来时,主线程将通过某种方式选择线程池中的某一个子线程来为之服务.相。

2022-09-13 22:56:24 302

原创 手撸 json解析器

3.名称 :值对 ,字符串(string)、数值(number)、对象(object)、数组(array), true、false、null。2.数组 [1,2,“three”,“four”,true,false,null,[1,2],{“name”:“兮动人”}]父类指针指向 子类对象 强转子类 纹丝不动 地址不变 内容也不变。父类指针指向子类对象 虚函数定义下 使用子类函数。可读性良好的一种文本格式(存储信息)友元类 可以使用该类下的成员函数。1.对象 { 名称:值对 }...

2022-08-31 16:09:33 86

原创 SDL+ffmpeg 最新可直接运行 视频播放器

作用:重复执行一个函数的效果通常不是周期性的,因为每次加载和处理的数据所消耗的时间是不固定的,因此单纯地在一个循环中使用SDL_RenderPresent(renderer)会令视频播放产生帧率跳动的情况。因此需要引入一个定期刷新机制,令视频的播放有一个固定的帧率。实现帧率改变的初衷是改变播放视频的速度,但是总感觉这样的实现方式并不好,因为当你加速播放的时候,一秒内极有可能处理相当多的视频帧,会对播放设备产生明显影响,因此暂时认为对视频的加减速播放应该有更优的方案。...

2022-08-14 20:38:44 134

原创 SDL+ffmpeg 最新可直接运行 音频播放器

重采样结构体,就是改变音频的采样率、sample format、声道数等参数,使之按照我们期望的参数输出,当然是原有的音频参数不满足我们的需求,比如在FFMPEG解码音频的时候,不同的音源有不同的格式,采样率等,在解码后的数据中的这些参数也会不一致,如果我们接下来需要使用解码后的音频数据做其他操作,而这些参数的不一致导致会有很多额外工作,此时直接对其进行重采样,获取我们制定的音频参数,这样就会方便很多。重采样结构体能够改变原先音频的采样率、声道数等参数,令各种音频能够按照我们设定的参数进行输出。...

2022-08-13 15:59:42 148

原创 SDL2.0播放YUV格式视频

SDL2.0播放YUV格式视频

2022-08-07 11:07:21 169

原创 SDL2.0播放pcm格式音频

SDL播放PCM格式音频

2022-08-06 11:46:15 258

原创 ====== 函数新特性、内联函数、const详解 ======

后置返回类型Inline函数本体 替换函数调用constexpr 严格意义上也是更严格的内敛函数返回引用const形参加入 const 同时形参为引用 就不会产生拷贝 同时也不会改这个值

2022-06-12 11:45:33 72

原创 ==== auto、头文件防卫、引用、变量 ====

初始化auto自动推断类型,发生在编译期间,不会影响程序执行的效率头文件防卫如main文件 中调用head1.h head2.h 同时head2.h调用head1.h 为了防止重复包含导致 成员变量重复被定义 用条件constexpr也是一个常量的概念,表示常量表达式 编译时求值,提升效率...

2022-06-11 10:47:11 171

原创 音视频解封装流程分析

重点

2022-02-20 13:14:57 169

原创 音视频解封装流程分析

AAC ADTS分析H264 NALU分析IDRNALU发I帧之前,至少发一次SPS和PPSNALU结构解析NALUFLV格式分析解析FLVFLV headerFLV bodyFLV Tag音频解码过程FFmpeg

2022-02-18 14:00:37 1196

原创 FFmpe入门(基础)

播放器框架常用音视频术语复用器函数简介封装格式相关解码器相关FFmpeg 3.x 组件注册方式FFmpeg 4.x组件注册方式FFmpeg数据结构简介FFmpeg数据结构之间的关系FFmpeg数据结构分析FFmpeg内存模型引用计数AVPacket常用API...

2022-02-15 20:50:58 206

原创 FFmpeg命令实战(下)

ffmpeg拉流直播推流文字水印图片水印FFmpeg生成画中画FFmpeg视频多宫格处理

2022-02-12 20:37:52 1009

原创 FFmpeg命令实战(上)

区别ffmpeg命令查看帮助文档ffmpeg音视频处理转码流程ffmpeg命令分类查询查看具体分类所支持的参数ffplay命令ffplay简单过滤器ffmpeg命令参数说明ffmpeg命令提取音视频数据ffmpeg命令提取像素格式ffmpeg命令提取PCM数据ffmpeg命令转封装生成测试文件开始拼接文件测试不同编码拼接ffmpeg命令图片和视频转换ffmpeg命令GIF和视频转换ffmpeg命令视频录制指定参数录制音视

2022-02-11 17:44:50 1330

原创 音视频入门(基础)

音视频录制原理时钟,使音视频同步,在视频的拖动的时候,要去保证。音视频播放原理RGBYUV1.2.3.YUV420,节省3个UV 6个字节 内存减少一半 1.5视频

2022-02-10 09:52:22 713

原创 算法的一些技巧,(针对于有一定基础的)

1.深度搜索方向数组vector<int> dir = {-1,0,1,0,-1};一个点从四周去dfs切记 dfs首先要判断边界条件下标位置 不在范围内 或者 已经遍历过 再或者 该位置不是我们想要的数据一律跳过 不准继续搜已经遍历过 有两种可能 一种需要回溯 另外一种则不需要vector<vector<bool>> check(n,vector<bool>(n,false));check[i][j] = true;然后去这个点上下

2021-11-25 20:19:38 166

原创 数据结构之算法篇leetcode

刷题我们常会用一些数据结构和对其操作的api,我来总结一番listlistlst1; //创建空listLst1.front() 返回第一个元素Lst1.back() 返回最后一个元素Lst1.pop_front() 删除第一个元素Lst1.pop_back() 删除最后一个元素Lst1.push_back() 在list的末尾添加一个元素Lst1.push_front() 在list的头部添加一个元素map unordered_map初始化map<int,ch

2021-10-30 13:00:42 85

原创 redis 浅谈

缓存网站百分之80的情况下都是在读的,所以频繁的去数据库查询,会导致性能下降,为了避免,使用缓存企业级用户访问数据流程NosqlNosql = Not only sql(非关系型数据库)关系型数据库:行 列 表格(局限性)很多数据类型,用户的个人信息,社交网络,地理位置,这些都不是固定格式,甚至是网状、拓扑,RedisRemote Dictionary Sever 远程字典服务是一个开源key_value的数据库,是当下最热门的Nosql技术之一默认有16个数据库,默认使用第0个可以

2021-10-27 15:02:11 120

原创 git (linux)

git安装进入文件夹 创建仓库git init回到主目录 编辑gitconfig生成ssh密钥在ssh文件中 生成 下图三个文件.pub公钥添加克隆项目git clone写好的代码 git add 文件git commit -m “****”;然后在提交到远程的git push origin 分支名称(master)...

2021-09-28 09:17:45 78

原创 HTTP 高度总结

请求报文请求行,请求头,请求体响应报文状态行,响应头,响应体请求方法:get post 的区别对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)有人说POST 比 GET 安全,从传输的角度来说,他们都是不安全的,因为 HTTP 在网络上是明文传输的,只要在网络节点上捉包,就能完整地获取数据报文。.

2021-09-25 15:48:12 130

原创 数据库进阶

MyISAM InnoDB区别1.前者不支持事务,后者支持事务2.前者支持表级锁,后者支持行级锁3.前者存储表的总行数,后者不存储4.前者采用非聚集索引,B+树的叶子结点存储数据文件的地址,后者,叶子结点存储数据MyISAM 适用于频繁查询,大量的select ,InnoDB可靠性安全性比较高,适合表更新的频繁,大量的insert update;事务innoDB存储引擎 会提供一组用来记录事务的文件每一条DML操作 都会记录到这个文件 中,我们可以 提交这个事务,或者回滚事务提交事务co

2021-09-23 20:21:30 373

原创 数据库 极简概括 30分钟必会 (附上样例)

单表检索基础语句as 作为变名可以省略 (加单引号)select num,num * 1.1 AS new_num from products;select num,num * 1.1 ‘new_num’ from products;where (and or) 条件筛选订单6中总价大于30的商品select * from order_items where order_items == 6 AND quantity * unit_price > 30;in运算符选出’

2021-09-22 17:24:48 97

原创 数据库基本操作

1.如何查看有什么数据库?show databases;2.如何选择数据库? use databasesName;3.如何查看该数据库中有哪些表? show tables;4.如何查询表中的数据? select * from tableName;5.如何退出数据库服务器?exit; 6.如何在数据库服务器中创建自己的数据库? create database databaseName; 7.如何创建一个数据表? 创建一个pet表create TABLE

2021-09-21 21:15:16 101

原创 多进程并发服务器

服务端#include <stdio.h>#include <arpa/inet.h>#include <unistd.h>#include <string.h>#include <stdlib.h>#include <signal.h>#include <wait.h>#include <errno.h>void recyleChild(int arg){ while(1){

2021-09-18 11:10:43 108

原创 网络系统编程

小端和大端小端就是高位字节存内存低地址处,大端就是低位字节存高地址处字节序转换h -host 主机字节序to - 转换成n -network 网络字节序s shortl long套接字通信的一些apiTCP连接第一次握手:客户端向服务端发起连接,客户端SYN标志位 置为1,生成一个随机的确认号seq第二次握手:服务端接受客户端的连接,将ACK标志位置为1,同时回一个确认序号,确认序号是客户端的序号加上1 服

2021-09-18 09:28:06 106

原创 计算机网络 网络层 数据链路层

C/S B/S结构C/S 结构 比如QQ,每一台电脑都需要安装客户端,客户端,向服务端发送请求,服务端向客户端相应。客户端需要经常性的更新和维护。B/S结构 安装一个浏览器即可,客户端向服务端请求,服务端将数据传回客户端,浏览器通过代码渲染画面,当内容需要更新时,只需要更新服务端即可,客户端0维护,但是响应速度会慢,比如4399玩游戏的时候会卡。MAC地址 / IP地址数据链路层负责MAC地址,网络层负责IP地址,每一个网卡会有唯一一个MAC地址,跟身份证一样,每个地址都是独一无二的,用于确认网络设

2021-09-14 21:20:40 367

原创 操作系统 总结精华

对操作系统的理解操作系统他就是一个系统软件,他上为软件服务,下为硬件服务,就是一个控制大局的指挥者,将资源进行合理的分配。他是为用户(咱们)服务的,设计了很多接口,让我们能对系统内部的资源进行操作,对系统内部资源我们能获取其信息的,比如Linux的一系列命令。对于程序运行来讲,操作系统会在运行程序前,会初始化好环境,操作系统几个功能,进程管理、内存管理、文件管理、设备管理。讲讲并发带来的丧失原子性的问题#include<stdio.h>#include<threads.h>

2021-09-12 20:15:40 393

原创 GDB调试

GDB四个功能:-g 加入调试信息GDB启动、退出、查看代码断点操作GDB命令 - 调试命令循环中断点去除掉 才可以Until

2021-09-04 18:02:54 85

原创 Makefile

Makefile:定义了一系列规则来指定哪些文件先编译,哪些文件后编译甚至更复杂的功能,带来的好处是”自动化编译“只需一个make命令规则:Makefile中其它规则一般都是为第一条规则服务的变量:函数:优化 结果末尾同时要删除 *.o...

2021-09-04 15:53:43 52

原创 动态库和静态库制作使用教程

静态库和动态库区别:1.静态库在程序的链接阶段被复制到了程序中;2.动态库在链接阶段没有被复制到程序中,而是在程序执行时由系统动态加载到内存中供程序使用命名规则:1.Linux: libxxx.a2.windows: libxxx.lib静态库的制作:执行 gcc -c add.c div.c mult.c sub.c请看:流程:输入 ar rcs libcalc.a add.o sub.o mult.o div.o生成静态库成功静态库的使用library假设是我们的

2021-09-02 16:48:27 158 1

原创 权限的修改

#include <stdio.h>int main() { int r = 4; int w = 2; int x = 1; int i; int value = 0; char grant[3]; scanf("%s", grant); for (i = 0; i < 3; i++) { if (grant[i] == 'r') { value |= r; } ..

2020-12-24 20:47:02 111

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除