- 博客(57)
- 问答 (2)
- 收藏
- 关注
原创 ffmpeg 视频编码及基本知识
◼ 为了能够在最后熵编码的时候压缩率更高,对于送到熵编码(以行程编码为例)的“像素串”,包含的0越多,越能提高压缩率。为了达到这个目标:◼ 先通过帧内预测或者帧间预测去除空间冗余和时间冗余,从而得到一个像素值相比编码块小很多的残差块。◼ 然后再通过 DCT 变换将低频和高频信息分离开来得到变换块然后再对变换块的系数做量化。
2024-09-04 18:20:02
1042
原创 ffmpeg音频编码
PCM(Pulse Code Modulation,脉冲编码调制)⾳频数据是未经压缩的⾳频采样数据裸流,它是由模拟信 号经过采样、量化、编码转换成的标准数字⾳频数据。描述PCM数据的6个参数:1. Sample Rate : 采样频率。8kHz(电话)、44.1kHz(CD)、48kHz(DVD)。2. Sample Size : 量化位数。通常该值为16-bit。3. Number of Channels : 通道个数。
2024-09-01 21:52:12
1239
原创 ⾳频重采样及基本概念
所谓的重采样,就是改变⾳频的采样率、sample format、声道数等参数,使之按照我们期望的参数输出。比如降低采样率 减少文件占用内存。
2024-09-01 18:22:59
1013
原创 音视频解码 AVIO内存输入模式
下列主要介绍使用avio内存输入模式,进行初始化,数据来源绑定以及读取数据。//1.自定义io 稍后必须用av_free()释放/**2.定义io上下文* 分配并初始化一个AVIOContext对象,用于缓冲式I/O操作。之后必须使用avio_context_free()函数释放该对象。* @param buffer 用于通过AVIOContext进行输入/输出操作的内存块。* @param buffer_size 缓冲区的大小对于性能非常重要。
2024-09-01 13:42:59
680
原创 ffmpeg 音视频解码
1.AVCodecParser:⽤于解析输⼊的数据流并把它分成⼀帧⼀帧的压缩编码数据。⽐较形象 的说法就是把⻓⻓的⼀段连续的数据“切割”成⼀段段的数据。2.FFmpeg提供了两组函数,分别⽤于编码和解码:解码:调⽤avcodec_receive_frame(),如果成功会返回⼀个包含未压缩数据的 AVFrame。编码:调⽤avcodec_receive_packet(),如果成功会返回⼀个包含压缩数据的 AVPacket。
2024-09-01 13:05:47
737
原创 flv格式分析与解复用
FLV(Flash Video)是Adobe公司推出的⼀种流媒体格式,由于其封装后的,⾮常适合于互联⽹上使⽤。⽬前主流的视频⽹站基本都⽀持FLV。采⽤FLV 格式封装的⽂件后缀为.flv。FLV封装格式是由⼀个⽂件头(file header)和 ⽂件体(file Body)组成。其中,FLV body由⼀ 对对的(Previous Tag Size字段 + tag)组成。Previous Tag Size字段 排列在Tag之前,占⽤4 个字节。
2024-08-23 14:32:58
1046
原创 AAC分析
AAC是编码格式,ADTS是一种容器格式,在处理AAC音频时需要注意两者的区别和联系。ADTS格式在每个AAC音频帧的开头添加了一些头部信息,如采样率、声道数等,用于指示这个音频帧的属性。这样可以方便接收方识别和解析音频数据。
2024-08-15 12:16:02
1064
原创 H264分析
GOP 指的就是两个I帧之间的间隔. ⽐较说GOP为120,如果是720 p60 的话,那就是2s⼀次I帧.在视频编码序列中,主要有三种编码帧:I帧、P帧、B帧,如下所示:1. I帧即Intra-coded picture(帧内编码图像帧),不参考其他图像帧,只利⽤本帧的信息进⾏编码。2. P帧即Predictive-codedPicture(预测编码图像帧),利⽤之前的I帧或P帧,采⽤运动预测的⽅式进⾏帧间预测编码。
2024-08-14 19:19:13
733
原创 opencv 编译和使用 报了“无法定位程序输入点xxx于动态链接库”的异常
在执行编译出来的exe时,报了“无法定位程序输入点xxxxxxxxxxxxx动态链接库”的异常。出现这个问题时,应该就是使用的libstdc+±6.dll版本不匹配所导致的。一套流程下来 编译成功,但是程序运行有问题。
2024-08-10 19:08:24
328
原创 git checout 失误后回溯
总结:主要还是记录一下git方法,由于是新手,有时候不知不觉的就把成品代码文件回溯到之前版本。理解:当前完成品代码 切换到上个版本了,完成品代码的信息不在git log内。有时候失误 git checkout xxx 源文件丢失怎么办?
2024-08-09 15:14:02
223
原创 音视频开发 sdl库
◼ SDL_Window 代表了一个“窗口”◼ SDL_Renderer 代表了一个“渲染器”◼ SDL_Texture 代表了一个“纹理”◼ SDL_Rect 一个简单的矩形结构存储RGB和存储纹理的区别:比如一个从左到右由红色渐变到蓝色的矩形,用存储RGB的话就需要把矩形中每个点的具体颜色值存储下来;而纹理只是一些描述信息,比如记录了矩形的大小、起始颜色、终止颜色等信息,显卡可以通过这些信息推算出矩形块的详细信息。所以相对于存储RGB而已,存储纹理占用的内存要少的多理解:以一条美食街举例。
2024-08-05 20:52:48
376
原创 C++20 ranges
什么是 ranges?ranges 的核心概念ranges 的特点ranges 的常用算法 ranges 的应用场景 实践比较使用zip来快速生成map 总结:头文件为C++20引入了一个强大的范围编程框架,提供了丰富的概念、视图和适配器,使得代码更加简洁、表达力强和可组合。这极大地增强了C++标准库在处理序列数据方面的能力。目前还是草案阶段,许多编译器不支持
2024-08-02 10:32:04
396
原创 boost库 内存池
简单轻量:它是一个基础的内存管理工具,实现简单,开销较小。高效:通过维护内存块列表,可以快速分配和回收内存。可定制:提供了许多可配置的选项,如内存块大小、对齐方式等。可重用:可以被上层的内存池实现 (如) 重复利用。内存池管理Boost.Pool 提供了两种主要的内存池实现:和。它们都利用来管理内存块,提高内存利用率和缓存命中率。固定大小对象管理Boost.Pool 专注于管理固定大小的对象,这种设计能够提高内存管理的效率。它使用连续的内存块来存储这些对象,避免了频繁的new和。
2024-07-29 17:54:58
1020
原创 c17 新特性 字面量,变量,函数,隐藏转换等
c17新特性引入了许多新的语法,这些语法特性更加清晰,不像传统语法,语义飘忽不定,比如‘a’你根本不知道是宽字符还是UTF-8 字符。以及测试i++ ++i,最后结果到底是多少。这种问题很大情况是根据编译器的优化进行猜测,不同环境,得出不同结果。而c17对这些问题给出完美的解决方案!官方给出的语法:普通字符字面量: UTF-8 字符字面量: UTF-16 字符字面量: UTF-32 字符字面量: 宽字符字面量: 普通多字符字面量: 宽字符多字符字面量: 普通字符字面量:UTF-8 字符字面量:UTF-16
2024-07-25 14:54:20
952
原创 c17 新特性 字符串和数字转换 charconv
性能优化: 通过避免创建临时的对象,可以大幅提高数字和字符串之间转换的效率。出错处理: 这些函数返回一个由指针和错误代码组成的结构体,可以帮助开发者更好地处理转换过程中可能出现的错误。灵活性: 这些函数可以与各种数值类型和字符串表示一起使用,提高了代码的通用性和可复用性。总的来说,和是C++17中非常有价值的新特性,它们可以帮助开发者编写更高效、更安全的数字和字符串转换代码。对于需要频繁进行这种转换的应用程序来说,使用这些函数可以带来显著的性能优势。
2024-07-25 09:51:57
390
原创 c17新特性 文件操作 filesystem
学习和使用filesystem有利于我们开发出跨平台的应用,而且函数封装的很好,值得我们学习,以最少的时间,做出正确的效果。参考文献写的很详细,如果读取本文还有不懂得,可以进入文献,进一步的学习,开拓视野。
2024-07-24 17:32:57
756
原创 C17 string_view引入
stringview 好处:可读性更强了,开发者不必理会字符串传递规则,直接使用就能写出高性能的代码,把工作重点放在业务上。`std::string_view`虽然有很多优点,但也存在一些潜在的缺点,需要开发者注意:1. 所有权问题:- `std::string_view`不拥有它所引用的字符串数据,因此如果原始字符串数据在`std::string_view`对象的生命周期结束前被销毁,就会出现悬垂引用的问题。开发者需要谨慎管理字符串数据的生命周期。
2024-07-24 11:25:57
902
原创 cpp17 新特性 结构化绑定声明 简化代码!
结构化绑定,可以简化代码的同时,可读性更强。而且语法越来越像脚本语言。不知道在增加代码可读性情况下,性能是否会受影响。有研究性能这方面的大佬可以留下关于性能的评论。
2024-07-23 15:07:31
198
原创 c++新特性左右值引用和引用折叠,完美转发
总的来说,C++11 及以后版本为左值和右值引入了更加细致的概念和相关特性,如左值引用、右值引用、移动语义、完美转发等。这些特性为我们提供了更加灵活和高效的编程方式,使得 C++ 在泛型编程和性能优化方面有了长足的进步。
2024-07-23 14:27:00
589
原创 cpp17 高级编程 std::launder 关键字
在c++17中:以前的 C++ 标准中,只要一个指针指向了合法的内存地址,并且类型正确,那么通过该指针访问对象通常都是定义良好的。但是在 C++17 中,这种假设被放松了。cpp新标准 引入内存操作,随之携带了很多关于内存方面的工具。launder即是与编译器沟通,告知编译器,一个指针所指向的对象已经被重新表示或修改,编译器应该放弃之前的假设。
2024-07-22 16:52:10
528
原创 VsCode 与远程服务器 ssh免密登录
用户目录是动态的,只在root 无法免密king用户1.双方在用户目录下配置密码类型文件类型authorized_keys(自己创建,记录可靠机器的秘钥) id_rsa私人自己秘钥 id_rsa.pub 公开秘钥2.本机vscode配置User rootPort 22IdentityFile ~/.ssh/id_rsa 放的是本机私钥3.本地机子的公钥内容复制到远程连接用户authorized_keys文件。
2024-07-15 13:51:14
371
原创 Qml 图片和加载器操作
qml语言规范有些抽象,事先定义了很多规范,比如渐变效果。使用起来必须查看文档,否则很容易吃眼界的亏Qt demo: 学习qt过程 (gitee.com)
2024-07-12 19:24:37
327
原创 Qt Qml编程 基础部分 认识qml
语义implicitHeight 默认值anchors.bottom 底部基于谁定位radius 圆角down 控件当前是否被按下的状态onClicked 点击松开信号verticalAlignment 对齐方式pixelSize 字体大小关于qml更多知识可学习参考,作者觉得编程学习意义更大。所以文字描述就少一些,只提重点。【QML初学者文档】一问读懂QML基础开发(内附大量简单源码)-CSDN博客Qt demo: 学习qt过程 (gitee.com)
2024-07-12 14:32:55
1008
原创 Qt 统计图编程
总的来说,通过这个示例可以很清楚地了解QT中的图表绘制过程:1. 首先创建相应的图表对象,如QLineChart、QBarChart、QPieChart等。设置标题、属性等。2. 定义数据模型,如QLineSeries、QBarSeries、QPieSeries等,用于存储图表的数据点。3. 添加具体的数据到系列对象中,如坐标点、分类数据、占比等。4. 创建坐标轴对象QValueAxis和QCategoryAxis,配置名称、范围等。5. 将系列与坐标轴添加到图表对象中,实现数据与轴的关联。
2024-07-11 19:44:08
916
原创 Qt QWebSocket网络编程
总的来说,QWebSocket作为QT网络库中的一个组件,提供了一整套用于开发WebSocket客户端和服务端的便利API。它的主要优点有:完全面向对象的设计,API简单易用。与QT网络其他组件高度集成,如SSL/代理支持都很好。采用事件驱动模型,不需要开发者处理底层细节如多线程等。和Qt GUI应用天然集成,消息与界面更新直接调用即可。提供了WebSocket基础规范完整实现,开箱即用方便开发。性能也不错,特别是QT5.10后支持了异步I/O调用方式。
2024-07-11 12:16:08
1190
2
原创 Qt QChart 曲线图表操作
总的来说, QChart 是 Qt Charts 模块中非常强大和灵活的图表组件,可以帮助开发者快速创建各种类型的图表,并提供丰富的定制选项。Qt demo: 学习qt过程 (gitee.com)
2024-07-11 12:15:58
585
原创 Qt http网络编程
第一种:QNetworkAccessManager 网络连接管理员, 2个行为:get/post 获取或提交请求,返回对象QNetworkReply里面有各种连接信息。第二种:QHttpEngine 只管理连接请求,不负责发送,使用QHttpNetworkRequest构建请求,通过QHttpEngine发送。解析返回的QHttpNetworkReply获取响应。http是基于tcp的应用层协议,所以会使用到tcp的类,协议封装 是固定的。主要成员函数设计请求:响应:
2024-07-10 19:26:35
1234
原创 QT TCP多线程网络通信
通过继承重写和信号槽的方式,可以实现连接建立,断开,发送前,发送后等等操作绑定,重写需要去找指定的重写函数,而信号去找指定的信号名。信号槽机制当绑定多个的时候,是按照绑定的顺序执行,因为底层是信号队列,保证顺序。如果对信号槽有兴趣,可以看我之前发布的qt 多线程和网络编程文章。41-clinet-count · jbjnb/Qt demo - 码云 - 开源中国 (gitee.com)41-server-count · jbjnb/Qt demo - 码云 - 开源中国 (gitee.com)
2024-07-10 13:52:40
779
原创 Qt 线程同步机制 互斥锁 信号量 条件变量 读写锁
上述展示了Qt多线程编程的基本知识,与C语言、C++等语言线程大体上一致。线程间的同步和互斥涉及到的知识点大体不差。Qt还可以通过信号和槽连接,在不同线程之间进行通信和同步。Qt多线程编程更需要关注的点是线程的生命周期以及如何更加优雅的退出线程。Qt除了线程还提供了一些模块、线程池等功能和机制来实现并发执行。37-Qmutex-QSempahor · jbjnb/Qt demo - 码云 - 开源中国 (gitee.com)
2024-07-09 17:43:23
1316
原创 Qt 线程 QThread类详解
上述提到的两种使用QThread的方式有以下几点主要区别: (第一种重写 第二种movetoThread)线程的创建方式***线程与工作对象的关系在第一种方式中,线程和工作逻辑是耦合在一起的,因为工作逻辑直接在QThread的子类中实现。在第二种方式中,线程和工作对象是解耦的,工作逻辑被封装在独立的Worker对象中。***信号槽的执行位置:move版本槽函数无论是线程的信号触发还是自定义信号触发,槽函数都在新线程里运行。重写版本信号槽是在主线程执行。线程安全性。
2024-07-08 15:32:11
1318
原创 QT TCP网络通信编程
TCP 服务器的创建和启停在构造函数中创建QTcpServer对象,并连接信号到函数。函数中,监听指定的 IP 和端口,启动 TCP 服务器。函数中,关闭 TCP 服务器,断开所有客户端连接。在主窗口关闭时,调用函数关闭服务器。客户端连接的处理在函数中,获取新连接的QTcpSocket对象。连接客户端连接成功、数据可读、错误、状态变更、断开连接等信号。在信号处理函数中,输出连接信息并处理数据收发。数据收发和协议处理连接信号,处理客户端发送的数据。使用。
2024-07-05 19:03:07
1396
原创 Qt 网络编程 udp通信
4、QUdpSocket类从QAbstractSocket类继承 基本跟QTcpSocket共用大部分的接口函数,主要区别在于 QUdpSocket 以数据报传输数据,不是以连续的数据流,发送方发送数据报使用函数QUdpSocket::writeDataGram(),数据报长度一般不超过 512 个字节,每个数据报包含发送方和接收方的 IP 地址和端口等数据信息。1、UDP(用户数据报协议)是轻量的、不可靠的、面向数据报、无连接的协议,用于可靠性要求不高的场合。: 将指定的数据报发送到指定的主机和端口。
2024-07-05 12:38:30
1046
原创 Qt 网络编程 网络信息获取操作
计算机ip信息获取,主要通过name 交由QhostInfo,然后通过info 获取addr等信息,之后遍历ip表即可获得。
2024-07-04 21:03:36
504
原创 Qt json和xml操作
QDomDocument 文档createElement 创建节点操作QDomElement 节点 多级节点第一个子节点childNodes 全部子节点appendChild添加子节点30-Qjson · jbjnb/Qt demo - 码云 - 开源中国 (gitee.com)31-Qxml · jbjnb/Qt demo - 码云 - 开源中国 (gitee.com)
2024-07-04 12:41:51
666
原创 Qt 文件初始化配置ini/conf类型读写
创建2种方法,1种直接new 第二种先设置参数,再new 对象默认使用预先设置的参数IniFormat是windwos配置文件,后缀是ini unix则是QSettings::NativeFormat .conf读: 使用values ,allkeys读取全部信息写: 使用setValues,因为每次写入缓冲区,需要持久化则调用asyn落盘操作。29-INI · jbjnb/Qt demo - 码云 - 开源中国 (gitee.com)
2024-07-03 20:59:39
375
原创 Qt 基础组件速学 事件过滤器
事件拦截和处理事件过滤器允许我们在事件到达目标对象之前对事件进行拦截和处理。我们可以在函数中检查和处理各种类型的事件,如鼠标事件、键盘事件、paint 事件等。自定义事件处理逻辑通过事件过滤器,我们可以实现各种自定义的事件处理逻辑,如全局性的事件处理、事件委托和事件转发等。这在需要跨控件或跨对象进行事件处理时非常有用。安装和使用我们需要创建一个自定义的事件过滤器类,并实现函数。然后在需要过滤事件的对象上安装事件过滤器,使用函数。常见使用场景全局事件处理。
2024-07-03 19:35:40
752
空空如也
qt creator idm
2024-07-10
Mysql中on与where关系
2023-08-26
G4.9 pool alloc 与SGI STL二级空间配置器内存管理是一样的吗?
2023-08-09
求解字符数组和字符‘带\0’问题
2021-06-12
C++中虚析构函数作用和继承
2021-05-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人