自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

易水南风的专栏

分享安卓开发和音视频开发知识

  • 博客(90)
  • 资源 (5)
  • 收藏
  • 关注

原创 音视频系统学习的浪漫马车之总目录

过去的一年,个人经历了很多事情,导致整个博客更新停滞了一年,今年,博客重新起航,并且重点将是音视频开发相关的系统博客系列,个人尽力将自己学习的知识以及学习过程的感悟和理解写在博客系列中,所谓独乐乐不如众乐乐,希望接下来至少一年的时间里,大家能够和我一同开启音视频开发的浪漫之旅,让音视频的马车带我们跑起来吧,以下是旅途计划站点(仅为大概,具体以实际更新为准)~首先是开胃菜,个人维护的一个音视频开源项目,系列文章讲到的知识点会运用到这个项目实战中,初学者可以通过此对音视频有点感觉,后续看系列文章也可以从该项目

2021-05-04 23:38:52 1009

原创 大白话讲解RxJava原理

RxJava全局观赏RxJava已经诞生了好多年了,对应变化风云诡谲的移动互联网行业来说,已经属于老框架了。虽然学习成本不低,但是熟练之后真叫人打从心里说声爽。那它到底爽在哪里呢,我个人总结为以下几点:1.不管复杂的业务也可以用一条链连到底,将每个逻辑操作步骤划分到每一个操作符中2.线程切换一个操作符搞定,完全省去了繁琐的回调,多次线程切换从代码的角度看流程依然十分直观3.多条业务流程可以...

2020-02-18 12:07:17 3036 2

原创 介绍一个自己刚出炉的安卓音视频播放录制开源项目

**回到主题,这篇文章主要是介绍一个自己刚出炉的音视频播放录制开源项目**:[UnitedPlayer](https://github.com/yishuinanfeng/UnitedPlayer)为什么叫做UnitedPlayer呢?因为我是一个17年的曼联球迷,曼联英文名为Manchester United,为了简单,我就叫做UnitedPlayer。简单介绍下,**这是一个支持录制和播放音频视频的应用,录制的视频将在播放列表中显示,点击列表项即可播放,并提供不同仿抖音滤镜特效。**

2020-02-02 11:56:11 1884 5

原创 Android平台上基于OpenGl渲染yuv视频

前言这是我音视频专栏的第一篇实例解析,也算是入门篇,重点讲下如何使用OpenGl去渲染一个yuv视频。本篇博文涉及的知识点主要有三个:1.yuv的概念 2.基于ndk进行C++程序的基本编写 3.OpenGl纹理的绘制本文将重点讲知识点1和3,ndk开发部分就不细谈,由于OpenGl知识体系庞大,本文也是根据重点来分析,所以如果没有ndk开发基础和OpenGl基础的读者看本文可能会比较困难......

2019-11-13 21:28:17 6096 14

原创 从动态代理角度看Retrofit

1.Retrofit简介retrofit(https://square.github.io/retrofit/)已经诞生好几年了,从诞生开始一直都是Android应用开发最流行的网络请求框架,准确来说,是网络请求框架一个巧妙的包装。正如官网所说,retrofit最大的特点,在于可以用一个Java interface通过注解去表示一个Http请求。1.比如定义一个GET请求的Java inte...

2019-10-06 21:24:28 1189 9

原创 从字节码角度仔细剖析一个HelloWorld程序

1. 变身的HelloWorld2. 初识字节码3. 解析HelloWorld字节码4. 结束语变身的HelloWorld相信学过Java的朋友都知道HelloWorld是什么,当年第一次成功运行HelloWorld程序的激动似乎还宛如昨天的事,历历在目。没错,今天就讲一个HelloWorld的Java程序~public class HelloWorld { public s...

2019-10-01 11:52:41 961

原创 通过编译期生成代码方式实现的仿ButterKnife功能Demo

整体概述 ButterKnife原理简介 相关的技术点 实战 调试 总结1.整体概述好久好久以前,我写过一篇文章 通过反射实现的仿ButterKnife功能Demo 说过,会写一篇按照ButterKnife(https://jakewharton.github.io/butterknife/)实现方式,即编译期生成代码方式实现的相关文章,终于在这里出炉了。。关于编译期生成代码,...

2018-08-01 18:03:33 371

原创 通过反射实现的仿ButterKnife功能Demo

用过ButterKnife的朋友都知道,ButterKnife可以使用@BindView和@OnClick等注解就可以省略掉繁琐的findViewById和setOnClickListener等代码,使得业务代码更加简洁清晰。对ButterKnife不熟悉的朋友可以看下:(http://jakewharton.github.io/butterknife/)在参考过一些资料过后,我也模仿地写了一个通过

2017-11-18 15:19:04 518

原创 仿海报工厂效果的自定义View

近期做了一个自定义View,效果有些类似海报工厂,先看下效果图:就是一个背景图,中间挖了若干个形状不同的“洞”,每个“洞”里放着一张图片,用手可以拖拽、缩放、旋转该图片,并且当前图片备操作时会有红色的高亮边框。点击选中某个图片的时候,底部会弹出菜单栏,菜单栏有三个按钮,分别是对该图片进行旋转90度、对称翻转图片、和保存整个海报到手机内置sd卡根目录。这里主要是一个自定义View,项目中

2017-09-02 11:58:55 1373 2

原创 浅析安卓事件分发机制源码

最近工作需要需要做一些比较复杂的自定义View,其中事件分发的处理自然少不了,结合之前阅读过的大量资料,工作是完成了,但是对事件分发的处理总觉得很不清晰,知其然不知其所以然的感觉让人很不舒服。如果不知道事件分发原理,要是处理的情况很复杂的话,那就很难解决了。之前也看过任玉刚的《安卓开发艺术探索》对于事件分发源码的分析,但只能说大致了解了事件分发的流程,而不知其中的道理。索性践行某位大师的名言—

2017-07-09 21:48:56 960

原创 Android 图片加载框架Universal-Image-Loader源码解析

Universal-Image-Loader(项目地址)可以说是安卓知名图片开源框架中最古老、使用率最高的一个了。一张图片的加载对于安卓应用的开发也许是件简单的事,但是如果要同时加载大量的图片,并且图片用于ListView、GridView、ViewPager等控件,如何防止出现OOM、如何防止图片错位(因为列表的View复用功能)、如何更快地加载、如何让客户端程序员用最简单的操作完成本来十分复杂的

2017-03-26 10:52:32 3759 3

原创 聊聊Volley源码(缓存流程)

上一下谈了Volley网络请求流程聊聊Volley源码(网络请求过程),今天来谈下请求的缓存流程。首先必须明确的是缓存的概念:缓存是“存贮数据(使用频繁的数据)的临时地方,因为取原始数据的代价太大了,所以我将它们存在容易取的地方,所以可以取得快一些。”在讲缓存流程之前,首先需要说明下Http的缓存机制,只有熟悉了Http的缓存机制,才可以理解Volley的缓存机制,因为Volley 构建了一套相对完

2017-02-26 23:38:40 478

原创 聊聊Volley源码(网络请求过程)

上一篇博文基本溜了一圈Volley的整体流程 聊下Volley源码(整体流程),但是各个细节都没讲到,这篇文章准备讲下网络请求的细节过程。像上一篇博文所说,每个Volley请求,基本都是创建一个请求队列RequestQueue对象和一个具体的请求(比如StringRequest),然后将该请求add到RequestQueue对象中即可。而在创建请求队列的过程中,又启动了CacheDispatcher

2017-02-18 21:23:22 1028

原创 聊下Volley源码(整体流程)

最近过年回来工作很清闲,于是变想找点事做,想起虽然看分析Volley源码的文章也不算少,但是还没有真正去研究过Volley源码,所以就好好研究它。 Volley大家想必都比较熟悉,作为谷歌官方推荐的网络请求库,必定很强大,可以满足广大群众的需求,像很多介绍Volley的博客一样,我也来一张官方的图片:Volley正如图片所示一群弓箭手射箭一样,适合频繁但量小的请求。这是官方的工作流程图:从

2017-02-11 22:02:12 1256 6

原创 全面分析Handler消息机制

更多关于安卓源码分析文章,请看:Android源码分析专栏 相信Handler大家都很熟悉了,最常见的用法就是在一个线程用Handler对象sendMessage,然后在UI线程该Handler对象执行handleMessage使用Message中的数据去更新UI。 Handler的最主要作用确实如此,但是作为Android系统一个很重要的组件如果对它的认识不深入点...

2016-08-28 17:14:17 2492 18

原创 H264码流结构一探究竟

视频理论基础:视频基础知识扫盲音视频开发基础知识之YUV颜色编码解析视频编码原理——从孙艺珍的电影说起(一)解析视频编码原理——从孙艺珍的电影说起(二)上两篇博文解析H264视频编码原理——从孙艺珍的电影说起(一)解析H264视频编码原理——从孙艺珍的电影说起(二)已经比较详细地叙述了一个视频从原始的yuv数据流如何转化为一个H264码流,那么今天就来讲一讲整个过程的最终产物H264码流究竟是什么样子的。如果还没看过这两篇博文,建议先看一下,不然本文说的很多概念会不理解。如果你愿意一层一

2022-05-01 23:03:58 926

原创 解析视频编码原理——从孙艺珍的电影说起(二)

上一篇博文简单介绍了H264历史背景,并着重介绍了H264中的帧内帧间预测,今天继续讲解H264编码剩余部分——变换量化、熵编码。

2022-04-04 14:45:32 1194

原创 解析视频编码原理——从孙艺珍的电影说起(一)

更多博文,请看音视频系统学习的浪漫马车之总目录今天开始讲下视频编码技术,这里的编码可以理解为压缩,当然由于笔者不才,对视频具体压缩算法只是略知一二,自然不能写出来误人子弟,所以这里标题用的是“浅尝”,确实是浅尝,今天只打算将视频编码技术的思路讲一下,当然,虽然是浅尝,不代表对以后的开发没用,编码思路是基础,只有熟悉编码的思路,才能做好开发,不清楚编码过程的思路,是无法做好视频方面的开发的。上一篇音视频开发基础知识之YUV颜色编码 我们已经知道在视频中的像素是如何表示的,那么我们假设有一个电影视频,分辨

2022-03-19 21:31:20 3565

原创 视频基础知识扫盲

更多博文,请看音视频系统学习的浪漫马车之总目录之前几篇博文已经把C、C++、ndk的基础打得差不多了,从今天开始,将进入音视频的理论部分,今天就开始从视频最基础的知识讲起。

2022-03-02 23:00:26 572

原创 初探ndk的世界(二)

上一篇[初探ndk的世界(一)](https://blog.csdn.net/sinat_23092639/article/details/122314100?spm=1001.2014.3001.5501)主要介绍了ndk的背景和java和C++如何交互,如果还没看过上一篇,那最好先看一下,因为这一篇将继续上一篇没有讲完的ndk话题,让我们对ndk的世界接触得更加旷阔一点。

2022-02-12 22:36:02 1649

原创 初探ndk的世界(一)

上一篇文章[升级构建工具,从Makefile到CMake](https://blog.csdn.net/sinat_23092639/article/details/122275101?spm=1001.2014.3001.5501) , 我们已经学习了现代化构建项目的脚本CMake,打了半年基础,不容易,终于可以开始摸到正题的影子了,今天开始讲ndk开发。

2022-01-30 11:33:32 4391 1

原创 升级构建工具,从Makefile到CMake

更多博文,请看音视频系统学习的浪漫马车之总目录上一篇文章一篇文章入门C/C++自动构建利器之Makefile介绍了构建项目的脚本工具Makefile,相比于手动执行gcc命令来说,已经方便了太多了。不过如果只用Makefile构建项目,会有一个问题,那就是不支持跨平台的问题,因为Makefile脚本中的命令是和具体平台绑定的,比如上篇文章就是用GNU的gcc命令,那如果项目要移植到其他不能使用gcc命令的平台,那又要重新写一套Makefile,这可不符合懒惰的程序员群体,所以支持跨平台语法又更简洁的CMa

2022-01-03 19:08:50 2778 1

原创 一篇文章入门C/C++自动构建利器之Makefile

更多博文,请看音视频系统学习的浪漫马车之总目录Makefile简介上一篇浅析C/C++编译本质已经比较详细地介绍了C/C++编译的流程和初步探讨了编译过程中底层的一些细节,可能各位已经发现,即使文章中的Demo很小,但是每次修改源码之后都要调用g++命令再重新链接一次,改了几次之后就有点吃力了,假如遇到大型项目,这样一个个调用g++(gcc)编译命令,那有点一顿操作猛如虎,结果什么的那味么。。我们程序员总是很喜欢偷懒的,总是希望能交给机器的事情觉得不自己亲自处理,所以编译也是一样,我们要的是告诉机器一

2021-12-26 23:23:19 1758

原创 浅析C/C++编译流程

该系列前面的文章已经讲了C语言和C++的一些重点难点,从本篇博文开始将开始探索C/C++编译体系(不仅仅像其他很多文章一样只讲那四个主要流程,还会更深入讲链接的本质)以及内存模型相关的内容,从编译体系继而将讲解MakeFile以及cmake的内容,而这些内容,将为以后做音视频开发编译第三方库打下坚实的基础~~

2021-12-18 21:35:48 1977 1

原创 感受C++一些令人眼前一亮的语法

上一篇进一步走进C++面向对象的世界 比较详细阐述了C++中继承和多态、虚函数相关的分析,面向对象的内容就基本结束,这一篇是C++语法的最后一篇博文,讲介绍C++一些常见的语法以及它们背后的思想和使用场景,这些语法,为后起之秀的语言们提供了深厚的语法基础。

2021-11-27 23:06:18 1856 2

原创 进一步走进C++面向对象的世界

更多博文,请看音视频系统学习的浪漫马车之总目录上一篇初尝C++的世界 虽然讲的很长,但是如同题目写的“初尝”一般,写的比较蜻蜓点水,简单讲了C++与C语言的一些不同点,这一篇将针对C++类与对象,更深入探讨继承、多态以及其内存原理等内容。关于继承,C++程序员肯定是信手拈来了。 所谓继承,就是一个类从另一个类演化而来,在原来的类基础上添加一些成员和方法,并能访问原来的类中的成员和方法,被继承的类叫做父类或者基类,继承的类叫做子类或者派生类。继承的作用从代码角度来说就是实现了代码的复用,父类的代码可以被多

2021-11-09 22:59:44 1322

原创 初尝C++的世界

c++简介c++与C的不同点:内联函数const变量引用类对象this指针静态成员、函数const成员、函数class和struct区别继承权限名字屏蔽构造函数、析构函数多态运算符重载模板进阶内存模型

2021-09-11 21:38:52 472

原创 漫谈C语言指针(三)

上一篇漫谈C语言指针(二) 主要讲了指针和数组的关系、字符串指针、指针变量作为函数参数,就像电影最后进入高潮一样,接下来,指针的内容将进入深水区,大家坐稳扶好,马上出发~今天要讲的内容有:二级指针、二维数组、指针数组、函数指针、函数指针数组、结构体指针。为什么说的深水区呢?因为前面的2篇只要看懂概念基本就能学会,但是这一章,概念开始变绕,不再平坦,甚至有点花俏,所以需要消费一些脑细胞才可以理解,不过不用担心,我对我的表达有自信(看不懂也勿喷。。)二级指针二级指针,顾名思义,就是指针的指针,一个指针指向

2021-07-18 21:36:33 310

原创 漫谈C语言指针(二)

更多博文,请看音视频系统学习的浪漫马车之总目录上一篇漫谈C语言指针(一)中主要讲了指针的基本概念相关以及基本使用,今天基于上一篇博文进一步讲下指针和数组的关系、字符串指针、指针变量作为函数参数、二级指针以及指针使用的一些花里胡哨的表达式的辨析。指针和数组数组是一系列具有相同类型的数据的集合,每一份数据叫做一个数组元素。数组中的所有元素在内存中是连续排列的,中间没有间隙的,整个数组占用的是一块内存。在C语言中,数组名可以转化为指向这个数组第0个元素的首地址的一个指针。所以遍历数组除了常用的:in

2021-07-17 18:05:10 431 5

原创 漫谈C语言指针(一)

什么是指针C语言里,指针一直是一个难点,初学者容易混淆的地方,但是指针本身其实很简单,指针就是一个存放整数的变量。C语言中,变量存放在内存中,而内存其实就是一组有序字节组成的数组,这些连续的字节从 0 开始进行编号,每个字节都有唯一的一个编号,这个编号就是内存地址。CPU 通过内存寻址对存储在内存中的某个指定数据对象的地址进行定位。这里,数据对象是指存储在内存中的一个指定数据类型的数值或字符串,它们都有一个自己的地址,而指针便是保存这个地址的变量。也就是说:指针是一种保存变量地址的变量。如图为4GB

2021-07-12 17:22:52 650 2

原创 漫谈C语言内存管理

要学习音视频开发,首先C、C++是必备的编程语言,因为很多知名的音视频库,比如FFMPEG、X264等都是用C语言编写的,而我们要使用这些库就必须用C、C++去开发程序。C语言是一门怎样的语言呢?C语言是一门面向过程的编译型语言,它的运行速度极快,仅次于汇编语言。**C语言是计算机产业的核心语言,操作系统、硬件驱动、关键组件、数据库等都离不开C语言**;不学习C语言,就不能了解计算机底层。后来的很多语言(C++、Java等)都参考了C语言,说C语言是现代编程语言的开山鼻祖毫不夸张,它改变了编程世界

2021-07-10 14:20:42 1968 2

原创 音视频开发基础知识之YUV颜色编码

YUV,是一种颜色编码方法。常使用在各个影像处理组件中。YUV在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。比如移动端Camera拍照捕获的图像数据、直播推流的流数据都是用这种编码格式。Y”表示明亮度(Luminance、Luma),“U”和“V”则是色度、浓度(Chrominance、Chroma)相对我们都比较熟悉的编码格式RGB,RGB诉求于人眼对色彩的感应,YUV则着重于视觉对于亮度的敏感程度。 YUV在对照片或影片编码时,考虑到人类的感知能力,允许降低色度的带宽。换句话说,也就

2021-05-04 17:37:37 1002 1

原创 一次互联网音乐领域巨头的面试

前言:最近到一家国内互联网音乐领域巨头面试,对此作记录,希望对其他人也有帮助。因为在疫情期间,所以采用远程视频面试,个人觉得相比以前方便了很多,希望以后面试也都改为远程视频面试吧哈哈。一面:自我介绍最擅长什么安卓技术(我回答自定义View,这个问的不多)自定义View主要的流程方法?onMeasure方法的参数及其意义?测量阶段是什么遍历方式?描述下Handler机制实现流程?H...

2020-04-11 12:56:42 459

原创 深入安卓系统卷3之控件系统简单笔记

WindowManager内部都是对进程唯一的WindowManagerGlobal的代理WindowManagerGlobal 1. 三个数组管理一个进程中所有窗口的信息:views,layoutparams,roots分别保存一个窗口的根控件,Layoutparams,viewrootImpl 2. ViewRootImpl.setView托管了根控件,完成了控件窗口的添加,并且建立了...

2019-06-16 13:06:58 234

原创 音视频开发入门之极简基础知识笔记

以下是我最学习音视频基础的笔记,不太详细,主要是自己方便以后查阅~播放器基础原理:封装格式: 将音频视频合在一起播放网上音视频: 解协议--解封装--音视频解码--音视频同步流媒体协议:客户端和服务器通信的协议封装格式:将视频码流和音频码流按照一定格式存储在一个文件中视频编码:将视频像素数据压缩为视频码流,以降低视频数据量音频编码:将音频采样数据压缩为音频码流音视...

2019-04-19 00:14:01 588

原创 谈谈计算机中的整数

1. 前言 2. 整形长度 3. 整数在内存中的存储形式 4. 整形存储的原理探究

2019-02-02 18:28:29 1825

原创 一篇文章带你快速了解JNI开发~

JNI开发基础笔记JNI概述编写第一行JNI代码,Java调用C方法得到一个字符串1.编写带有native的Java方法:2.编译Java类:3.生成头文件:4.使用C++编写本地函数,并生成all库:访问Java成员变量通过JNI在C中修改Java的属性总体的步骤:合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中...

2018-11-25 12:57:41 1928

原创 记一次欢聚时代面试经历

上个星期受邀请到欢聚时代面试,坐了一个小时左右的地铁并且找了好一会儿才找到欢聚时代的大厦。欢聚时代有一层楼专门作为面试使用的,环境很好,设计有特色和艺术感。在沙发上等了一会儿,就遇到了面试官,看起来30多岁样子,戴一副有点酷的眼镜,然后到两个沙发椅相对而坐,自我介绍之后,真正的面试开始。听说大厂的面试都是喜欢玩连环炮(就是对一个知识点从简单到难逐渐深入地去问),确实如此,这场面试持续了差不多一个...

2018-09-25 12:26:06 7278

原创 Glide列表预加载组件RecyclerViewPreloader源码解析

更多关于安卓源码分析文章,请看:Android源码分析专栏鼎鼎大名的安卓图片加载框架Glide有一个可能大家比较少用的功能,就是RecyclerView滑动的预加载组件RecyclerViewPreloader,它的功能就是在滑动列表的时候提前加载指定item图片数据进入内存,使得滑动的时候可以立即看到图片显示而不需要等待。Glide官方链接如何使用:它的使用非常简单...

2018-05-26 18:17:01 3810

原创 极简Kotlin入门笔记

最近在学kotlin,看了一些入门资料,整理为以下笔记(极简的形式记录的),便于自己复习,也希望对其他人有帮助。kotlin是什么:首先可以看下维基百科总体了解:Kotlin以下关于Kotlin介绍章节摘抄于:写给Android开发者的Kotlin入门Kotlin也是基于JVM设计的编程语言,算是对Java的温和改良。Google在2017年的IO大会上宣布,将Android开发的官方语言更换为K...

2018-04-15 15:27:01 288

仿ButterKnife功能Demo

仿ButterKnife功能Demo。通过运行时解析注解实现布局、控件、点击事件的依赖注入的Demo。

2017-11-18

自定义头部可伸缩ListView

一个自定义头部可伸缩ListView,下拉头部 变大,上拉变小,手指离开屏幕自动弹回。

2017-05-14

安卓MP3播放器开发实例

一个简单的安卓MP3播放器开发实例,用进度条调整进度和歌词显示功能。适合初学者学习和大家交流技术。

2015-07-26

android高仿QQ的即时通讯源代码

对于新手来说,可以通过模仿他人的小作品来提升自己。通过该源代码,可以熟悉网络协议及网络通信的实现原理。

2014-12-08

Android MP3播放器源代码

一个简单的android项目,有利于android新手更好的入门,新手们可以通过模仿他人的作品来提升自己。

2014-12-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除