分析完应用上层的视频采集、渲染、编码之后,原本我是打算把完整的 WebRTC 带到 Flutter 的世界里,形成 FlutterRTC 的,但后来仔细想想,这件事没多大意思,做出来了也不能产生多大价值,所以我决定调头深入底层。
本篇算是真正深入底层的第一篇,让我们深究一下之前没有深究的话题:视频数据 native 层之旅,以及 WebRTC 对视频数据的处理。最近对 iOS 上层的分析也不算白费,毕竟在 iOS 平台深入底层,无论是编译还是调试都更方便。
继续阅读 »
和对 WebRTC Android 的分析一样,继采集和渲染之后,现在让我们分析一下 WebRTC iOS 的视频硬编码实现。
iOS 的视频硬编码用到的是 VideoToolbox 库,除了编码,VideoToolbox 还提供了解码、转码等功能。我们先了解一下 VideoToolbox 编码的基本工作流程,再看看 WebRTC 对它的使用。
继续阅读 »
前面我们已经知道,相机数据采集之后,会通过 RTCVideoCapturerDelegate 的 capturer:didCaptureVideoFrame 回调抛出。在 WebRTC iOS 工程中,这个 delegate 只有一个实现,它就是 RTCVideoSource。
继续阅读 »
从上一篇开始,我们这个系列就进入了 iOS 的世界,接下来我打算先熟悉一下 iOS 相机相关的内容,包括采集、预览、编码等,本篇重点是采集。
WebRTC-iOS 的相机采集主要涉及到以下几个类:AVCaptureSession, RTCCameraVideoCapturer, RTCVideoFrame。
继续阅读 »
从事多媒体开发的朋友,对 YUV 绝对不陌生,但大家真的能把 YUV 彻底讲清楚吗?这次,让我们彻底揭开 YUV 的「不神秘」面纱。
采样比
人类视觉系统对亮度(luma)的敏感度高于对色度(chroma)的敏感度,因此可以对色度数据进行下采样;
采样比通常表示为 J:a:b,以表示一个宽为 J 像素、高为 2 像素的采样区域内 Y Cb Cr 的采样比:
J 表示采样区域的宽度,通常为 4;
a 表示第一行色度采样数;
b 表示第二行色度采样与第一行色度采样的不同样点数;
继续阅读 »
今天给大家带来 WebRTC iOS demo 的工作流程分析(P2P 连接过程),以及 DataChannel 的使用示例。最后,我把 WebRTC iOS demo 的代码从 WebRTC 代码库中摘了出来,并使用 CocoaPods 上 Google 发布的预编译库,GitHub 传送门。
继续阅读 »
——读《卓有成效的管理者》、《人月神话》、《软件随想录》有感
以前我一直觉得自己读书慢,但在 17 年底、18 年初的一个月里,我也读了四本书,其实挺快的。主要还是得肯花时间,以前总想把时间花在写代码、做开源项目上。实践很好,但实践之余看看前人的经验总结,印证、校正自己的实践,也很重要。
继续阅读 »
2017 转瞬即逝,去年此刻,我还正手捧《程序员面试金典》,一点一点地安抚焦虑的内心呢,不过感谢上苍,再次给了我好运气,让 2016 顺利收官。
继续阅读 »
跨平台开发想必很多朋友都听说过,甚至实践过,这里我就不过多介绍相关的背景了,Java 的 Slogan 完美诠释了这一愿景:Write once, run anywhere!
提到这个话题,大家首先想到的可能是 React Native,不过本文并不是 RN 教程。本文旨在探索我关注到的几种比较靠谱的移动客户端跨平台开发方案,当然 RN 是其中必不可少的一部分。
继续阅读 »
九月除了看 H.264,还看了一本好书:《程序员的自我修养:链接、装载与库》。对这本书我只想说一句话,相见恨晚。
继续阅读 »