You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
6.9 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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