Piasy

NEVER STOP

我需要知道:编译、链接、装载、运行

九月除了看 H.264,还看了一本好书:《程序员的自我修养:链接、装载与库》。对这本书我只想说一句话,相见恨晚。 看完这本书之后,结合本科阶段学习的程序设计(C++)、汇编、编译原理、计算机组成原理、计算机体系结构、操作系统这几门课程,我总算对“我们编写的 C/C++ 代码是怎么一步步在电脑上跑起来的”这个问题有了一个宏观的认识。当然,细节和深入之处想靠这一本书甚至一门课程就完全掌握是不可...

安卓 OpenGL ES 2.0 完全入门(三):2D 纹理的裁剪、翻转、旋转、缩放

我在去年六月份学习了 OpenGL 的一些基本概念,整理了一个 demo 和两篇文章,并在今年六月份复习修正了一番。不久前我进一步向铁蕾兄学习了四种常用 2D 纹理变换的实现思路(以及本文中的其他总结性文字),由于铁蕾兄实在太忙,无暇快速整理成文,因此我就在这里为他代笔了 :) 没有阅读过前两篇、对 OpenGL 基本概念不熟悉的朋友,下面是链接: 安卓 OpenGL ES 2.0...

我需要知道:H.264

我在今年年初离开 YOLO 加入了一家在流媒体领域具有极深积累的小公司,负责视频群聊 SDK 的开发工作,YOLO 是一款直播 APP,我常戏称这是从技术下游(SDK 使用方)跑到了技术上游(SDK 提供方)。不过事情当然不是这么简单,经过长期的思考和探讨,我最终确认:实时多媒体领域,更宽泛一点来讲,实时视觉、感知的展现,在未来极长一段时间内都存在很大的需求,也存在很大的挑战,所以这将是我长...

使用 WebRTC 静态库进行 NDK 开发

前面我们分析 WebRTC P2P 连接过程时,在 C++ 代码的世界里徜徉了那么久,其中有各种各样的功能模块,难道大家看着不心动?反正我是很想把它们剥离出来用的,第一个拿来开刀的当然就是 P2P 模块了。 不过在这之前,我还得好好补补 NDK 开发的相关知识,在这篇文章中,我不会涉及 WebRTC P2P 模块的代码,而是简单用一用它的多线程模块,力图先把路给趟平了。 所谓剥离使用,其...

WebRTC-Android 源码导读(五):P2P 连接过程和 DataChannel 使用

前面四篇里,我们分别分析了 WebRTC Android 的视频采集、视频渲染和视频硬编码,最后把相关代码剥离出来形成了一个独立的模块:VideoCRE,并对其进行了极大地内存抖动优化。从本篇起,我们将迈入新的领域:网络传输。首先我们看看 P2P 连接的建立过程,以及 DataChannel 的使用,最终我们会利用 DataChannel 实现一个 P2P 的文字聊天功能。 前面四篇没看过...

Native 层校验 APP 签名,以及 JNI 异常处理

有时候我们需要在 APP 运行时验证当前 APP 是否被篡改,而 SDK 提供方通常也需要验证 APP 是否被授权,今天我们就来探讨一下如何在 native 层实现这一功能,以及在这个过程中的一些要点和技巧。 认证方案 我们先探讨一下有哪些认证方案。 授权码 最容易想到的方案就是用户名密码认证了,稍加引申,可以想到用 token 进行认证,本质都是一样的,通过授权码进行认证,但这存在...

安卓 NDK 入门指南

本文的前身是一篇笔记,比较零碎,发布出来是为了让后续的文章可以有一个基本的参考,本文会持续更新。 NDK 的高性能最常见的场景:多媒体,游戏。此外,利用 NDK 还能练习 C/C++,一举两得。 基本概念 shared library, .so static library, .a JNI: Java Native Interface Application Bina...

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 上预览了吗?实际上预览还有更高级的玩法,尤其是需要加上...