0%

日拱一卒--记OpenGL课程完结

时光荏苒!从 2017 年在慕课网推出第一门视频课《FFmpeg精讲》,到刚刚上线的《OpenGL+AI实现各种酷炫特效》转眼已经 6 年了。这期间,我录制了 8 门视频课,出版了一本书,还开了一个专栏。涉及音视频,网络传输,服务器开发,人工智能等多个方面,按一些同学的话说,我也算个高产“作者”了。

这些成果的背后,不仅是我不断学习,不断探索,不断挑战自己的过程,更是我对教育的热爱和对未来技术发展方向的笃定。在这个过程中,我遇到了很多困难,也收获了很多快乐,今天我特别想和大家分享录课的一个感悟:日拱一卒

首先我想说的是,录课并不是一件容易的事情,尤其是长年累月的不断输出内容。更何况我讲的基本上都是一些比较深入、复杂、新颖的课,为此我付出了大量的时间、精力和心血!

令我印象最深的是,《WebRTC源码分析》这门课。这门课是我录制的所有课程中最困难的一门课,当然也是我最引以为傲的一门课。这门课原本计划半年内录完,结果足足用了一年的时间才将其完成。

为什么这门课这么难录呢?有两方面原因,一方面WebRTC的代码量非常庞大,而且涉及到的知识点非常多,包括音视频采集,编码,传输,解码,回音消除,噪声抑制,网络适应,拥塞控制,安全加密,信令交互等等,要讲好这些知识,需要有非常深厚的功底。这就要求老师不仅理论基础扎实,而且还要有实践经验,同时对协议标准、代码都特别熟悉才行;另一方面,如何将这么复杂的系统抽丝剥茧,讲的深入浅出,通俗易懂是另一个难题。比如采集到的数据是如何交给编码器进行编码的?编码后的数据在发给对方之前是如何进行流控的?代码中是如何使用多线程的?WebRTC处理多线程方式的好处是什么,有没有更好的方法,它有什么缺陷等等,这些问题都需要你有深入的分析,有清晰的逻辑,在讲课时要有生动的例子,用简洁的语言,作恰当的比喻,我想这对于任何一个人来说都是一项巨大的挑战。

实话讲,这么庞大的一门课,想一口气吃掉它是不现实的,录制的过程中我遇到了非常多的困难和挑战,曾经焦躁过、彷徨过,沮丧过,但我从未放弃。我是如何克服这些困难的呢?我的秘诀就是 日拱一卒。意思是每天进步一点点,不断地积累,日复一日,年复一年,最终就能达到自己的目标。对于WebRTC这门课来说,虽然不能一下将想讲的内容都说清楚,但只要其中的一部分可以讲清楚时,我就先将这部分录制出来,积小胜为大胜。而录制的过程,又是一个提炼、总结的过程,很多问题都是讲着讲着就有了新的思路,然后再按照新思路去翻阅代码,验证自己的分析是否正确,这样慢慢就将之前的“小疙瘩”全解开了,从而豁然开朗,越来越理解源码作者们为什么这样做了。这样日积月累,日久年深,一门课程就被录制出来了。

我想这个方法不仅适用于录课,也适用于任何一件需要长期坚持,需要不断学习,不断创新的事情,比如写作、编程、研究、创业等等。只要你有一个明确的目标,有一个合理的计划,有一个持之以恒的态度,有一个不断反思的习惯,有一个不断改进的精神,你就能够日拱一卒,最终实现你的梦想。尤其是当下,在大环境不景气的时候,我们会遇到比以前多十倍百倍的困难。有失业的压力,有收入大幅下降的压力,有在公司反复被虐的压力……,此时如何才能不迷失、不迷茫、不彷徨呢?不如从小事儿入手,日拱一卒,积小胜为大胜,这样让自己慢慢走出低潮区,你会发现未来会更加美好!

总之,这六年是我人生中比较充实、快乐、且很有成就感的一段时光,结识了很多朋友,影响了一些同学。后面我会继续努力,日拱一卒,给大家带来更多、更好的课程。

这里顺便提一下我的新课 《OpenGL+AI实现各种酷炫特效》,它是一门讲解如何使用OpenGL进行视频渲染以及特效处理的课程。课程中讲解了Android系统的显示系统,如何从Camera采集视频数据并将它正确显示,对显示的视频做各种特效,如彩色转黑白、浮雕、素描,LUT调色,转场特效,性能优化,与AI结合实现美颜相机等。**学好这门课你就可以实现抖音中的各种特效了。

另外,细心的朋友可能会发现,到《OpenGL+AI实现各种酷炫特效》上线为止,我录制的课程中几乎包括了音视频的方方面面,在《音视频系统入门中》我讲解了音频采集,视频采集,音频编解码、视频编解码,详细分析了RTMP协议,以及如何使用它推拉流;在《FFmpeg精讲》中,我讲解了FFmpeg的工作流,移动端如何使用FFmpeg,FFmpeg滤镜,SDL播放PCM和YUV,音视频同步,并将这些知识结合到一起实现了一个播放器;《WebRTC入门与实战》讲解了如何正确的使用WebRTC,包括了三个端:Web、Android以及iOS并,并可以让它们互联互通,同时课程中还讲解了大量的WebRTC协议;《WebRTC流媒体服务器》以mediasoup为背景,讲解了如何实现高并发、大负载的网络服务器,并将mediasoup源码做了深入剖析;《WebRTC源码剖析》则将WebRTC源码详细的剖析了一遍,包括线程模型,整体架构,音频采集,视频采集,音频编解码,视频编解码,网络传输,NetEQ,拥塞控制等,以及各模块之间的关联关系,使用到的各种协议。如果你对音视频感兴趣,想提升这方面的能力,就可以去学习我的课程,相信一定会对你大有裨益的。

欢迎关注我的其它发布渠道