0%

前言 最近项目有个需求,要求使用 ffmpeg 将 PCM 编码成 ADPCM IMA QT 格式。可是网上竟然没有任何相关的资料(至少我是没找到),我也是哭了。唯一能参考的就是官方的示例,不过那个示例就是一个范例,毕竟人家不可能把每种编码都写个例子。所以自己在写代码时遇到了不少挑战。特此分享下学习成果。 关于 ffmpeg 的自定义编译,前文已经讲过了,并且讲解了如何将 ADPCM IMA QT 编码的音频解码成 PCM。 本文主要讲解如何将 PCM 编码成 ADPCM IMA QT 裸流。 编译环境 操作系统:macOS 10.15.5 NDK:22.1.7171670 ffmpeg:4. ...
阅读全文 »

编译环境 操作系统: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 下载 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,同时 ...
阅读全文 »