APP
文章平均质量分 87
图王大胜
一名Android FWK程师;专注系统思维
展开
-
系统化学习 H264视频编码(06)哥伦布编码解读
视频编码中的哥伦布编码是一种用于压缩数据的熵编码技术,它特别适合于编码那些具有几何分布特性的数值,比如在视频编码中常见的变换系数。哥伦布编码能够有效地表示这种类型的数据,因为它可以为频繁出现的较小数值分配较短的编码,而不常见的较大数值则分配较长的编码。原创 2024-08-06 00:12:15 · 994 阅读 · 0 评论 -
系统化学习 H264视频编码(05)码流数据及相关概念解读
针对本文,我们主要研究 H.264码流数据结构及相关概念。包括VCL层(Video Coding Layer,视频数据编码层)及其相关概念宏块、片等,NAL层(Network Abstraction Layer,视频数据网络抽象层)及其相关概念SODB、RBSP、EBSP和NALU等;NALU详细信息解读以及Annex格式和RTP格式解读。原创 2024-08-04 22:20:34 · 920 阅读 · 0 评论 -
Android APP 音视频(03)CameraX预览与MediaCodec编码
CameraX 是一个由 Google 开发的 Android Jetpack 库,旨在简化 Android 应用中的相机操作。它提供了一个一致的 API 界面,使得开发者可以更容易地在应用中集成和使用相机功能。简化的 API:CameraX 提供了一个简单且一致的 API,使得开发者可以轻松地访问相机硬件,而无需处理底层的复杂性。兼容性:CameraX 支持从 Android 5.0(API 级别 21)到最新版本的 Android 系统,确保了广泛的设备兼容性。预览和捕获。原创 2024-07-23 23:26:03 · 1286 阅读 · 0 评论 -
Android APP 音视频(01)MediaCodec解码H264码流
H.264,也被称为MPEG-4 AVC(Advanced Video Coding),是一种广泛使用的数字视频压缩标准,主要用于视频编码。H.264标准由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)共同开发,旨在提供比之前的视频编码标准更高的数据压缩效率。H.264是一种基于块的编码技术,它将视频帧分为多个宏块(Macroblocks,MBs),每个宏块包含亮度信息和色度信息。帧类型,I帧(Intra-coded frames)原创 2024-07-23 00:12:22 · 1989 阅读 · 0 评论 -
Android APP 基于RecyclerView框架工程(知识体系积累)
说明:这个简单的基于RecyclerView的框架作用在于自己可以将平时积累的一些有效demo整合起来(比如音视频编解码的、opengles的以及其他也去方向的、随着项目增多,工程量的增加,后期想高效的分析和查找并不容易),不用搞太多的工程,不像多个工程过于分散也占空间。原创 2024-07-21 21:20:28 · 506 阅读 · 0 评论 -
Android APP 音视频(02)MediaProjection录屏与MediaCodec编码
这里主要是使用MediaProjection获取屏幕数据,将数据通过mediacodec编码输出到存储卡上。这里主要介绍 MediaProjection的基本原理和流程、 MediaCodec编码的简单说明,便于对代码有所理解。原创 2024-07-21 20:34:57 · 1687 阅读 · 0 评论 -
Android APP CameraX应用(02)预览流程
CameraX 是 Android 上的一个 Jetpack 支持库,它提供了一套统一的 API 来处理相机功能,无论 Android 设备上的相机硬件和 Android 版本如何。CameraX 旨在简化相机应用的开发流程,提供更好的兼容性和扩展性。添加依赖: 在项目的文件中添加 CameraX 库的依赖。获取 CameraX 核心实例: 使用CameraX的getCameraProvider()方法获取 CameraProvider 实例,这是访问 CameraX 功能的基础。原创 2024-07-21 17:58:26 · 1139 阅读 · 0 评论 -
系统化学习 H264视频编码(03)数据压缩流程及相关概念
说明:我们参考黄金圈学习法(什么是黄金圈法则?->模型 黄金圈法则,本文使用:why-what)来学习音H264视频编码。本系列文章侧重于理解视频编码的知识体系和实践方法,理论方面会更多地讲清楚 音视频中概念的起源以及各个概念的联系。知其然,知其所以然。同时更强调知识系统的建立。针对本文,我们主要讲研究 H.264数据压缩的流程及其相关概念。H.264数据压缩的目的只有一个,压缩压缩再压缩,减少视频数据大小的同时尽可能地保证图像质量。原创 2024-07-10 20:15:01 · 1227 阅读 · 0 评论 -
系统化学习 H264视频编码(02) I帧 P帧 B帧 引入及相关概念解读
针对本文,我们主要讲清楚 I帧、P帧、B帧的概念及引入原因,基于I帧、P帧、B帧 展开的其他概念解读,比如GOP概念,就是基于I帧、P帧、B帧的理解基础上,搞了一个以I帧为分割点的序列。而后面提到的运动补偿和运动矢量是P帧和B帧的关键技术,用于提高视频编码的压缩效率。原创 2024-07-06 23:37:49 · 2701 阅读 · 0 评论 -
系统化学习 H264视频编码(01)基础概念
(what)H.264编码作为当前广泛使用的视频编码标准,其发展历史可以追溯到早期的视频编码技术。以下是从H.261和MPEG-1一直到H.264、H.265的演进历史。这里用一张图来表示视频编码发展史,具体如下所示:1988年,国际电信联盟ITU-T发布了H.261标准,这是首个为视频会议和可视电话等应用设计的低码率视频编码标准。H.261采用了基于波形的混合编码方法,引入了宏块(Macroblock)和基于宏块的运动补偿(Motion Compensation),奠定了现代视频编码的基础。原创 2024-07-06 23:37:46 · 1354 阅读 · 0 评论 -
ijkplayer编译 android版本
至此,就可以成功编译出来ijkplayer工程。注意:这里编译出来的不仅仅是so库,本身就是一个Android Studio可以直接打开的工程。至此,就可以成功编译出来依赖的ffmpeg库。环境安装和配置完成后,开始编译ijkplayer项目。原创 2024-06-14 05:00:00 · 745 阅读 · 2 评论 -
Android APP 剪切板应用
用户可以通过常见的复制和粘贴操作,在不同的应用之间传递数据。该设计考虑到了易用性和灵活性,使得开发者可以轻松地为自己的应用实现复制粘贴功能,同时它也强调了数据的安全性,确保剪贴板内容不会被未授权的应用访问。对于URI列表,使用的是text/uri-list,而对于Intent数据,则使用text/vnd.android.intent。当一个新的ClipData对象被放入剪贴板时,旧的ClipData对象将被自动清除,这意味着需要确保每次只放置一个有效的ClipData对象在剪贴板上。原创 2024-05-11 19:40:11 · 1487 阅读 · 0 评论 -
ALVR 编译 windows && android [Streamer &Client]
说明:因为在实际操作中发现,在真机上直接编译会影响环境变量和其他项目的编译,因此这里使用docker的编译,也更为稳妥。原创 2023-12-19 21:30:00 · 877 阅读 · 0 评论 -
Android Native崩溃信息分析和 工具(addr2line和ndkstack)使用
针对native的崩溃信息。一般来讲,较快的方式是直接检索到backtrace,然后通过分析和使用工具addr2line和 ndk-stack等定位到出问题的地方。原创 2023-11-15 20:48:55 · 1879 阅读 · 0 评论 -
Android 理解/生成/使用/查看 签名(V1-V4)
签名的生成主要通过Android Studio/工具keytool使用(普通签名)或者Android Framework生成(主要针对系统签名)。这里的Keytool是Android开发工具包(Android SDK)中的一个工具,用于生成和管理数字证书、密钥对和证书请求。它是一个命令行工具,用于执行与密钥和证书相关的操作,例如创建密钥存储、生成密钥对、导出证书等。生成密钥对:Android Keytool可以生成公钥和私钥对,这对密钥可以用于加密、解密和数字签名等操作。原创 2023-10-27 15:08:48 · 3622 阅读 · 0 评论 -
android 性能分析工具(01)systrace
systrace工具是 Android 4.1 推出后引入的分析设备性能的主要基础工具。systrace由Google Android和Google Chrome共同开发,是Catapul开源项目的一部分。 但本质上是是对 Linux Kernel中 ftrace 的封装。应用进程需要利用 Android 提供的 Trace 类来使用 Systrace。总而言之,google想针对APP开发 自己弄一套性能分析工具 方便使用,systrace是开始,后面推出的Perfetto工具等均是如此,到了androi原创 2022-05-03 23:46:13 · 2227 阅读 · 0 评论 -
Flutter Dart语言(05)异步
该系列教程主要是为有一定语言基础 C/C++的,快速学习一门新语言所采用的方法,属于在C/C++基础上扩展新语言的模式。原创 2023-08-06 19:53:25 · 2434 阅读 · 0 评论 -
Flutter Dart语言(04)库操作
/自定义库引入,xxx为本地路径//系统库引入。原创 2023-08-06 19:53:35 · 965 阅读 · 0 评论 -
Flutter Dart语言(03)面向对象总结
该系列教程主要是为有一定语言基础 C/C++的程序员,快速学习一门新语言所采用的方法,属于在C/C++基础上扩展新语言的模式。原创 2023-08-06 00:58:10 · 1252 阅读 · 0 评论 -
flutter实战(01)windows桌面版 修改应用logo、名称、显示位置、显示大小
只需要在flutter项目/windows/runner/resources目录下替换原来的应用图标 app_icon.ico即可。原创 2023-07-26 19:27:53 · 2681 阅读 · 0 评论 -
flutter(01) windows桌面版 编译环境安装指南
之后解压到C:\Users\XXX\data(这里以该路径为例,但可以为其他自定义路径)目录下,在这里主要是为了能够使用flutter相关命令,因此需要配置windows环境变量:将路径 C:\Users\XXX\data\ flutter\bin 加到windows 环境变量中。查看flutter支持的设备,有windows即可至此整个环境安装的 核心就完成了,此时就可以使用flutter命令行来构建整个APP了.原创 2023-07-24 16:00:03 · 1297 阅读 · 0 评论 -
Flutter Dart语言(02)运算符&函数&基本语句总结
该系列教程主要是为有一定语言基础 C/C++的程序员,快速学习一门新语言所采用的方法,属于在C/C++基础上扩展新语言的模式。原创 2023-07-17 15:02:28 · 588 阅读 · 0 评论 -
Flutter Dart语言(01)环境安装&基础语法总结
Dart亮相于2011年10月10日至12日在丹麦奥尔胡斯举行的GOTO大会,初衷是用于web、server、移动应用、物联网等领域的开发,语法跟C语言差不多、是面向对象、单继承的语言。最开始是为解决JS的缺陷,但Node.js突然出现让JS可以在移动端跑起来,在这之后Dart就专注于跨平台了。后来搞出来一个移动开发框架Flutter,弯道超车进入移动端开发领域。在google的新系统Fuchsia 中大部分 UI 界面使用的是 Flutter,。dart的权重就直接上来了。原创 2023-07-17 12:44:29 · 743 阅读 · 0 评论 -
Android系统基础(01)简介
1 Android基本架构概述一共是Application | framework | (HAL&&Dalvik/ART) | (Kernel&&Driver) 四层,经典架构图如下: Android四层的含义分别如下:APP:该层提供一些核心应用程序包,例如电子邮件、短信、日历、地图、浏览器和联系人管理等。同时,开发者...原创 2020-03-21 16:02:42 · 1336 阅读 · 0 评论 -
Android APP OpenGL ES应用(02)GLSurfaceView 纹理
1 纹理解读@1 纹理概念:纹理是一种图形数据,用于包装不同的物体,就像衣服一样,衣服的各种展示样式就是我们所说的纹理。@2 纹理与渐变色:渐变色:光栅化过程中,计算出颜色值,然后在fragment shader中赋值。 纹理:光栅化过程中,计算出当前片段在纹理上的坐标,然后在fragment shader中根据纹理坐标获取相应的颜色值。@3 纹理坐标(也叫ST纹理坐标 或 UV坐标)与顶点坐标的对比:顶点坐标 & 纹理坐标 草图@4 顶点坐标 &立方体面数组 &.原创 2022-02-13 15:10:59 · 2695 阅读 · 0 评论 -
Android APP OpenGL ES应用(01)GLSurfaceView 2D/3D绘图基础
1 Android 3D图形基础简介1.1OpenGL ES简介OpenGL本身是开放图形库的一种标准,定义了一个跨语言、跨平台的编程规范,主要用于3D图形编程。OpenGLES是OpenGL的裁剪版本,主要是针对嵌入式设备/移动设备(像手机、游戏机这种等等。。。)进行裁剪后的库。对于Android设备来说主要是用OpenGL ES。从初学者角度来讲 OpenGLES和OpenGL差别不大。OpenGL主要使用GPU进行绘图,关于CPU和GPU的对比如下所示:CPU:计算量小,适用于复.原创 2022-02-13 11:48:19 · 3655 阅读 · 0 评论 -
Android APP完整基础教程(18)存储
1 SharedPreferences和Editor@1SharedPreferences和SharedPreferences.Editor解读SharedPreferences用于存储类似配置信息的内容,主要是简单的键值对(key-value)。对于数据存储,无非是 读和写。关于SharedPreferences存储数据:SharedPreferences本身用于读取(getXXX(key,defvalue))数据。没有关于写数据的方法。 SharedPreferences通过edit.原创 2022-02-08 14:32:07 · 1478 阅读 · 0 评论 -
专题总纲目录 Android APP应用开发 总纲
专题分纲目录 均为索引,本纲为:Android APP应用开发教程。//Android APP开发基础。//OpenGL ES应用。//应用开发 性能分析工具。//Camera2 应用。//flutter基础。//应用开发,稳定性。原创 2022-02-06 23:12:45 · 919 阅读 · 0 评论 -
Android APP完整基础教程(17)图形系统-SurfaceView
1 SurfaceView的绘图机制@1 理解SurfaceView为什么要使用SurfaceView,而不是直接使用View?这里要考虑到动态场景和静态场景的差异,相对于动态场景:View组件缺少双缓冲机制。存在图像撕裂/显示不全的情况。 View组件无法局部更新。当程序需要更新图片时,程序必须重新绘制View上的整张图片 View的更新受限:新线程无法直接更新View。可以理解为:静态绘图用View更合适,但动态绘图SurfaceView更适合。2 SurfaceView实战原创 2022-02-06 21:54:35 · 4794 阅读 · 3 评论 -
Android APP完整基础教程(16)图形系统-图像特效
该部分主要基于Canvas的绘图系统介绍一些常见的特效。1 扭曲特效这里使用Canvas的drawBitmapmesh对图像的局部进行扭曲特效处理。该效果主要是在APP上显示“水波荡漾”、“红旗飘扬”等扭曲效果,非常灵活。drawBitmapmesh定义如下:public void drawBitmapMesh (Bitmap bitmap, int meshWidth,int meshHeight, float[] vert原创 2022-02-06 10:50:50 · 2295 阅读 · 0 评论 -
Android APP完整基础教程(15)图形系统-Canvas绘图
1 绘图基础1.1 绘图基础类解读与实战绘图基础类涉及 Canvas(画布)、Paint(画笔)、Path(多条直线任意图形)。@1 Canvas类解读Android绘图方式是继承View组件,并重写它的onDraw()方法来实现绘制。Canvas的绘制方法有:API详细内容可以参照文档:Android Canvas 各种drawXXX绘制方法除了绘制drawXXX方法,还有rotate(旋转)、scale(缩放)、skew(倾斜)、translate(平移)来对其进行坐标变换。原创 2022-02-05 17:48:00 · 3533 阅读 · 0 评论 -
Android APP完整基础教程(14)图形系统-Bitmap类及拓展
1 Bitmap简介Bitmap(位图)本质上就是一张图片的内容在内存中的表达形式。它将图片的内容看做是由存储数据的有限个像素点组成;每个像素点存储该像素点位置的ARGB值。Android可以将所有的图片资源的内容以Bitmap对象的形式加载到内存中,再通过ImageView的setImageBitmap(Bitmap b)方法即可展示该Bitmap对象所表示的图片内容。为什么不直接通过XML引用资源,还要使用bitmap?如果是需要展示项目中的图片资源文件,我们只需要调用ImageView的s原创 2022-02-03 16:58:59 · 1028 阅读 · 0 评论 -
Android APP完整基础教程(11)应用资源-基础2
1 属性资源1.1 XML属性资源基础主要针对自定义组件的属性,具体格式如下:<?xml version="1.0" encoding="utf-8"?> <resources> <attr name="test" format="string" /> <declare-styleable name="MyView"> <attr name="textColor" format="color"...原创 2022-01-29 22:50:34 · 1569 阅读 · 0 评论 -
Android APP完整基础教程(12)应用资源-Pull解析
1 XML资源文件简介android程序自带的xml文件一般放在values/xml/xml_name.xml处,这里需要使用new->file创建一个新的xml文件。xml文件的版本代码如下:<?xml version="1.0" encoding="utf-8"?>java代码中引用:R.xml.xml_name来表示xml资源文件,获取xml属性方法如下://获取一个解析器对象,返回的是一个XmlResourceParser对象Resources.getXml(原创 2022-01-29 14:51:10 · 1412 阅读 · 0 评论 -
Android APP完整基础教程(13)应用资源-动画
动画模式在android系统中被分为三类,分别为:tween(view) animation:补间动画 frame(drawable) animation:逐帧动画 property animation:属性动画本章节分别对齐进行解读。1Tween Animation1.1 Tween Animation基础Animation是以XML格式定义的,XML文件存放在路径res/anim下。这里按照XML文档的结构{父节点|子节点|属性}来介绍Tween Animation。先介绍Twe.原创 2022-01-28 23:36:32 · 1529 阅读 · 0 评论 -
Android APP完整基础教程(10)应用资源-基础1
1 Android应用资源简介Android应用程序主要由两部分内容组成:代码和资源。资源主要就是指那些与UI相关的东西,例如UI布局、字符串和图片等。代码和资源分开可以使得应用程序在运行时根据实际需要来组织UI。这样就可使得应用程序只需要编译一次,就可以支持不同的UI布局。这种特性使得应用程序在运行时可以适应不同的屏幕大小和密度, 以及不同的国家和语言等。2 Android应用程序资源的分类Android应用程序资源主要分为两大类,分别是assets和res。2.1 assets类资源原创 2022-01-27 17:35:59 · 1204 阅读 · 0 评论 -
Android APP完整基础教程(09)四大组件-载体Intent
Intent简介intent理解为通信载体,系统是“大海”,应用为“各个国家”,组件为“国家的岛屿”,通信载体为“小船”。intent可以是启动某个组件的“意图”,也可以是程序组件之间的通信媒介。通过intent可以启动activity、service,还可以发送广播等。Intent的分类:显式Intent:通过组件名指定启动的目标组件(就像女孩子相亲,她就要找“梁山伯”)。 隐式Intent:指定Intent的Action、Data、Category,当启动组件时, 会匹配AndroidMa原创 2022-01-26 16:26:48 · 1067 阅读 · 0 评论 -
Android APP完整基础教程(08)四大组件-ContentProvider
1 ContentProvider相关概念ContentProvider是跨应用数据交换的标准,主要用于在许可的情况下获取其他应用的数据。为了更好的了解ContentProvider,我们需要了解URI和MIME。1.1 URI(Uniform Resource Identifier)统一资源标识符这个标识符主要用于唯一标识 ContentProvider和其中的数据。URI 为系统中的每一个资源赋予一个名字。1.1.1 URI格式解读每一个 ContentProvider 都拥有一个公原创 2022-01-24 17:00:15 · 839 阅读 · 0 评论 -
Android APP完整基础教程(07)四大组件-BroadcastReceiver
1 BroadcastReceiver简介BroadcastReceiver本质上是一个全局监听器,用于监听系统全局的广播消息(在android O系统之后进行了改动,启动BroadcastReceiver的Intent必须是显式Intent,就像启动service的intent一样。要么直接设置BroadcastReceiver类名,要么通过action和package来设置显式Intent)。对比监听器onXXXlistener 和 BroadcastReceiver:onXXXlisten原创 2022-01-22 23:29:38 · 1171 阅读 · 0 评论 -
Android APP完整基础教程(06)四大组件-Service
1 一张图解读Service这里用一张图解读 生命周期 & 基本概念 & 关键回调方法解读2Service类关系解读关于Service类的父类、子类的继承关系图如下所示:3 配置ServiceService和Activity都是android系统组件,都需要在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Service。简单的service组件内容如下:<service android:name=".FirstSer.原创 2022-01-20 01:00:35 · 1053 阅读 · 0 评论