分析完应用上层的视频采集、渲染、编码之后,原本我是打算把完整的 WebRTC 带到 Flutter 的世界里,形成 FlutterRTC 的,但后来仔细想想,这件事没多大意思,做出来了也不能产生多大价值,所以我决定调头深入底层。
本篇算是真正深入底层的第一篇,让我们深究一下之前没有深究的话题:视频数据 native 层之旅,以及 WebRTC 对视频数据的处理。最近对 iOS 上层的分析也不算白费,毕竟在 iOS 平台深入底层,无论是编译还是调试都更方便。
继续阅读 »
初次尝试 React Native 开发需要注意的几点
继续阅读 »
有时候我们需要在 APP 运行时验证当前 APP 是否被篡改,而 SDK 提供方通常也需要验证 APP 是否被授权,今天我们就来探讨一下如何在 native 层实现这一功能,以及在这个过程中的一些要点和技巧。
认证方案
我们先探讨一下有哪些认证方案。
继续阅读 »
一年前我初步分析了 WebRTC 的 P2P 连接过程,并总结为了安卓 P2P 连接过程和 DataChannel 使用一文,那会儿我刚接触 WebRTC C++ 的代码,看起来着实头大,而且安卓的代码要调试、测试也很麻烦,所以很多细节就没有展开,今天就让我们在 iOS 的工程里,对 P2P 连接的过程进行一个彻底的剖析。
继续阅读 »
第一次看到 WebRTC 这个词是 15 年在一期 Android Weekly 中,但当时完全看不懂它在讲什么,也就没有深究。两年后,我开始搞起 WebRTC,并整理出了一套开箱即用的 WebRTC 开发环境,距今又过了一年多。
继续阅读 »
在本系列第一篇中,我们分析了 WebRTC-Android 相机采集的实现,本文中我们将分析预览的实现。
有过一定相机开发经验的朋友可能会疑惑,预览还有什么好分析的,不是直接 camera.setPreviewDisplay 或者 camera.setPreviewTexture 就能在 SurfaceView/TextureView 上预览了吗?实际上预览还有更高级的玩法,尤其是需要加上图像处理功能(美颜、特效)时。WebRTC 使用了 OpenGL 进行渲染(预览),涉及下面三个问题:
继续阅读 »
我真正接触 WebRTC 的 ADM 是在做 iOS 混音的时候,iOS 的音频采集、播放之前没有做过,所以想着从 WebRTC 的音频采集播放代码里借鉴一下 AudioUnit 的使用,结果折腾了半天愣是没搞定,后来索性直接使用了 ADM,为混音项目草草地画上了句号。
继续阅读 »
和对 WebRTC Android 的分析一样,继采集和渲染之后,现在让我们分析一下 WebRTC iOS 的视频硬编码实现。
iOS 的视频硬编码用到的是 VideoToolbox 库,除了编码,VideoToolbox 还提供了解码、转码等功能。我们先了解一下 VideoToolbox 编码的基本工作流程,再看看 WebRTC 对它的使用。
继续阅读 »
前面三篇中,我们依次分析了 WebRTC Android 的视频采集、视频渲染和视频硬编码,Live Streaming 视频的前段就已经全了。WebRTC 是个宝,初窥这部分代码时就被它的 Capturer 类的设计惊艳到了,仔细品鉴后越发佩服起来,里面简直填了太多坑了,如此宝贝,如不能为我所用,岂非一大憾事!而前三篇的解读,正是为了今天能将其剥离出来所做的铺垫,现在就有请我们今天的主角——VideoCRE, Video Capture, Render and Encode——闪亮登场。
继续阅读 »
前两篇我们分析了 WebRTC 的相机采集和预览,接下来的环节就是编码和传输了。目前我对传输还不熟悉,本篇只关注编码相关的内容,同样也是聚焦于三个问题:
继续阅读 »