0%

编译环境 操作系统:macOS 10.15.5 NDK:22.1.7171670 ffmpeg:4.4 “Rao”(截止 20210609) cmake: 3.20.3 gcc: 123456789Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/c++/4.2.1Apple clang version 12.0.0 (clang- ...
阅读全文 »

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

前言最近一直在用 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 获取位置时,使用 V ...
阅读全文 »

引言强烈建议大家先阅读下我之前写的文章“YUV 基础知识”一定会帮助到你。(我可是花了很长很长时间来学习并撰写文章的,都是干货!) 结论本文较长,考虑到大忙人不少,可能没时间看完全文,因此先说下结论: 结论1:使用 Camera2 时,通过 Image 获取的数据,可以将其组织成 I420 和 NV21 这两种格式。 结论2:MediaCodec 支持传入的 YUV420 格式是 I420 和 NV12(大多数情况)这两种格式(至少我目前遇到的是这两种格式。注意:是 NV12 而非 NV21)。 PS:对摄像头数据进行编码时,目前我是根据设备支持的编码器的类型来判断需要向 MediaCodec ...
阅读全文 »

前言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 Sli ...
阅读全文 »

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