Android 知识沉淀
注解
1.枚举类型传参优化
enum WeekDay{SUNDAY, MONDAY}public static void setDay(WeekDay day){}
我们已知,枚举类型是一个对象,对象占用的空间较大,有 12 个对象头+对象的数据部分+8 字节对齐,所以这里可以利用注解优化,方案如下:
public class SerenTest {private int mDay;public static final int SUNDAY = 1;public static final int MONDAY = 2;@IntDef({SUNDAY, MONDAY})@Target(ElementType.PARAMETER)@Retention(RetentionPolicy.SOURCE)@interface WEEKDAY {}public void setDay(@WeekDay int day) {mDay = day;}
}
APT:在 javac编译时,执行注解处理器相关的代码。
反射及应用场景
内存中的布局
CPU --------> 高速缓存(栈区) --------> 内存(方法区、堆区)
1. 创建一个局部变量的过程:在栈中创建 v0变量,加载类到方法区,在堆区创建一个对象,由栈区的指针指向堆区的变量。
2. 非静态的局部变量放在_____区。 (堆区)
3. iput-object v0,v1 --------> 把 v0的值赋值给 v1。 iget-object v0,v1 --------> 读取v1,赋值v0
音视频相关
摄像头采集视频流 --------> yuv格式 --------> h.265 h.264编码 -------->
1. 视频信源编码器
- 划分宏块
- 对每个宏块进行方向预测
- 判断宏块前面有没有编码
- 输出运动矢量
2. 视频复合编码器
- 残差数据:除去左边数据和上面的数据,剩下的就是残差数据
- 输出运动适矢量
3. 传输缓冲器
主要拦截 B帧,作为 B帧的缓冲区
编码经验
- 第一帧一定是 I帧,第二帧一定是 P帧
- 硬编硬解码是通过元器件 DSP芯片 硬件来进行的,不是通过 GPU硬编硬解的,GPU主要负责显示特效,显示屏幕,
- yuv数据无法直接显示在surfaceView上,surfaceView只能播放 RGB 数据,所以在显示之前只能通过 GPU 把 YUV 转换成 RGB。
YUV
yuv 420 y:u:v的比例为 4:2:1
yuv 422 y:u:v的比例为 2:1:1
yuv 444 y:u:v的比例为 1:1:1
NV21编码 NV21(安卓设备采集到的)
需要先将 NV21数据转化为NV12,然后再旋转 90 度,之后才可以看到竖屏的画面。
前面是y,后面 u和 v交替排列
YUV I420编码 NV12(网络、iOS、Linux)
I帧、B帧、P帧
- I 帧:100 k以上(I帧越多,文件越大)常见的 I帧间隔是 1s,2s
- B帧:0-35k (B帧越多、文件越小)
- P帧:40-80k
什么时候编码成 I帧、B帧、P帧?
B帧的编码条件:与 I帧的相似程度高达 95% 以上采用 B帧编码。
P:编码程度高达 70% 以上采用 P帧编码。
帧类型分隔符
I 帧的帧类型分隔符是 0x65
P帧的帧类型分隔符是 0x41
B:0x01
MedieCodec
1. 获取 sdcard的读写权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
pps 基础配置帧 68
- 显示格式 yuv444 420 421
- 宽度个高度
sps 全量配置帧 67
sps pps都是重复出现的,丢失了视频无法播放
queueInputBuffer和dequeueInputBuffer区别
H.264 NALU 信息
占用一个字节。
- forbidden_zero_bit(1): 该帧是否可用。0:可用 1:不可用
- nal_unit_type(5):帧类型,I B P
- nuh_temporal_id_plus1(2) :帧的重要性(如I帧 关键帧为 11,P为 10,B为 0)
H.265 NALU 信息
占用两个字节
- forbidden_zero_bit(1): 该帧是否可用。0:可用 1:不可用
- nal_unit_type(6):帧类型,I B P
- nuh_layer_id(6):帧的 id
- nuh_temporal_id_plus1(3) :帧的重要性(如I帧 关键帧为 11,P为 10,B为 0)
H.265和 H.264总结
- avc有 8 种预测方向,hevc有35 种预测方向。
- 在码流传输的时候,通过对齐切片,再传输,划分如下:
切片:
mb_type:
avc预测方向:
hevc预测方向
哥伦布编码
取到正确值的前提下,能正确编码。
相关文章:
Android 知识沉淀
注解 1.枚举类型传参优化 enum WeekDay{SUNDAY, MONDAY}public static void setDay(WeekDay day){}我们已知,枚举类型是一个对象,对象占用的空间较大,有 12 个对象头对象的数据部分8 字节对齐,所以这里可以利用注解优化ÿ…...
KiActivateWaiterQueue函数和Queue->Header.WaitListHead队列等待列表的关系
第一部分: if (Thread->ApcState.KernelApcPending && (Thread->SpecialApcDisable 0) && (Thread->WaitIrql < APC_LEVEL)) { } else { // // Insert wait block in ob…...
代码学习总结(一)
代码学习总结(一) 这个系列的博客是记录下自己学习代码的历程,有来自平台上的,有来自笔试题回忆的,主要基于 C 语言,包括题目内容,代码实现,思路,并会注明题目难度&…...
设计模式 --- 策略模式
策略模式(Strategy Pattern)是一种 行为型设计模式,用于动态切换算法或策略,使得算法可以独立于客户端变化。它通过封装算法策略并使其可互换,提升了系统的灵活性和扩展性,尤其适用于需要多种…...
c++进阶之----智能指针
1.概念 在 C 中,智能指针是一种特殊的指针类型,它封装了裸指针(raw pointer)的行为,并通过 RAII(Resource Acquisition Is Initialization,资源获取即初始化)机制自动管理动态分配的…...
08-JVM 面试题-mk
1.JVM 的各部分组成 知道JVM 的好处:知道java 运行机制,排查问题的能力增加,比如内存泄漏、CPU飙高 JVM 是什么:Java Virtual Machine缩写,Java程序的运行环境(java二进制字节码的运行环境) 好处: 一次编写,到处运行自动内存管理,垃圾回收机制从图中可以看出 JVM …...
MTK7628基于原厂的mtk-openwrt-sdk-20160324-8f8e4f1e.tar.bz2 源代码包,配置成单网口模式的方法
一、配置. 在SDK工程下,运行make kernel_menuconfig,如下图所示: Ralink Module --->选上“One Port Only”,如下图所示: 如果P0网口实现WAN口,就配置成W/LLLL,否则就配置成LLLL/W. 二、修改网口的原代…...
青少年编程与数学 02-016 Python数据结构与算法 15课题、字符串匹配
青少年编程与数学 02-016 Python数据结构与算法 15课题、字符串匹配 一、字符串匹配问题的基本概念(一)定义(二)术语 二、暴力匹配算法(Naive String Matching)(一)算法逻辑…...
基础层数据从kafka读取写入hbase的优化方案
背景: 上游kafka的topic只有一个分区,所以spark在消费的时候,无论设置的executor数有多少,最终只有一个executor在执行,如果不指定executor num的话,默认是开启两个executor,有一个executor的资源是浪费的,例如下面显示的情况,其实只有一个executor是active的状态. 在消费的时…...
thingsboard3.9.1编译问题处理
问题1: [ERROR] Failed to execute goal org.thingsboard:gradle-maven-plugin:1.0.12:invoke (default) on project http: Execution default of goal org.thingsboard:gradle-maven-plugin:1.0.12:invoke failed: Plugin org.thingsboard:gradle-maven-plugin:1.…...
Adobe Photoshop 2025 Mac中文 Ps图像编辑
Adobe Photoshop 2025 Mac中文 Ps图像编辑 一、介绍 Adobe Photoshop 2025 Mac版集成了多种强大的图像编辑、处理和创作功能。①强化了Adobe Sensei AI的应用,通过智能抠图、自动修复、图像生成等功能,用户能够快速而精确地编辑图像。②3D编辑和动画功…...
什么是VLA
视觉-语言-动作(VLA)技术综述:迈向具身智能的未来 1. 引言 随着人工智能从单一模态感知迈向多模态交互,视觉-语言-动作(Vision-Language-Action, VLA) 技术逐渐成为连接感知、推理与物理行动的核心桥梁。V…...
数据结构:C语言版严蔚敏和解析介绍,附pdf
《数据结构:C语言版(第2版)》严蔚敏李冬梅吴伟民.pdf 《数据结构:C语言版》严蔚敏,李冬梅.pdf 《数据结构C语言第2版习题解析与实验指导》李冬梅.pdf 「《数据结构:C语言版(第2版 )》…...
C++线段树详解与实现技巧
📚 C++线段树详解与实现技巧 线段树(Segment Tree)是一种高效处理 区间查询 和 区间更新 的数据结构,时间复杂度为 O(log n)。本文结合代码实例,详解其核心原理与实现细节。 🌳 线段树结构特点 完全二叉树:使用数组存储,父子节点关系通过下标计算。区间划分:每个节…...
202527 | RabbitMQ-基础 | 队列 | Direct + Fanout + Topic 交换机 | 消息转换器
RabbitMQ RabbitMQ 架构与核心概念详解 一、整体架构图 #mermaid-svg-UTlKmvHL7RNWK6vu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-UTlKmvHL7RNWK6vu .error-icon{fill:#552222;}#mermaid-svg-UTlKmvHL7RNWK6v…...
【学习笔记】服务器上使用 nbconvert 将 Jupyter Notebook 转换为 PDF
1. 环境准备:安装必要工具 在服务器终端运行以下命令,确保依赖已安装: (1) 安装 nbconvert 和 pandoc pip install nbconvert pandoc (2) 安装 LaTeX(推荐 TeX Live) # Ubuntu/Debian sudo apt-get update sudo a…...
List、Set集合通过Stream流求和
目录 一、泛型为Integer、Long、Double、BigDecimal求和 二、泛型为实体类 对单个属性求和 对多个属性分别分组求和 并返回聚合后的对象 多字段乘积求和(基本数据类型) 多字段乘积求和(BigDecimal) 对对象中的多个字段求和…...
微软VSCode 能否击败 Cursor 和 Windsurf?
微软是否能利用平台优势和许可限制来阻止竞争对手? AI 代码编辑器之战加剧 蓬勃发展的 AI 代码编辑领域竞争日益激烈,这个最具变革性和盈利性的新技术领域正在适应相互间的竞争。Visual Studio Code 目前是最主导的代码编辑器。 “根据 Stack Overflow 调查,Visual Studi…...
VSCode会击败Cursor和Windsurf吗?
VSCode 会击败 Cursor 和 Windsurf 吗?微软能不能靠自己的地盘优势和规则限制打压对手?答案是"能",但他们真的会这么干吗? Cursor & Windsurf vs VSCode Copilot 大PKAI编程工具大战越来越激烈现在最火最赚钱的AI…...
机器学习(4)—— K近邻算法
文章目录 1. K近邻算法(K-Nearest Neighbors, KNN)原理1.1. K近邻算法是什么算法?1.2. 核心思想 2. K近邻算法的步骤2.1. 选择K值2.2. 计算距离2.3. 选择最近邻:2.4. 做出预测: 3. K值的选择4. 数据标准化5. 优缺点6. …...
深入解读 React 纯组件(PureComponent)
什么是纯组件? React 的纯组件(PureComponent)是 React.Component 的一个变体,它通过浅比较(shallow comparison)props 和 state 来自动实现 shouldComponentUpdate() 方法,从而优化性能。 核心特点 1. 自动浅比较: PureCompon…...
常见MQ及类MQ对比:Redis Stream、Redis Pub/Sub、RocketMQ、Kafka 和 RabbitMQ
常见MQ及类MQ对比 基于Grok调研 Redis Stream、Redis Pub/Sub、RocketMQ、Kafka 和 RabbitMQ 关键点: Redis Pub/Sub 适合简单实时消息,但不持久化,消息可能丢失。Redis Stream 提供持久化,适合需要消息历史的场景,但…...
202528 | RabbitMQ-高级 | 消息可靠性 | 业务幂等性 | 延迟消息
消息可靠性 RabbitMQ发送者可靠性 一、发送者重连机制 #mermaid-svg-gqr6Yr5UNZX87ZDU {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-gqr6Yr5UNZX87ZDU .error-icon{fill:#552222;}#mermaid-svg-gqr6Yr5UNZX87ZD…...
Java EE期末总结(第六章)
一、IoC 1、Bean装配流程 IOC装配流程在代码中的对应就体现在Service这个注解 依赖注入在代码中体现在 ,比如 Resource UserService userService 二、AOP 简化流程,为程序员简便操作 tmd编不下去了我自己看视频都没理解md不弄了; 给两个…...
ASP.NET Core 性能优化:内存缓存
文章目录 前言一、什么是缓存二、内存缓存三、使用内存缓存1)注册内存缓存服务2)注入与基本使用3)高级用法GetOrCreate(避免缓存穿透)异步方法:GetOrCreateAsync(避免缓存穿透)两种过…...
Go小技巧易错点100例(二十六)
本期分享: 1. string转[]byte是否会发生内存拷贝 2. Go程序获取文件的哈希值 正文: string转[]byte是否会发生内存拷贝 在Go语言中,字符串转换为字节数组([]byte)确实会发生内存拷贝。这是因为在Go中,字…...
《算法笔记》3.5小节——入门模拟->进制转换
1022 D进制的AB #include <iostream> using namespace std; int maxn32;int main() {int z[maxn],num0,a,b,d;cin>>a>>b>>d;int resab;do{z[num]res%d;resres/d;}while(res);for (int i num-1; i >0 ; i--) {cout<<z[i];}return 0; }问题 A:…...
【MQTT-协议原理】
MQTT-协议原理 ■ MQTT-协议原理■ MQTT-服务器 称为"消息代理"(Broker)■ MQTT协议中的订阅、主题、会话■ 一、订阅(Subscription)■ 二、会话(Session)■ 三、主题名(Topic Name&a…...
JWT认证服务与授权 .netCore
1.实现流程图 2.认证信息概述 Header:System.IdentityModel.Tokens.Jwt.JwtHeader Payload: System.IdentityModel.Tokens.Jwt.JwtPayload Issuer: http://localhost:7200 Audience: http://localhost:7200 Expiration: 2025/4/11 15:06:14 Claim - Type: http://schemas…...
编译原理 实验二 词法分析程序自动生成工具实验
文章目录 实验环境的准备实验实验预备知识分析案例所要做的任务实战 实验环境的准备 安装flex 安装MinGW MinGW Installation Manager页面 apply changes 下载比较耗时 只看到了一个文件,复制过去 配置环境变量 使用gcc -v检验是否安装完成 实验 实验预备知识…...
【C++初学】课后作业汇总复习(一)概述、输入输出、类的入门——理解封装
一、概述、输入输出、类的入门——理解封装 - 1. ab input two number output sum of a and b; #include <iostream>using namespace std;int main() {int a 0;int b 0;cin >> a >> b;cout << ab <<endl;return 0; }2.输入1~7任意一个整数&…...
数学建模:针对汽车行驶工况构建思路的延伸应用
前言: 汽车行驶工况构建的思简单理解为将采集的大量数据进行“去除干扰、数据处理,缩减至1800S的数据”,并可达到等效替换的目的,可以使在试验室快速复现;相应的解决思路、办法可应用在 “通过能量流采集设备大量采集…...
Qt 之opengl shader language
着色器示例代码 实际运行效果...
dolphinscheduler创建文件夹显示存储未启用的问题--已解决
只要修改api-server/comf/common.properties和standalone-server/conf/common.properties里面的内容就可以了,应为你要靠standalone-server这个服务启动dolphinscheduler-web,其他就算怎么改你重启dolphinscheduler的时候系统也不会识别新的common.prope…...
解密 Linux 线程:多线程编程与资源管理
个人主页:chian-ocean 文章专栏-Linux 前言: 在Linux中,线程 是一种轻量级的执行单元,它是进程的一部分。多个线程可以在同一个进程内并行执行任务,通常它们共享该进程的资源,如内存空间、文件描述符等。…...
Node.js net模块详解
Node.js 的 net 模块提供了基于 TCP 或 IPC 的网络通信能力,用于创建服务器和客户端。以下是 net 模块的核心 API 详解,包含类、方法、事件及示例。 1. 模块引入 const net require(net);2. 核心类与方法 2.1 net.Server 类 用于创建 TCP 或 IPC 服务…...
Node.js中fs模块详解
Node.js 中 fs 模块(非 Promise)API 详解 Node.js 的 fs 模块提供了同步和异步的文件系统操作。以下是非 Promise 版本的 API 详解: 1. 文件读取操作 const fs require(fs);// 异步读取文件 fs.readFile(file.txt, utf8, (err, data) >…...
Mouse without Borders – 用一套鼠标 / 键盘控制四台电脑
同时操控 2 台电脑,只需一个鼠标和键盘!完全免费,由微软官方提供 | 零度解说_哔哩哔哩_bilibili Mouse Without Borders 简介 Mouse Without Borders(无界鼠标)是由微软开发的免费键鼠共享工具,支持在局…...
《车辆人机工程-汽车驾驶操纵实验》
汽车操纵装置有哪几种,各有什么特点 汽车操纵装置是驾驶员直接控制车辆行驶状态的关键部件,主要包括以下几种,其特点如下: 一、方向盘(转向操纵装置) 作用:控制车辆行驶方向,通过转…...
使用DaemonSet部署集群守护进程集
使用DaemonSet部署集群守护进程集 文章目录 使用DaemonSet部署集群守护进程集[toc]一、使用DaemonSet部署日志收集守护进程集二、管理DaemonSet部署的集群守护进程集1.对DaemonSet执行滚动更新操作2.对DaemonSet执行回滚操作3.删除DaemonSet 一、使用DaemonSet部署日志收集守护…...
破解升腾c10,改造成下载机(第二篇:获取xterm终端)
当c10刷好华为ct3100系统后,就开始获取xterm终端,然后再安装entware. 第一步:获取xterm终端。 点击桌面左下角的工具图标 再点browser 输入百度网址,访问! 然后再将网页另存为~~~…...
浏览器多开
使用浏览器的用户功能,创建多个用户即可完成浏览器多开的需求,插件等相对独立 需要命名 然后就可以通过多个用户切换来实现多开了,不同任务选择不同用户...
使用Python实现的音符生成和节拍器程序
推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 **摘要****先决条件****设置**生成音符频率播放音符节拍器合并结论摘要 节拍器和随机音符生成器各有用途,但单独使用时功能有限。本…...
【生活相关-日语-日本-东京-留学生-搬家后或新入驻-水道局申请饮用水(1)-办理手续】
【生活相关-日语-日本-东京-搬家后-水道局申请饮用水-办理手续】 1、前言2、情况说明(1)他人代办(2)打电话(3)网络申请(4)你将会面临什么,主要步骤(5…...
PyTorch模型构造实战:从基础到复杂组合
本文通过多个示例演示如何使用PyTorch构建不同类型的神经网络模型,涵盖基础多层感知机、自定义块、顺序块以及复杂组合模型。所有代码均附带输出结果,帮助读者直观理解模型结构。 1. 多层感知机(MLP) 使用nn.Sequential快速构建一…...
【高性能缓存Redis_中间件】一、快速上手redis缓存中间件
一、铺垫 在当今的软件开发领域,消息队列扮演着至关重要的角色。它能够帮助我们实现系统的异步处理、流量削峰以及系统解耦等功能,从而提升系统的性能和可维护性。Redis 作为一款高性能的键值对数据库,不仅提供了丰富的数据结构,…...
并发编程--互斥锁与读写锁
并发编程–互斥锁与读写锁 文章目录 并发编程--互斥锁与读写锁1. 基本概念2. 互斥锁2.1 基本逻辑2.2 函数接口2.3示例代码12.4示例代码2 3. 读写锁3.1 基本逻辑3.2示例代码 1. 基本概念 互斥与同步是最基本的逻辑概念: 互斥指的是控制两个进度使之互相排斥&#x…...
Linux下Docker安装超详细教程(以CentOS为例)
前言 Docker 已成为现代应用开发和部署的标配工具。本教程将手把手教你 在 CentOS 系统上安装 Docker,涵盖从环境准备到验证安装的全流程,并解决常见问题。无论你是运维工程师还是开发者,均可快速上手。 一、环境要求 操作系统 CentOS 7 或更…...
Ubuntu 服务器版本 设置socket服务(Python)
1. 确定 Socket 类型 Socket 服务可以是: 网络 Socket:基于 TCP/UDP 协议(如 Web 服务器、API 服务)。 Unix Domain Socket:本地进程间通信(如 Docker、MySQL 默认使用)。 2. 编写一个简单的 Socket 服务示例(Python) 以 Python 为例,创建一个 TCP Socket 服务:…...
对于GAI虚假信息对舆论观察分析
摘要 生成式人工智能(Generative Artificial Intelligence, GAI)的技术革新重构了信息生产机制,但也加剧了虚假信息对舆论生态的异化风险。 关键词:生成式人工智能、虚假信息、舆论异化、智能治理 一、生成式人工智能虚假信息下…...