自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 srtp数据加解密 - ortplib、srtplib

ortp_random 是 oRTP 中生成随机数的工具函数,主要用于 RTP/RTCP 协议字段的初始化。其实现应保证足够的随机性,避免预测风险(尤其在安全敏感的 SRTP 场景)。在自定义实现时,建议优先使用操作系统提供的安全随机源。该结构体在初始化 SRTP 会话时使用,确保通信各方采用兼容的加密参数配置,以实现安全的媒体流传输。是 SRTP(Secure Real-time Transport Protocol)库中的一个函数,用于。

2025-05-14 14:56:50 912

原创 流媒体 逐帧叠加混音实现

在音频处理中,混音可以通过FFmpeg或逐帧叠加的方法实现。逐帧叠加法涉及将两个单声道音轨逐帧加和,并使用裁剪防止溢出。在单声道中,一帧等同于一个采样点,而在立体声中,每帧包含左右两个通道的采样值。常见的采样格式包括int16_t和float。C++17引入的std::clamp函数可用于限制值在指定范围内。对于立体声处理,需以2为步长进行,而浮点音频处理则无需担心整数溢出。实际音频文件处理可使用libsndfile、FFmpeg或libav等工具,实时音频场景则适合使用PortAudio、RtAudio、

2025-05-14 10:18:10 391

原创 流媒体协议-RTP、RTCP、RTX、RTFB、NACK

一个标准的 RTP 包由以下部分组成:2RTP(Real-time Transport Protocol)是用于在 IP 网络上传输音频、视频和其他实时数据流的协议。RTP 数据包本身仅携带实际的媒体数据(例如音频帧、视频帧等),但它通常不会单独传输。RTP 数据包通常是通过其他协议封装的,尤其是协议,因为 UDP 是一个无连接、低延迟的传输协议,适合实时数据流。链路层负责将数据帧从源主机传输到目标主机。0x08000x0806网络层的主要协议是在传输 RTP 数据包时,通常使用或。

2025-05-13 17:56:58 982

原创 Protocol Buffers详解

potocol Buffers (简称 protobuf) 是 Google 开发的一种高效的数据序列化格式,用于结构化数据的序列化、反序列化和传输。跨语言支持:支持等多种语言高效二进制格式:比XML/JSON更小、更快强类型接口:通过.proto文件定义数据结构向后兼容:支持字段扩展而不破坏旧代码代码生成:通过编译器生成数据访问类singular: 单数字段(proto3默认)repeated: 数组/列表字段map <K,V>: 映射表字段(proto3特有)oneof。

2025-05-13 17:40:24 974

原创 堆排序C++ 详解

的顺序存储方式存储在一个一维数组中,并满足ki<=k2i+1且ki<=k2i+2(或满足ki>=k2i+1且ki>=k2i+2),其中i=0,1,2,…那么如何才能将一个任意树调整为堆呢?答案很简单,我们只需要从倒数第一个非叶子结点开始,从后往前,按下标,依次作为根去向下调整即可。如果有一个关键码的集合K={k0,k1,k2,…,kn-1},把它的所有元素按。:每个节点的值大于等于其左右孩子。:每个节点的值小于等于其左右孩子。是根据堆的这种数据结构设计的一种。大根堆/小根堆, 向上调整方法。

2025-03-21 11:16:52 731

原创 vbe/vbs 脚本文件-用于批量执行自定义脚本dq

ws。

2025-03-18 20:25:01 358

原创 批处理脚本

如果变量set var2="var2"赋值过,然后将赋值set var2="var2"语句注释掉并运行,依然会输出 var2 is defined, the value is: “var2”,这是因为bat脚本变量不特殊处理的话是全局变量,只要脚本是在同一个cmd命令框运行便会存在,可通过 set var2= 清除。先给变量赋值 set var2=“var2”,则会输出两遍 var2 is defined, the value is: “var2”变量无需声明可直接引用,其值为空字符串,并且大小写不敏感。

2025-03-18 20:15:26 820

原创 QT learning

TBD:、QHBoxLayout : addLayout(layout), addwidget(组件)QLabelQSliderQWidget只设置一个setBaseSize,没有设置fixhight, fixwidth时,layout会根据布局动态变化大小PushBUtton里面可以setMenu:按钮点击,出现菜单QUuid 是 Qt 框架中的一个类,用于生成、操作和表示全局唯一标识符(Universally Unique Identifier, UUID)。

2024-11-15 09:54:54 970

原创 Git learning(dq)

例如: ``` git checkout origin/feature-branch ``` 这会将你的本地分支切换到名为`feature-branch`的远程分支。``` git checkout ``` 这里的``是你要切换到的远程分支的名称,2. 查看远程分支列表: ``` git branch -r ``` 这会列出所有远程分支的列表。. 切换到其他分支: ``` git checkout ```

2024-11-15 09:54:16 964

原创 C++ std::string 整数相互转换

string)

2024-11-15 09:50:40 189

原创 手把手教你用git上传项目到GitHub

如果没有账号,赶紧注册一个。点击Sign in进入登录界面,输入账号和密码登入github。

2024-01-09 15:44:11 1794 1

原创 手动添加Git Bash Here到右键菜单

5、在“open in Git”目录下右键—新建—字符串值“Icon”,双击编辑,其值为“D:\software\Git\mingw64\share\git\git-for-windows.ico”。6、在“open in git”目录下右键—新建—项“command”,其值为 "D:\software\Git\git-bash.exe",需要按照实际路径修改。4、在“shell”目录下右键—新建项“open in Git”,其值为“Git Bash Here",此为右键菜单显示名称。

2024-01-09 15:35:03 801 1

转载 位运算n & (n-1)的妙用

由此可以得出,n和n-1的低位不一样,直到有个转折点,就是借位的那个点,从这个点开始的高位,n和n-1都一样,如果高位一样这就造成一个问题,就是n和n-1在相同的位上可能会有同一个1,从而使((n & (n-1))!n = 10100(二进制),则(n-1) = 10011 ==》n&(n-1) = 10000。10&(-10)为 0010 = 2 所以10的因子中为2的有一个,2^k的形式的为2^1。((n & (n-1)) == 0),则高位必须全为0,这样就没有相同的1。

2023-11-14 14:43:18 715 1

原创 c++ assert() 使用方法

它用于检查“不应该”发生的情况。在运行过程中,如果assert 的参数为假,那么程序就会中止(一般地还会出现提示对话,说明在什么地方引发了assert)。assert的作用是先计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用。这是因为如果出错,比如在执行之前i=100,那么这条语句就不会执行,那么i++这条命令就没有执行。assert宏的原型定义在<assert.h>中,其作用是如果它的。频繁的调用会极大的影响程序的性能,增加额外的开销。

2023-11-14 14:12:00 526 1

转载 异或运算详解

校验和恢复主要利用的了异或的特性:IF a ^ b = c THEN a ^ c = b 应用:一个很好的应用实例是RAID5,使用3块磁盘(A、B、C)组成RAID5阵列,当用户写数据时,将数据分成两部分,分别写到磁盘A和磁盘B,A ^ B的结果写到磁盘C;想办法得到 a 或者 b,假设 结果 为 00001001(F肯定不为0),根据结果 的值我们发现,如果某一位的值为1,则在两个出现一次的数字中,在这一位上,一定一个是1,一个是0。时间复杂度为O(n),当然是线性的,空间复杂度O(1);

2023-11-14 13:54:17 4181 1

转载 内存泄漏检查:windows(CRT) linux(mtrace 内存追踪、valgrind 工具)

【精选】用mtrace定位内存泄漏-CSDN博客内存泄漏定位工具之 valgrind 使用 - 大橙子疯 - 博客园 (cnblogs.com)

2023-11-10 15:01:28 153 1

原创 C++原子操作 - 多线程编程:模板类型std::atomic

s'dsd, 也就是不会被线程调度机制打断的操作, 运行期间不会有任何的上下文切换。原子变量()是C++中用于的强大工具之一。它们提供了一种线程安全的方式来访问和修改共享数据,而。支持各种数据类型,如整数、布尔值、指针等,但是。你可以创建对象,并使用原子操作来读取和修改它们的值。我们使用时应该将 atomic object 进行初始化,因为默认的构造函数并不完全初始化他(并不是因为其初始值不明确,而是其lock未被初始化)。

2023-11-09 15:46:29 327 1

原创 Linux 系统

所有的内核组件都运行在CPU之上。

2023-11-09 15:17:53 51 1

原创 C++中数据的存储分配

数据区BSS(segment 和Data segment)内存映射段(Memory mapping Segment)函数存放在代码区(Text segment)内核空间(Kernel space)

2023-11-09 15:17:26 74 1

空空如也

空空如也

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

TA关注的人

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