Piasy

NEVER STOP

WebRTC-Android 源码导读(四):VideoCRE 与内存抖动优化

前面三篇中,我们依次分析了 WebRTC Android 的视频采集、视频渲染和视频硬编码,Live Streaming 视频的前段就已经全了。WebRTC 是个宝,初窥这部分代码时就被它的 Capturer 类的设计惊艳到了,仔细品鉴后越发佩服起来,里面简直填了太多坑了,如此宝贝,如不能为我所用,岂非一大憾事!而前三篇的解读,正是为了今天能将其剥离出来所做的铺垫,现在就有请我们今天的主角—...

WebRTC-Android 源码导读(三):视频硬编码实现分析

前两篇我们分析了 WebRTC 的相机采集和预览,接下来的环节就是编码和传输了。目前我对传输还不熟悉,本篇只关注编码相关的内容,同样也是聚焦于三个问题: 数据怎么送进编码器? 怎么从编码器取数据? 如何做流控? 在开始之前,我们先了解一下 MediaCodec 的基本知识。 MediaCodec 基础 Developer 官网 上的描述已经很清楚了,下面简要总结一下。...

WebRTC-Android 源码导读(二):预览实现分析

在本系列第一篇中,我们分析了 WebRTC-Android 相机采集的实现,本文中我们将分析预览的实现。 有过一定相机开发经验的朋友可能会疑惑,预览还有什么好分析的,不是直接 camera.setPreviewDisplay 或者 camera.setPreviewTexture 就能在 SurfaceView/TextureView 上预览了吗?实际上预览还有更高级的玩法,尤其是需要加上...

WebRTC-Android 源码导读(一):相机采集实现分析

前面分享了一套开箱即用的 WebRTC 开发环境,希望能给对 WebRTC 感兴趣的朋友带来帮助。不过有了开发环境只是迈出了万里长征第一步,后面的事情还得仔细研读源码才行,所以这里给大家先带来 WebRTC 的安卓 demo 工程—— AppRTC-Android 的源码导读系列。(十个月前说好的拆 Dagger2 看来又要等等了,海涵海涵…) WebRTC 的代码量不小,一次性看明白不太...

开箱即用的 WebRTC 开发环境

在刚刚落幕的 WWDC17 上,苹果为我们带来了一个不小的惊喜 —— 其浏览器内核WebKit将正式支持 WebRTC,而未来基于 WebKit 内核的苹果浏览器,比如macOS High Sierra、iOS 11 中的 Safari 浏览器和Safari 技术预览版 32,都将使用到 WebRTC 技术。 ——苹果终于入伙 WebRTC 适逢我也正在倒腾一些 WebRTC...

Frida Android hook 初体验

最近的工作需要通过 hook 研究一些目标 APP 的系统 API 调用,很早就了解到了 Frida,这次终于可以体验一把了。花了一整天的时间,才终于把环境搭好,主要是准备手机系统花了时间。示例代码可以在 GitHub 获取。 【2017.6.4 更新】:自动生成 Javascript hook 脚本的工具有了一个可用的版本,check it out :)。 环境准备 最终成功的环境:...

记一次 YUV 图像翻转的性能优化

今天下午修复了一个 YUV 图像翻转的问题,YUV 图像翻转其实没啥好说的,但期间碰到了一点性能问题,性能优化的过程我觉得比较有趣,所以在这里分享出来,希望对大家有帮助。 YUV 翻转 YUV 是一种图像编码格式(RGB 也是一种图像编码格式),YUV 主要用于视频,用来降低带宽。安卓平台上,用 Camera1 API 采集出来的数据(通过 PreviewCallback 回调获得)默认...

安卓基础:App 各大组件

Activity Activity 是和用户交互的入口,几乎用户所有的交互操作都发生在 Activity 中,只有一个例外:通知栏,notification area (bar) 和 notification drawer 都由系统控制(SystemUI,一系列有界面的 Service,除了状态栏,还包括虚拟按键、最近任务、壁纸等,更多内容可以阅读《深入理解Android 卷III》)。桌...

安卓基础:事件传递及滑动冲突的处理

基本概念 所有 Touch 事件都被封装成了 MotionEvent 对象,包括 Touch 的位置、时间、历史记录以及第几个手指(多点触控)等; 事件有很多类型,ACTION_DOWN,ACTION_UP,ACTION_MOVE 等; 对事件的处理包括三类:传递,dispatchTouchEvent();拦截,onInterceptTouchEvent();消费,onTou...

安卓基础:View 绘制

View 树的绘图流程 当 Activity 接收到焦点的时候,它会被请求绘制布局,该请求由 framework 处理。 整个 View 树的绘图流程在ViewRoot.java类的performTraversals()函数展开,该函数所做 的工作可简单概况为是否需要重新计算视图大小(measure)、是否需要重新安置视图的位置(layout)、以及是否需要重绘(draw),流程图如下:...