LV01-开篇词-01-为什么说视频开发是程序员的一片蓝海
本文主要是攻克视频技术课程开篇词——为什么说视频开发是程序员的一片蓝海的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。
点击查看使用工具及版本
Windows | windows11 |
Ubuntu | Ubuntu16.04的64位版本 |
VMware® Workstation 16 Pro | 16.2.3 build-19376536 |
点击查看本文参考资料
参考方向 | 参考原文 |
--- | --- |
现在从事安防行业,对基本的视频编解码需要有一定的知识积累,偶然发现极客时间中有这么一些课程,但是并非免费,59大洋,但是为知识付费嘛,学到东西就很值。其实这些都是直接复制的文章的,主要是为了方便查看吧,而且自己这边做一遍笔记也印象更深刻,不做商业用途,仅限个人查阅学习使用。
一、为什么要学音视频开发?
你好,我是李江,欢迎你跟我一起走进视频和图像的世界。从今天开始,我要用 15 节课的时间,和你分享视频中的那些核心技术。
那说起视频,随着以抖音和快手为代表的短视频平台火爆全球,市场对于视频研发人才的需求越来越旺盛。当然还有像随之而来的直播带货、疫情背景下视频会议产品的更新与迭代等等,都给工程师们创造了很多新的机会。
最简单粗暴的方式是,你可以直接通过各种招聘平台去了解相关的就业形势。就拿 Android 开发为例吧,现阶段做音视频开发的薪资水平,至少比同资历的 Android 开发高出 30% 左右。
当然,除了实打实的物质回馈,我想更大的学习动力还是一些新技术、新应用,毕竟好奇是人类的天性,也是技术人进阶的驱动力。
拿我来说吧,我目前是在声网 Agora 担任视频专家,主要从事视频编码和传输方面的工作。但在此之前,我已经积累了 8 年之久,做过很多新的尝试和探索,收获颇丰。
早在 2013 年我还在浙大读硕士的时候,我就开始了视频编码与传输方向的研究。之后一步步转向视频编码的应用、传输策略的优化;再到高阶的视频网络传输、带宽预测、抗丢包等网络对抗技术;再后来就是人脸识别、表情识别和人流量检测等各种有意思的视频 AI 算法的落地。
总结来说,视频领域的方方面面,从底层原理到上层应用,我都有过深度参与和系统性的沉淀。这也是我开这门课的一个原动力,那就是希望能做更多的分享与输出,把这一路上踩的坑、体验到的技术痛点与乐趣与你分享,让更多有兴趣了解、转型视频开发的同学可以快速涉猎视频技术,而音视频工程师或者相关应用的产品经理也可以借此夯实视频基础、优化视频产品设计体验。
二、学习视频技术究竟难在哪?
在我看来,现在就是视频技术最好的时代。一方面,如你所见,当下即是刚需,视频技术的应用已经成为互联网平台的标配;另一方面,未来即是星辰大海,随着 AI、元宇宙等技术的发展,视频技术还有无限的想象空间。
但既然我们前面已经提到了技术痛点这个关键词,那学习门槛还是有的。就比如:
- 抖音和快手的短视频需要应用图像处理和视频编码技术,如何在保持高画质的情况下,尽量减少视频文件的大小,是很难也很重要的;
- 连麦直播则需要懂 RTC 和直播技术,如何能够保证在各种网络状况下实现超低延时、降低卡顿率是一个非常难的问题;
- 视频会议则需要你十分熟悉 RTC 和转码合流服务等技术,几十上百人的大型视频会议,如何保证流畅度、卡顿率、画质等指标也是十分具有挑战性的。
尤其对于一些视频技术小白来说,可能看公式都是有难度的。就比如说下面这个公式:
这其实是一个二维 DCT 变换公式,是用来将图片从空域转到频域的。对于有些基础的同学来说,可能一眼就能看个大概。但是对于之前没有接触过视频编码的同学来说,可能要先从每个字母代表什么学起,然后才能再去搞清楚公式背后的计算逻辑。
有门槛只是一方面,我认为,视频技术难上手的另一个重要原因就是它涉及的技术太多了,这是事实。比如说视频前处理,就涉及到很多信号处理和 AI 技术;视频的编码算法,则会涉及到信息论和数学;而视频的传输就更多了,包含了各种网络协议和拥塞控制算法。你可以通过以下这张知识图谱去梳理其中的技术环节,既是构建知识网络,也可以查漏补缺。
另外,也正是因为这点,目前市面上系统讲解视频的书籍和课程也是比较少的。同时,它与火热的音频技术相比,发展时间更短,所以沉淀下来的资料也不多。
三、要学什么?
清楚了门槛,后面我们要解决的就是怎么迈过去,推开视频技术这扇大门了。
我联想到以前在公司内部做技术分享的场景,复盘问题其实是一种很好的学习方式。所以在设计课程的时候,我就假想同过去的自己对话。回想那些我曾经困惑的技术点和理论,以及难以解决的工程问题,希望能把那些广杂艰深、让初学者望而生畏的核心技术交付给你。
那么这门课程的具体内容是怎样的呢?我会从视频处理的全链路展开,具体分为图像基础和前处理、视频编码、视频传输和网络对抗、视频封装和播放四个模块。
图像基础和前处理:从视频和图像的基本概念讲起,陆续延伸到视频的颜色空间,尤其是 YUV 颜色空间,这是视频技术中非常重要的基础知识,同时也是很多视频工程师的学习难点。之后会讨论工程上常用的图像缩放算法及其原理。打好基础,后面事半功倍。
视频编码:主要讲解在视频技术中占据重要地位的视频编码技术,重点学习编码算法的底层原理和具体算法的实现,让我们在使用编解码器的同时,也能更深一层,洞察其工作原理。另外,H264 码流是视频开发中必学的,所以我也会在这里和你讨论它的结构以及相关工程问题。深入原理,才能快速实践。
视频传输和网络对抗:以实践为主,讲解具体的视频传输和弱网对抗技术,主要包括如何打包视频、预测网络带宽,以及如何在有限的带宽情况下控制好编码器的码率和发送包的速度。之后,我会手把手带你解决两个代表性的视频 Bug“花屏和卡顿”,并介绍一下视频会议中的常用技术 SVC。
视频封装和播放:介绍常用的视频封装技术,并解决视频工程难题:音视频同步。
以上就是我要给你分享的重点内容,从最核心的原理、最新的应用到最常见的问题,我相信这门课能帮助你轻松跨入视频技术的大门。最后,我想说,技术赋能、常变常新,希望我们都能在时代的洪流中锚定目标与方向。