0%

前言 网上的编译方法都比较旧,这回我发个采用最新版 NDK 编译 x264 的方法。 环境说明: NDK 版本:22.0.7026061 操作系统:Ubuntu 20.04.2 LTS 下载 x264 1$ git clone https://code.videolan.org/videolan/x264.git 编译 so 查看支持的命令 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686 ...
阅读全文 »

前言 最近一直在用 Kotlin 重写项目通用框架,并加上了完整的示例(项目已开源,还在不断持续更新中添加新功能,这是下载地址)。一来可以更好的学习 Kotlin,再者还可以学习下 Android 的最新技术和最新版本的变化。其中在展示 RecyclerView 的常用功能时,关于重用机制又发现了一些需要注意的新东西,所以特此记录并分享下心得。 重用机制 强烈建议大家在阅读本文之前,先看一下我之前写的“RecyclerView ViewHolder 关于 Item 位置相关的不同属性的区别”。 本文主要是讲解 RecyclerView 的重用机制,对于常见用法大家可以自行参考开源项目中的示例。 ...
阅读全文 »

前言 RecyclerView 的 ViewHolder 中有好几个关于 Item 位置相关的属性(以下为 Kotlin 示例): ViewHolder.adapterPosition ViewHolder.layoutPosition override fun onBindViewHolder(holder: ItemViewHolder, position: Int) 当我们需要使用“位置”信息时,到底应该使用哪个属性呢?考虑到有些人比较忙,可能没时候看完全文,因此在这里先说下结论: 绑定数据时,使用 ViewHolder.adapterPosition,点击 Item 获取位置时,使用 ...
阅读全文 »

引言 强烈建议大家先阅读下我之前写的文章“YUV 基础知识”一定会帮助到你。(我可是花了很长很长时间来学习并撰写文章的,都是干货!) 结论 本文较长,考虑到大忙人不少,可能没时间看完全文,因此先说下结论: 使用 Camera2 时,MediaCodec 支持传入的 YUV420 格式是 I420 和 NV12 这两种格式(至少我目前遇到的是这两种格式)。 目前我是根据设备支持的编码器的类型来判断需要向 MediaCodec 传递 I420 数组还是 NV12 数组(如果您有更好的办法,还请大神不吝赐教,可以留言或给我发 Email) 前后置摄像头的旋转角度应该根据 CameraCharacte ...
阅读全文 »

前言 Android 从 5.0(API 21, 2014年发布)开始,Google 已经将原来的 Camera 类废弃了,改用全新设计的功能更加强大的 Camera2,并且开始主推新的格式 YUV420。因此我们有必要先学习下有关 YUV 的基础知识。 Android 5 之前的版本,Camera Preview 支持的格式是包括 NV21, YV12,NV16,默认图像格式是 NV21,官方强烈建议使用 NV21 或 YV12。而对于 Andriod 5 及之后版本,支持全新的 YUV420Flexible 格式,配套 YUV_420_888。 YUV420Flexible 并是一种具体的 ...
阅读全文 »

前言 最近在做的项目需要在两个手机之间应用 TCP 实时传递音频流,为也节省流量还要使用 AAC 进行编解码。因此对 AAC 进行了相关的调查。由于对音频数据进行了 AAC 编码处理,因此在播放声音时,就要用到 AudioTrack。 阅读前提 有“一定” Android 开发经验(至少要独立写过 Android 代码。能独立解释问题。)(这里有吐槽,详见文末) 简单了解 MediaCodec 的使用。 阅读本文您将学到 如何在 Android 设备上录制声音 如何使用 MediaCodec 将 PCM 编码成 AAC 如何使用 MediaCodec 将 AAC 解码成 PCM 如何在 And ...
阅读全文 »

阅读前提 有一定 Android 开发经验,较好的 Android 基础知识 了解常用 Linux 命令 说明 本文涉及到的内容和 Android 版本有很大关系。网上大家能查到的很多是基于 Andorid 6(含)之前的,由于现在 Android 6 的设备市面上已经很少了,所以这里就不详细讲了。本文主要讲解从 Android 7 开始,LMK 的处理机制。 本文只做简要介绍,不做详细分析。 背景 最近在调查 Android Low Memory Killer 原理,以前一直不关心这个问题,因此系统都已经自己处理了。最近的项目使用的手机内存只有 2G,系统是 Android 7.1.2,同时 ...
阅读全文 »

前言 最近在做 Android 云手机项目,以前是用传图片的方式显示远程手机的屏幕内容,优点是实现起来简单,缺点是流量有些大。现在要改成更加优化的方案:播放 H264 视频流。(视频流数据来自服务器,通过 Socket 传递。并没有使用流媒体协议)。因此先学习了一下 H264 的相关知识。 H264 官方文档最新版下载地址。也可以访问备用地址。 基本术语 SPS:序列参数集(Sequence parameter set) PPS:图像参数集(Picture parameter set) NAL:网络抽象层(Network Abstract Layer) I Slice,P Slice,B Sl ...
阅读全文 »

之前学习 UDP 组播(多播)时,需要先了解广播地址,因此又温习了一下相关的基础知识。 注意: 本文讲解的都是和 IPv4 相关的。 前言 IPv4地址 使用32位(4字节)地址,因此地址空间中只有4,294,967,296(2的32次方)个地址。不过,一些地址是为特殊用途所保留的,如专用网络(约1800万个地址)和多播地址(约2.7亿个地址),这减少了可在互联网上路由的地址数量。随着地址不断被分配给最终用户,IPv4地址枯竭问题也在随之产生。基于分类网络、无类别域间路由和网络地址转换的地址结构重构显著地减少了地址枯竭的速度。但在2011年2月3日,在最后5个地址块被分配给5个区域互联网注册管 ...
阅读全文 »