![](https://img-blog.csdnimg.cn/20190927151117521.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android-系列
文章平均质量分 82
记录学习和实践过程的心得
老理说的好
技术也修行!
展开
-
redroid11 集成 nvidia gpu hals
此篇文章中使用 nvidia 相关aosp 库、510.155_Android_R_aarch64_release文件来于原厂提供基础资料,可供 aosp 移植库基本思路。本文记录 redroid11(aosp11) 集成 nvidia gpu 驱动库、 nvidia_omx 驱动库实践记录,以作备忘。原创 2023-10-28 15:38:42 · 1489 阅读 · 2 评论 -
虚拟摄像头之 十二 v4l2loopback虚拟机摄像头移植实战(完结篇)
本篇记录在 android8 的 IMX8QM 平台移植 v4l2loopback 虚拟摄像头实战过程记录;其中主旨是记录整个过程、已经期间出现的踩坑过程,后期虚拟摄像驱动还有移植到多核ARM平台上,此文以作备忘。原创 2022-10-13 14:15:00 · 5429 阅读 · 6 评论 -
虚拟摄像头之 十一 Camera RequestThread 预览循环之 surface 显示
虚拟摄像头隔帧绿屏bug解决实践记录原创 2022-10-11 17:49:59 · 1712 阅读 · 0 评论 -
虚拟摄像头之十: Camera3 DeviceSession 和 CaptureRequest 流程机制
前面九篇系列文章、把 Android Camera 框架逻辑基本描述清晰、从使用API2的角度看、还有 Session 和 CaptureRequest 未详细梳理、导致虚拟摄像头移植过程、出现者两块内容错误时、无法修复bug。因此本篇把这两方面的内容也详细梳理、我们从中就能够看到为什么 Camera api2 比 api1 接口效率高的原理啦。原创 2022-08-24 17:47:04 · 2689 阅读 · 1 评论 -
虚拟摄像头之九: IMX8Q 的 camera.imx8.hal 框架详解
android 系统的 camera hal 框架不同厂家设计思路、不尽相同;本篇梳理 NXP android8 的 camera hal 设计框架。笔者再次特别说明:在《虚拟摄像头之三: 重构android8.1 的 v4l2_camera_HAL 支持虚拟摄像头》文章中声称、虚拟摄像头 HAL 方案计划采用Android8 中的 v4l2_camera_HAL 来重构实现;现在更改为 NXP 的 CameraHAL 框架来实现,因此采用此篇梳理学习笔记内容。原创 2022-08-20 17:15:07 · 2349 阅读 · 1 评论 -
虚拟摄像头之八: 从 Camera api2 角度看摄像头框架
在前面的文章中描述 Android 系统 android.hardware.Camera (api1) 是如何通过JNI接口调用 libcamera_client.so库、管理系统摄像头; 本篇从 CameraManager 看如何使用 android.hardware.Camera2 接口框架来使用相机原创 2022-08-12 14:42:03 · 1331 阅读 · 0 评论 -
虚拟摄像头之七:《详解 CameraService 都做了什么》之 CameraService 与 cameraclient 通讯
在阅读本篇内容前、你需要首先了解 android 的 Binder IPC 通讯框架基本原理,才好更好理解 CameraServer 与CameraClient 之间通讯原理;此部分描述的是 android.hardware.Camera1 接口相机连接 CameraServer 的逻辑。...原创 2022-08-12 14:37:54 · 2154 阅读 · 0 评论 -
虚拟摄像头之六: 《详解 CameraService 都做了什么》之 CameraService 与 CameraProvider 通讯
上一篇梳理了 CameraProvider 是独立服务、通过 v4l2 框架管理物理摄像头,本篇主要描述的是 CameraService 如何与 CameraProvider 通讯;android 的 CameraService 是 Camera 子系统核心模块,Camera Api1 和 Api2 的接口、是如何与CameraService 通讯呢?笔者将分两篇来介绍。...原创 2022-08-12 14:23:46 · 1878 阅读 · 0 评论 -
虚拟摄像头之五: 详解 android8 的 Camera 子系统框架
由于 android 版本差异、 camera子系统框架也有不同调整,本文是采用 android8 源码作为参考对象,对 camera 子系统进行框架梳理,建立起框架性认知后、在进一步分析各模块实现时、就如同有了地图和指南针功用。...原创 2022-08-05 16:10:46 · 3087 阅读 · 1 评论 -
虚拟摄像头之三: 重构android8.1 的 v4l2_camera_HAL 支持虚拟摄像头
接下来将了解Android HAL是如何与相机设备进行交互的,一般各硬件厂商的 camera HAL会有个v4l2_camera_hal.cpp 文件,在这个文件中向frameworks提供HAL的对外接口,该文件会通过 HAL_MODULE_INFO_SYM 修饰一个 camera_module_t 结构体;camera Provider服务就是通过 HAL_MODULE_INFO_SYM 找到 camera_module_t,从而操作Camera HAL达到操作camera设备。...原创 2022-08-04 18:12:55 · 3549 阅读 · 0 评论 -
虚拟摄像头之四: 谁在调用 v4l2_camera_HAL 摄像头驱动
本篇是虚拟摄像头重构过程的系列文章,本篇博文谨分析二方面内容:(1). 谁在调用 v4l2_camera_HAL 摄像头驱动(2). 如何管理多版本 camera_hal 摄像头设备原创 2022-08-04 17:56:39 · 1795 阅读 · 0 评论 -
虚拟摄像头之二: 配置v4l2loopback虚拟摄像头为前置或后置摄像头
在android8.1系统中调用摄像头是通过 CameraManager::getCameraIdList() 方法获取系统摄像头列表,从列表中选择满足需要摄像头,用以拍照、录像或全景拍照。上篇中以介绍如何把v4l2loopback移植到android内核,本章介绍如何配置虚拟摄像头参数,以满足android用户程序直接使用。...原创 2022-08-02 11:18:23 · 2874 阅读 · 0 评论 -
虚拟摄像头之一: android8.1 移植 v4l2loopback 虚拟摄像头
笔者计划通过虚拟摄像头系列文章、让读者完整掌握在android系统中实现过程和应用方法。以作备忘之用、再则让有需求朋友可以参考。原创 2022-08-02 11:16:20 · 5589 阅读 · 1 评论 -
android8.1中用libtinyalsa编写sound-hal驱动
因笔者的项目中需要在android系统中实现虚拟声卡,实现android本地声音播放到远程终端、远程终端MIC录音送至android系统来;验证过使用libmedia库实现AudioRecord和AudioTrack的方案,此方案由于音频路由策略和声音焦点问题,无法实现项目目标。只能重构sound-hal层、通过libtinyalsa库直接控制声卡方式来实现此部分功能;因此就有了这篇记录文章,我们一起梳理如何实现。...原创 2022-08-01 15:17:24 · 2046 阅读 · 3 评论 -
android8.1 用 Native AudioTrack 直接播放PCM源音频文件
此篇博文是笔者验证通过远程MIC采集音频输入送至android8.1系统进行播放,可以理解为给本地的安卓系统添加远程的MIC录音功能。本地播放pcm的音频数据使用libmedia库直接调用native的接口,创建AudioTrack播放。044100构造audioTrack过程,首先newandroidAudioTrack()对象,然后通过androidAudioTrackset()方法来配置该对象;1。...原创 2022-08-01 12:09:17 · 838 阅读 · 0 评论 -
本地 Android repo 仓库迁移、恢复源码树
迁移本地 Android repo 仓库、还原源码树原创 2022-06-22 18:23:29 · 1216 阅读 · 0 评论 -
NDK调用android系统库(基于android frameworks自己编写库)过程记录
此篇博文记录android NDK调用系统库、第三方库实践记录,由于笔者在android上实现内录音,此apk是运行在云手机上的后台java程序,直接编译到云手机的镜像中、自动运行。由于android系统的声卡权限问题,故通过C++基于android系统frameworks编写自己的录音库,此库可以通过NDK调用。实现内录音功能。第一部分: 在android源码中、增加自己的so库1.1 在 external 文件夹中创建 audio_record 文件夹,此文件夹是库的目录,文件基本结构如下。原创 2022-05-25 23:07:41 · 2356 阅读 · 7 评论 -
android8.1 的HIDL接口、添加 ALSA 声卡驱动
此篇博文是上一篇文章 《Android 7.1 系统裁剪、定制化实践 snd-aloop 内录音》 的延续. 链接如下:https://blog.csdn.net/weixin_38387929/article/details/123506727?spm=1001.2014.3001.5502早期验证 ALSA 声卡内录音的功能,是在 android7.0 系统上,待向 android8.1 系统上移植时,我尴尬了 -因为硬件驱动 HIDL 的接口在 android8.0 版本的引入,致使我只能在梳理原创 2022-05-13 16:26:23 · 1593 阅读 · 0 评论 -
IMX8MQ MEK 开发板安卓 8.1-2.0.0 环境搭建过程记录
本篇是记录使用NXP官方开发板环境搭建过程记录,以防备忘。这次在无原厂技术支持的环境下,把整个流程梳理一下:(a). 选的开发板获取该开发板资料;(b). 搭建android8.1 源码开发环境;©. SD 卡分区并烧写android系统镜像;(d). 使用自己编译镜像在开发板上验证;第一条 研发资料说明1). android_O8.1.0_1.3.0_8M_tools.tar.gz 文件是 mfgtool 下载工具.可以制作 sd 卡镜像、烧写镜像至 emmc 中。2). imx-o8.原创 2022-04-23 17:05:14 · 4462 阅读 · 0 评论 -
IMX8MQ 的 Android8.1 源码编译过程记录
本篇主要是记录采用,nxp 官方开发板 MEK-IMX8MQ 搭建 android8.1 系统的工作记录,以防备忘。环境说明虚拟机 ubuntu-20-64 系统。step 1: Installing necessary software packages#sudo apt-get install flex bison gperf build-essential tofrodos python-markdown libxml2-utils xsltproc# sudo apt-get insta原创 2022-04-05 17:02:55 · 3400 阅读 · 1 评论 -
Android 7.1 系统裁剪、定制化实践 snd-aloop 内录音
背景描述:此篇是对《Android音频框架之一 详解audioPolicy流程及HAL驱动加载》、《Android音频框架之二 用户录音启动流程源码走读》 和《Android音频框架之三 用户录音启动流程源码走读 startRecord》的延续内容;本篇描述是 android8.1 源码中,如果增加 TinyAlsaHAL的源码,并配置 Android 系统启动和加载库项目,移植 tinyalsa 至 hikey960-Androi8.1 平台,以完成这个系列博文所实现的功能。Android 7.0原创 2022-03-15 16:55:57 · 7438 阅读 · 0 评论 -
Android音频框架之三 用户录音启动流程源码走读 startRecord
前言此篇是对《Android音频框架之一 详解audioPolicy流程及HAL驱动加载》 和《Android音频框架之二 用户录音启动流程源码走读》的延续,此系列博文是记录在Android7.1系统即以后版本实现内录音功能。当用户使用 AudioRecord 录音 API 创建 new AudioRecord 后,会创建文件流把 AudioRecord 的音频流写入到文件流或网络流中,调用的方法时 audioRecord.read() 方法,把数据写入到文件流中,源码如下public class原创 2022-03-14 18:58:20 · 6566 阅读 · 0 评论 -
Android音频框架之二 用户录音启动流程源码走读
前言此篇是对《Android音频框架之一 详解audioPolicy流程及HAL驱动加载》的延续,此系列博文是记录在Android7.1系统即以后版本实现内录音功能。当用户使用 AudioRecord 录音 API 时,private void init() { int minBufferSize = AudioRecord.getMinBufferSize(kSampleRate, kChannelMode, kEncodeFormat);原创 2022-03-14 16:45:07 · 7248 阅读 · 0 评论 -
Android音频框架之一 详解audioPolicy流程及HAL驱动加载与配置
前言此音频架构梳理笔记、主要是因工作上需要在 Android8.1 以上版本中,增加 snd-aloop 虚拟声卡做前期准备工作,本篇文章提纲挈领的把音频框架主线梳理清晰,通过这篇文章能够清晰如下内容:1>. 声卡服务框架是什么时间产生、如何引发?2>. 声卡框架主要模块都是什么,他们基本功能如何分配? audioFlinger、audioService、audioPolicyMannager等3>. audio_policy_configuration.xml 与 audio_原创 2022-02-25 16:44:46 · 10305 阅读 · 1 评论 -
ijkplayer 代码走读之 ijkPlayer 轮廓特征综合概述
在 read_thread() 线程中调用 stream_component_open(ffp, st_index[AVMEDIA_TYPE_VIDEO]); 函数,此函数 decoder_start(&is->viddec, video_thread, ffp, “ff_video_dec”) 启动了 video_thread 线程,本篇代码走读 video_thread 线程都做了什么内容。第 1 部分 wideo_thread 线程来源//>源码路径: libavforma原创 2021-11-30 11:54:14 · 3406 阅读 · 0 评论 -
ijkplayer 代码走读之 read_thread 线程中 av_read_frame() 数据流读取过程详解
回顾ijkplayer 开机过程:用户在 Android 程序中,调用封装接口 IjkLibLoader 方法,装载 ijkffmpeg、ijksdl和ijkplayer三个库文件到安卓系统;初始化播放器,调用的JNI接口程序 native_setup() 函数,此函数创建播放器消息队列和播放其相关参数;用户在 Android 程序中,调用 createPlayer() 和 prepareAsync() 封装接口函数创建播放器,并让播放器进入待播放状态;启动播放器。前面分析过 prepare原创 2021-11-29 18:58:29 · 1052 阅读 · 0 评论 -
scrcpy 客户端代码走读 H264 裸流解码过程详解
本篇主要是捋顺 scrcpy 客户端 解码流程,按照如下流程梳理:1>. decoder_init(&s->decoder); ///> 5. decoder_init();2>. stream_init(&s->stream, s->server.video_socket, &stream_cbs, NULL);3>. stream_add_sink(&s->stream, &原创 2021-11-25 12:14:25 · 1789 阅读 · 0 评论 -
ijkplayer 代码走读之 h264 解封装器应用详解
本连续记录 IJKPLAYER 代码走读文章,其主要的目的是在 IPKPLAYER 中增加私有网络通讯协议和私有解封装器。 本篇文章是成果输出记录,通过实例再次阐述 IJKPLAYER 的解协议、解封装的实现逻辑。并在本文中把实现过程做详细记录,供大家参考,以防个人备忘。第一 H264 解封装ffmpeg实现过程分析///> 源码文件路径 libavformat/h264dec.c/* 1、找到nalu定位符0x00 0x00 0x01 2、解析nalu头原创 2021-11-19 18:16:49 · 2738 阅读 · 0 评论 -
ijkplayer 代码走读之 播放器网络数据读取过程详解2
本篇是 《播放器网络视频数据读取过程详解》 的延续部分,我们回顾一下上一篇。回顾前面内容我们详细分析了自定义的协议是如何以静态方式、注册到 IJKPLAYER 协议profile中。本篇分析打开自定义协议、读取数据流数据并匹配解封装函数,也即是说本篇要把私有协议、私有数据封装的数据流模式,实现在ijkplayer中播放流程说清楚。static int init_input(AVFormatContext *s, const char *filename,原创 2021-11-18 14:32:25 · 733 阅读 · 0 评论 -
ijkplayer 代码走读之 播放器网络视频数据读取过程详解
此部分网络读取视频数据代码另开一篇博文分析。概念定义:PTS:Presentation Time Stamp。PTS主要用于度量解码后的视频帧什么时候被显示出来DTS:Decode Time Stamp。DTS主要是标识读入内存中的bit流在什么时候开始送入解码器中进行解码也就是pts反映帧什么时候开始显示,dts反映数据流什么时候开始解码。此部分主要是走读 ijkplayer 数据输入流,我们需要先看看相关数据结构,如下:typedef struct AVIOContext { /**原创 2021-11-13 11:52:44 · 839 阅读 · 0 评论 -
ijkplayer 代码走读之 播放器启动过程详解2
此部分内容是 <<ijkplayer 代码走读之 播放器启动过程详解>> 的延续。我们在看看 ijkplayer 工作流是如何运转的, 我们只重点走读 2.5、 2.6 和 2.8 部分代码,就能够清晰 ffplay 的工作流. 其中 2.0 部分代码主要是 ffplay 控制接口线程,实现方法是通过SDL EVENT机制来完成,此部分内容我们就不展开走读这部分代码了。///> 2.6 创建 read_thread() 输入数据读取线程, 源码路径ijkmedia/ij原创 2021-11-10 18:25:41 · 1824 阅读 · 0 评论 -
ijkplayer 代码走读之 播放器启动过程详解
上篇 ijkPlayer 代码走读之 Demoplayer 中,在 Android 代码层面是如何启动播放器,我们已经说过,简单回顾一下,创建app应用时,protected void onCreate(Bundle savedInstanceState) {mVideoView.setVideoPath(); ///> 1. 设置视频源内容mVideoView.start(); ///> 2. 启动播放器}mVideoView.setVideoPath(原创 2021-11-09 18:25:26 · 2096 阅读 · 1 评论 -
ijkplayer之 DemoPlayer 程序框架设计概述
第一步 阅读本篇源码走读,需要做如下准备工作JNI方法与java方法是怎么对应的?Android JNI原理分析http://gityuan.com/2016/05/28/android-jni/JNI开发:Android笔记之使用CMake进行JNI开发(Android Studio)https://anacz.blog.csdn.net/article/details/84202451JNI学习笔记Android JNI学习(三)——Java与Native相互调用https://www原创 2021-11-06 18:04:18 · 1885 阅读 · 0 评论 -
ijkPlayer 编译过程记录
环境: ubuntu 20 - x64源码: ijkPlayer 和 ffmpeg 的源码从 github转移到gitee上.第一步 安装开发常用工具和库工具install git, make, yasm, curl, wget库内容.apt-get install libncurses5 libncurses5-dev openssl android开发环境gradle、 java-11、android_sdk、android_ndk第二步 从gitee.com上克隆 ijkPlay原创 2021-11-05 15:10:13 · 386 阅读 · 0 评论 -
scrcpy 源码走读之三 socket到屏幕刷新间经历了什么
第一部分 scrcpy主函数中函数清单源码版本: v1.19bool scrcpy(const struct scrcpy_options *options) { static struct scrcpy scrcpy; struct scrcpy *s = &scrcpy; server_init(&s->server); ///> 1. server_init() struct server_params para原创 2021-10-30 16:51:14 · 1143 阅读 · 0 评论 -
scrcpy 源码走读之二 客户端如何连接到手机端server
第一步 客户端如何连接到手机端scrcpyscrcpy是通过ADB FORWARD tcp:port tcp:port 方式,开启手机端的 ADB DAEMON 的守护线程,监听 端口的连接。本篇就分析这一过程的具体实现,我们还是走读客户端的源码。第二步 scrcpy 客户端网络连接过程 server_connect_to()此函数在scrcpy初始化过程中所处于的位置如下:bool scrcpy(const struct scrcpy_options *options) { static s原创 2021-10-29 10:26:58 · 2292 阅读 · 4 评论 -
scrcpy 开发环境搭建与源码走读之一
此系列博文主要记录本人在scrcpy项目重构过程中记录文件,共大家参考和备忘。#环境说明1.操作系统 ubuntu20-642.虚拟机 VMware 153.源码 1.19 版本git clone https://github.com/Genymobile/scrcpy -b v1.19cd scrcpy第一步 搭建 scrcpy 编译开发环境1.1 安装 mesonsudo apt install python3-pippip3 install meson1.2 安装 ninja原创 2021-10-25 17:39:38 · 3463 阅读 · 0 评论 -
Android的NIO之ByteBuffer解析与实例代码
谈及Java NIO,最核心的三个组件就是:Channel 通道ByteBuffer 读写缓冲区Selector 多路复用器ByteBuffer的读写操作ByteBuffer为NIO中的字节缓冲区,相对于BIO的Stream流只支持写入或者读取单向操作,ByteBuffer是双向的,支持读和写。属性与方法DirectByteBuffer使用的是操作系统级别的内存,分配比较慢,但是数据的读写比较快,因为少了一次从系统内存到JVM内存的复制过程。初始化方法:ByteBuffer.allo转载 2021-10-21 15:22:13 · 1145 阅读 · 0 评论 -
安卓8.1内核开发环境搭建记录
一、环境搭建前期准备1.1下载 ubuntu20.iso 安装镜像下载 vmware15 虚拟机管理软件1.2安装 ubuntu20 环境,8core、16G 内存、500G硬盘安装常用工具sudo apt-get updatesudo apt-get install vim net-tools openssh-server二、下载 android 9 的源码本文是采用国内清华源的方式过程如下:配置环境变量#安装git,配置自己的git账号sudo apt-get原创 2021-10-16 19:31:19 · 1587 阅读 · 1 评论 -
Android 7 的4G 模块驱动移植
本篇记录android 7.1 版本,Sim7600CE模块、A7600C1模块驱动程序移植过程及应用测试记录:内核版本:linux - 4.15。简述:本次驱动移植基础是基于安卓系统 3G 上网框架进行,相应流程都是android标准;框架中涉及模块如下:hardware/ril/ril-rk29-dataonly : 安卓RIL无线通讯库external/ppp/chat : ppp 拨号工具external/ppp/pppd : pppd 拨号守护线程s原创 2021-01-11 10:58:18 · 1400 阅读 · 1 评论