- 博客(224)
- 收藏
- 关注
原创 音视频开发7 音视频转换格式流程
我们的目的是将 源文件转换成目标文件 dest_1280x720.ffmpeg -i的意思是,目标的 音频格式 使用和 源文件一样的格式。的意思是,目标的 视频格式 使用 libx264格式-s的意思是,目标的视频的大小为的意思是,目标文件的名字为 dest_1280x720.flv按照上述标准,那么我们生成的 目标文件, 声音部分 和 视频部分应该是如下的样式的:声音部分编码保持不变,还是 AAC 的。
2024-05-20 21:44:39 168
原创 音视频开发4-补充 FFmpeg 开发环境搭建 -- 在windows 上重新build ffmpeg
本节的目的是在windows 上 编译 ffmpeg 源码,这样做的目的是:在工作中可以根据工作的实际内容裁剪 ffmpeg,或者改动 ffmpeg 的源码。
2024-05-19 17:37:21 177
原创 音视频开发4-补充 FFmpeg 开发环境搭建 -- 配置环境 Ubuntu 22.04.2 LTS +FFmpeg 7.0
ubuntu ffmpeg开发环境搭建
2024-05-12 18:40:31 92
原创 音视频开发5 ffmpeg 命令, ffplay 命令,ffprobe命令
◼ffmpeg超快音视频编码器(类似爱剪辑)◼ffplay简单媒体播放器◼ffprobe:简单多媒体流分析器。
2024-05-06 22:04:20 881
原创 音视频开发4 FFmpeg windows 环境搭建,QT 安装,动态库的搜索路径
其实只要你掌握了FFmpeg,也可以很快上手其他音视频开发库,因为底层原理都是一样的,你最终操作的都是一样的数据,比如MP3、MP4文件。为了让所有平台的开发者都能够学习到音视频开发的通用技术,本教程主要讲解跨平台的音视频开发库。FFmpeg的名字由FF和mpeg组成。
2024-05-06 16:32:08 327 1
原创 音视频开发3 视频基础,图片基础
采样格式通常用A:B:C的形式来表示,比如4:4:4、4:2:2、4:2:0等,其中我们最需要关注的是。24bit:也被称为是:真彩色(True Color),也就是常说的24位真彩。Y、U、V三个分量组成,现在通常说的YUV指的是。YUV的优势是比 RGB拥有更小的体积。一张图片是由多少个 像素 构成的。例如一张图片是由60x50组成的。
2024-05-06 11:55:06 604
原创 音视频开发2 音频基础
对于音频,一定要知道 采样率,采样格式,声道数采样率: Sampling Rate 44100.采样格式:16 bit, 32 bit,声道数: 1为单声道,2 为立体声。
2024-05-06 10:46:10 691
原创 音视频开发1 学习路线
把音视频工作方向总结为9个(可能不够准确,仅是个人观点):直播、传输、算法、视频播放器、流媒体后端、短视频、音频播放、视频编辑、图像处理。常用的视频封装格式有:mp4、mov、mkv、webm、flv、avi、ts、mpg、wmv等。常用的音频编码协议有:MP3、AAC、OPUS、FLAC、AC3、EAC3、AMR_NB、PCM_S16LE。视频包括:帧率、码率、分辨率、像素格式、色彩空间、I帧P帧B帧、DTS与PTS、YUV与RGB、位深与色域、视频编码格式、视频封装格式。
2024-05-06 09:06:23 816
原创 C++11 设计模式7 策略模式 ,Strategy
策略模式(Strategy Pattern)是 C++ 中常用的一种行为设计模式,它能在运行时改变对象的行为。在策略模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为模式。在策略模式中,需要创建表示各种策略的对象和一个行为随着策略对象改变而改变的 Context 对象。策略对象更改 Context 对象的执行算法。: 定义了一个策略的公共接口,所有具体的策略类都需要实现这个接口。这个接口声明了策略对象将执行的操作。: 实现了策略接口,提供了具体的算法或行为。
2024-04-30 16:45:50 708
原创 C++11 设计模式6. 建造者模式,也叫做生成器模式
建造者模式(也被成为⽣成器模式),是⼀种创建型设计模式,软件开发过程中有的时候需要创建很复杂的对象,⽽建造者模式的主要思想是将对象的构建过程分为多个步骤,并为每个步骤定义⼀个抽象的接⼝。,构建过程相对复杂,⽽我们使⽤建造者模式将计算机的构建过程封装在⼀个具体的建造者类中,⽽指导者类则负责指导构建的步骤和顺序。每个具体的建造者类可以负责构建不同型号或配置的计算机,客户端代码可以通过选择不同的建造者来创建不同类型的计算机,这样就可以根据需要构建不同表示的复杂对象,更加灵活。
2024-04-29 22:15:03 802 2
原创 C++11 设计模式5. 原型模式
⼀种创建型设计模式,该模式的核⼼思想是,⽽不是从头开始创建。在原型模式中,通常有⼀个,它被⽤作创建新对象的模板。新对象通过复制原型对象的属性和状态来创建,⽽⽆需知道具体的创建细节。Prototype模式说简单点,就是提供了一个clone, 通过已存在对象进行新对象创建。clone()实现和具体的实现语言相关,在C++中我们通过拷贝构造函数实现。那为啥要写clone的接口来实现这个目的呢?直接使用拷贝构造不香么,知乎中看到陈硕大佬对此的一个回答,觉得豁然开朗。
2024-04-27 22:05:52 702
原创 C++11 数据结构8 树的概念,二叉树的数据结构,二叉树的生成,二叉树的递归遍历(先序,中序,后序),二叉树统计深度,叶子数,二叉树的拷贝与释放,二叉树非递归遍历。选择排序,冒泡排序,插入排序。
上图中的结点数= 13,树的度= 3,树的深度= 4。
2024-04-23 22:54:49 215
原创 C++11 数据结构7 队列的链式存储,实现,测试
队列是两边都有开口,那么在链式情况下,线性表的链式那一边作为对头好呢?从线性表的核心的插入和删除算法来看,如果在线性表链表的头部插入,每次循环都不会走,但是删除的时候,要删除线性表的尾部,要遍历整个 线性表。都差不多。我们考虑到在插入的时候,可能是批量插入,删除只是在某些条件成立的情况下才会删除,因此会将 线性表的头部做为 队列的头部,将线性表的尾部做为队列的尾部。
2024-04-22 20:40:19 256
原创 C++11 数据结构6 栈的链式存储,实现,测试
需要栈 是特殊的线性表,那么我们回忆一下 线性表的链式存储的插入和删除的写法,就应该能理清线性表的头部做为栈顶 合适 还是 线性表的尾部 作为栈顶合适。从这两个算法都能看出,如果要在pos 位置插入元素 或者 删除元素,那么先。,因此我们在线性表的头部做为 栈顶比较合理。
2024-04-21 21:48:21 345
原创 C++11 数据结构5 队列的概念,队列的顺序存储,实现,测试
队列是一种特殊的受限制的线性表。队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出的t(First In First Out)的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操作!假设队列是q=(a1,a2,……,an),那么a1就是队头元素,而an是队尾元素。这样我们就可以删除时,总是从a1开始,而插入时,总是在队列最后。这也比较符合我们通常生活中的习惯,排在第一个的优先出列,最后来的当然排在队伍最后。
2024-04-20 14:00:45 432
原创 C++11 数据结构4 栈的基本概念,栈的顺序存储,实现,测试
它的特殊之处在于限制了这个线性表的插入和删除的位置,它始终只在栈顶进行。这也就使得:栈底是固定的,最先进栈的只能在栈底。定义中说是在线性表的表尾进行插入和删除操作,这里表尾是指栈顶,而不是栈底。首先它是一个线性表,也就是说,栈元素具有线性关系,即前驱后继关系。栈的顺序存储结构简称顺序栈,它是运算受限制的顺序表。因为栈是一种特殊的线性表,所以栈的顺序存储可以通过顺序线性表来实现。,同时附设指针top只是栈顶元素在顺序表中的位置。数组的首地址端做栈顶 还是 做栈底?它是一种特殊的线性表。
2024-04-15 20:22:45 271
原创 C++11 数据结构3 线性表的循环链式存储,实现,测试
概念上:1、任何数据元素都有一个前驱和一个后继2、所有的数据元素的关系构成一个逻辑的环— 实现上:1、循环链表是一种特殊的单链表2、尾结点的指针域保存了首结点的地址。
2024-04-14 13:35:55 140
原创 C++11 数据结构1 线性表的概念,线性表的顺序存储,实现,测试
线性结构是一种最简单且常用的数据结构。线性结构的基本特点是节点之间满足线性关系。本章讨论的动态数组、链表、栈、队列都属于线性结构。他们的共同之处,是节点中有且只有一个开始节点和终端节点。按这种关系,可以把它们的所有节点排列成一个线性序列。但是,他们分别属于几种不同的抽象数据类型实现,它们之间的区别,主要就是操作的不同。线性表是零个或者多个数据元素的有限序列。
2024-04-12 19:43:13 191
原创 C++11 设计模式3. 工厂方法模式
/从上面的代码可以看到,简单工厂模式确实实现了new 出来具体对象, 和 业务逻辑的分离,//但是不符合 "开闭原则"//"开闭原则"说的是代码扩展性问题——对扩展开放,对修改关闭(封闭);//假设过了两天,策划找到我们说:加一种怪物,新怪物类型:M_Beast(野兽类)//那我们要怎么改呢?首先肯定是加一个 M_Beast类了,继承Monster//然后MonsterFactory 中改动 createMonster方法完成。
2024-04-12 11:58:06 393
原创 C++11 设计模式2. 简单工厂模式
/Monster作为父类,M_Undead(亡灵类),M_Element(元素类怪物),M_Mechanic(机械类怪物)。//策划:亡灵类怪物,元素类怪物,机械类怪物:都有生命值,魔法值,攻击力三个属性。我们从实际例子出发,来看在什么情况下,应用简单工厂模式。
2024-04-11 19:55:35 433
原创 C++11 数据结构0 什么是 “数据结构“?数据,数据对象,数据元素,数据项 概念。算法的基本概念 和 算法的度量,大O表示法,空间换时间的代码
/有一个数组,统计这个数组中的数组都是由1-999 组成的,统计这个数组中那个 数字出现的最多,并打印出现的次数。树的知识点是以学好前面的知识为基础的,因此要先学好前面的线性表 相关的。tea[0],tea[1],arr[2],这些都是。性质相同的 "数据元素" 的集合。之间关系的,注意这门课研究的位置和方向。4.一般线性表的链式存储 --循环链表。数据元素中的每一项。2.一般线性表的链式存储 --单链表。3.一般线性表的链式存储 --双链表。特定问题的求解步骤的描述。那么具体要学些啥呢?
2024-04-10 19:01:11 365
原创 C++11 设计模式1. 模板方法(Template Method)模式学习。UML图
在固定步骤确定的情况下,通过多态机制在多个子类中对每个步骤的细节进行差异化实现,这就是模板方法模式能够达到的效果。模板方法模式属于:行为型模式。
2024-04-10 15:51:26 684
原创 C++11 设计模式0. 设计模式的基本概念,设计模式的准则,如何学习设计模式,24种设计模式的分为3大类
模式:指事物的标准样式 或者 理解成 针对特定问题的可重用解决方案。设计模式,是在特定问题发生时的可重用解决方案。设计模式一般用于大型项目中。,设计模式保证所设计的模块之间代码的灵活性和可复用性但是设计模式 : 都需要以增加代码的复杂性为代价。
2024-04-10 11:22:55 344
原创 163 Linux C++ 通讯架构实战17,本地套接字整理对比,IPC:pipe,fifo,mmap,信号,本地套
Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。
2024-04-07 18:09:19 1019
原创 162 Linux C++ 通讯架构实战16,UDP/TCP协议的优缺点,使用环境对比。UDP 服务器开发
所以,通常情况下,使用。UDP则不同,有可能第一次和后面的每次的通路都不同,发包后就不管了,因此可能会丢包,也是因为每次通路都不同,因此顺序可能会发生变化。如下是TCP 在第一次连接成功后的网络,使用蓝色标识,那么后面的数据都是会以蓝色的这条路发送,因此保证了数据的顺序。UDP:无连接的,不可靠的数据包传递,对于不稳定的网络层,采取完全不弥补的通信方式。一些大的公司:腾讯,华为,阿里---都会在应用层使用数据效验,来弥补UDP的不足。由于UDP不需要维护连接,程序逻辑简单了很多,但是UDP协议是不可靠的,
2024-04-07 12:38:06 918
原创 161 Linux C++ 通讯架构实战15,线程池代码分析
1.先是将参数 threadpool 取出来,因为pthread_create使用的时候,会将整个线程池poll做为参数传递过来。2.这里使用的 do while实现的好处是,如果哪里有问题,则可以直接break出来,这里要学习的是这种技巧,实际上是为了避免使用goto 语句。//Tencent8888 start threadpool_create函数的目的初始化线程池,对应的struct是 threadpool_t。pthread_create的第一个参数为传输参数,保存系统给我们分配好的线程ID。
2024-04-06 22:47:19 486 1
原创 160 Linux C++ 通讯架构实战14,epoll 反应堆模型
到这里,我们需要整理一下之前学习的epoll模型,并根据之前的epoll模型,提出弊端,进而整理epoll反应堆模型,进一步深刻理解,这是因为epoll实在是太重要了。
2024-04-05 13:29:57 891
原创 160 音视频开发,主要流媒体协议一览,rtmp 服务器搭建
RTMP(Real Time Messaging Protocol)实时消息传输协议是Adobe公司提出得一种媒体流传输协议,其提供了一个双向得通道消息服务,意图在通信端之间传递带有时间信息得视频、音频和数据消息流,其通过对不同类型得消息分配不同得优先级,进而在网传能力限制下确定各种消息得传输次序。
2024-04-02 21:25:19 890
原创 159 Linux C++ 通讯架构实战14,epoll 函数代码实战
/(3.2)ngx_epoll_init函数的调用(要在子进程中执行)//四章,四节 project1.cpp:nginx中创建worker子进程;//nginx中创建worker子进程//官方nginx ,一个master进程,创建了多个worker子进程;//(i)ngx_master_process_cycle() //创建子进程等一系列动作//(i) ngx_setproctitle() //设置进程标题。
2024-04-02 20:41:04 1072
原创 158 Linux C++ 通讯架构实战13,epoll 原理和函数介绍,epoll_create,epoll_ctl ,epoll_wait
掌握这个三个函数的使用,并结合网上一些大神关于如何自己实现这个三个函数的源码分析,epoll的三个关键函数都干了什么。大神源码://a)c1000k_test这里,测试百万并发的一些测试程序;一般以main();//c)总结:建议学习完老师的epoll实战代码之后,再来学习 这里提到的课件代码,事半功倍;
2024-04-02 13:56:07 1028
原创 156 Linux C++ 通讯架构实战11,listen函数剖析,监听套接字,accept函数,sync攻击,阻塞和非阻塞I/O,同步和异步I/O
要理解好backlog这个参数,我们需要先谈一谈 “监听套接字 队列”的话题;
2024-04-01 22:40:31 270
原创 155 Linux C++ 通讯架构实战10,工具telent 和 wireshark的使用
/是一款命令行方式运行的客户端TCP通讯工具,可以连接到服务器端,往服务器端发送数据,也可以接收从服务器端发送过来的信息;//类似nginx5_1_1_client.c//该工具能够方便的测试服务器端的某个TCP端口是否通,是否能够正常收发数据,所以是一个非常实用,重要,常用的工具,老师要求大家都会;//telnet ip地址 端口号。
2024-03-31 21:25:13 397
原创 154 Linux C++ 通讯架构实战9 ,信号功能添加,信号使用sa_sigaction 回调,子进程添加,文件IO详谈,守护进程添加
在nginx.cxx中的位置如下。
2024-03-30 09:46:48 241
原创 153 Linux C++ 通讯架构实战8 ,日志打印实战,设置时区,main函数中顺序调整
/日志的重要性:供日后运行维护人员去查看、定位和解决问题;//新文件:ngx_printf.cxx以及ngx_log.cxx。//ngx_printf.cxx:放和打印格式相关的函数;//ngx_log.cxx:放和日志相关的函数;实际上这一节的主要内容是实现一个类似printf的函数,以及如何在代码有问题的时候保存日志。这部分将老师的笔记记录在这里,需要消化一下,应该需要花费的时间在1天以上,才能看个7788。
2024-03-29 18:08:29 266
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人