开篇词|为什么说视频开发是程序员的一片蓝海?

你好,我是李江,欢迎你跟我一起走进视频和图像的世界。从今天开始,我要用15节课的时间,和你分享视频中的那些核心技术。

那说起视频,随着以抖音和快手为代表的短视频平台火爆全球,市场对于视频研发人才的需求越来越旺盛。当然还有像随之而来的直播带货、疫情背景下视频会议产品的更新与迭代等等,都给工程师们创造了很多新的机会。

最简单粗暴的方式是,你可以直接通过各种招聘平台去了解相关的就业形势。就拿Android开发为例吧,现阶段做音视频开发的薪资水平,至少比同资历的Android开发高出30%左右。

图片

当然,除了实打实的物质回馈,我想更大的学习动力还是一些新技术、新应用,毕竟好奇是人类的天性,也是技术人进阶的驱动力。

拿我来说吧,我目前是在声网 Agora 担任视频专家,主要从事视频编码和传输方面的工作。但在此之前,我已经积累了8年之久,做过很多新的尝试和探索,收获颇丰。

早在2013年我还在浙大读硕士的时候,我就开始了视频编码与传输方向的研究。之后一步步转向视频编码的应用、传输策略的优化;再到高阶的视频网络传输、带宽预测、抗丢包等网络对抗技术;再后来就是人脸识别、表情识别和人流量检测等各种有意思的视频AI算法的落地。

总结来说,视频领域的方方面面,从底层原理到上层应用,我都有过深度参与和系统性的沉淀。这也是我开这门课的一个原动力,那就是希望能做更多的分享与输出,把这一路上踩的坑、体验到的技术痛点与乐趣与你分享,让更多有兴趣了解、转型视频开发的同学可以快速涉猎视频技术,而音视频工程师或者相关应用的产品经理也可以借此夯实视频基础、优化视频产品设计体验。

学习视频技术究竟难在哪?

在我看来,现在就是视频技术最好的时代。一方面,如你所见,当下即是刚需,视频技术的应用已经成为互联网平台的标配;另一方面,未来即是星辰大海,随着AI、元宇宙等技术的发展,视频技术还有无限的想象空间。

但既然我们前面已经提到了技术痛点这个关键词,那学习门槛还是有的。就比如:

  • 抖音和快手的短视频需要应用图像处理和视频编码技术,如何在保持高画质的情况下,尽量减少视频文件的大小,是很难也很重要的;
  • 连麦直播则需要懂RTC和直播技术,如何能够保证在各种网络状况下实现超低延时、降低卡顿率是一个非常难的问题;
  • 视频会议则需要你十分熟悉RTC和转码合流服务等技术,几十上百人的大型视频会议,如何保证流畅度、卡顿率、画质等指标也是十分具有挑战性的。

尤其对于一些视频技术小白来说,可能看公式都是有难度的。就比如说下面这个公式:

这其实是一个二维DCT变换公式,是用来将图片从空域转到频域的。对于有些基础的同学来说,可能一眼就能看个大概。但是对于之前没有接触过视频编码的同学来说,可能要先从每个字母代表什么学起,然后才能再去搞清楚公式背后的计算逻辑。

有门槛只是一方面,我认为,视频技术难上手的另一个重要原因就是它涉及的技术太多了,这是事实。比如说视频前处理,就涉及到很多信号处理和AI技术;视频的编码算法,则会涉及到信息论和数学;而视频的传输就更多了,包含了各种网络协议和拥塞控制算法。你可以通过以下这张知识图谱去梳理其中的技术环节,既是构建知识网络,也可以查漏补缺。

另外,也正是因为这点,目前市面上系统讲解视频的书籍和课程也是比较少的。同时,它与火热的音频技术相比,发展时间更短,所以沉淀下来的资料也不多。

课程设计

清楚了门槛,后面我们要解决的就是怎么迈过去,推开视频技术这扇大门了。

我联想到以前在公司内部做技术分享的场景,复盘问题其实是一种很好的学习方式。所以在设计课程的时候,我就假想同过去的自己对话。回想那些我曾经困惑的技术点和理论,以及难以解决的工程问题,希望能把那些广杂艰深、让初学者望而生畏的核心技术交付给你。

那么这门课程的具体内容是怎样的呢?

我会从视频处理的全链路展开,具体分为图像基础和前处理、视频编码、视频传输和网络对抗、视频封装和播放四个模块。

图像基础和前处理:从视频和图像的基本概念讲起,陆续延伸到视频的颜色空间,尤其是YUV颜色空间,这是视频技术中非常重要的基础知识,同时也是很多视频工程师的学习难点。之后会讨论工程上常用的图像缩放算法及其原理。打好基础,后面事半功倍。

视频编码:主要讲解在视频技术中占据重要地位的视频编码技术,重点学习编码算法的底层原理和具体算法的实现,让我们在使用编解码器的同时,也能更深一层,洞察其工作原理。另外,H264码流是视频开发中必学的,所以我也会在这里和你讨论它的结构以及相关工程问题。深入原理,才能快速实践。

视频传输和网络对抗以实践为主,讲解具体的视频传输和弱网对抗技术,主要包括如何打包视频、预测网络带宽,以及如何在有限的带宽情况下控制好编码器的码率和发送包的速度。之后,我会手把手带你解决两个代表性的视频Bug“花屏和卡顿”,并介绍一下视频会议中的常用技术SVC。

视频封装和播放介绍常用的视频封装技术,并解决视频工程难题:音视频同步。

以上就是我要给你分享的重点内容,从最核心的原理、最新的应用到最常见的问题,我相信这门课能帮助你轻松跨入视频技术的大门。

最后,我想说,技术赋能、常变常新,希望我们都能在时代的洪流中锚定目标与方向。最后,欢迎你在留言区中与我交流,不妨说说你对这门课程的期待,或者你在学习视频技术时的经历和痛点,我会更加有针对性地为你答疑解惑!

精选留言

  • plh

    2021-11-22 23:18:44

    李江老师您好,第一时间订阅了你的专栏。 几个问题想请教一下:
    1. 音视频的技术不太好入门,有些基本概念网上的资料也不太好找, 也不好理解,那么这门课程的动手实践需要怎么弄?
    2. 后续是否有代码? C++ 的?python, 自己 可以提前补一下.
    3. 有没有基本的推荐资料。

    谢谢.
    作者回复

    1、可以先看别人的博客,跟着写代码开始,推荐leixiaohua大佬的博客。
    2、课程不会有代码、主要讲代码背后的原理,音视频开发基本是C/C++。
    3、推荐CSDN leixiaohua大佬的博客。

    2021-11-23 14:16:58

  • smart

    2021-11-24 00:18:07

    建议老师在讲解过程中,针对每一个点,可以放一些比较好的权威资料,最好是 RFC 或者官方标准。方便的话可以再指出来具体是哪个章节。个人认为,音视频领域,标准文档还是很重要的。
    作者回复

    后面的RTP里面就会有很多RFC文档了

    2021-11-24 13:07:01

  • qinsi

    2021-11-22 23:46:07

    视频开发平时工作都做些啥?发明新的codec和封装格式?
    作者回复

    方向其实很多,比如说前处理的会做新的美颜啊、降噪啊、AI头像啊这些。编码主要是优化速度和优化压缩性能这些。传输就是降低延时、卡顿啊。其实工作内容很多。而且很有挑战的。

    2021-11-23 14:16:35

  • Mark

    2021-11-24 14:45:19

    老师您好, 我这边公司主要做国内编解码, 目前自己在团队中角色定位为音视频这块相关问题的管理, 同时也在慢慢接触音视频, 对于一个全新的领域, 他们建议我从OMX 开始着手, 同时内部文档也晦涩难懂, 这种情况下, 老师有什么建议吗?
    作者回复

    接下来的几节课就会讲视频编码的原理,建议重点关注学习一下。建议先从H264编码学起。可以买一本毕厚节老师的H264标准的书读一下。再配合实际用编码器去编码压缩视频时间一下。编码的时候会有一些参数需要设置,要学习一下参数的用途。慢慢的就会熟悉起来了。编解码相对来说是比较难的。再一次推荐leixiaohua大佬的CSDN博客,可以去看一看。

    2021-11-25 13:03:19

  • !null

    2021-11-22 21:04:33

    想做一个单片机设备,采集视频和音频,然后通过5G传送到服务器上做备份。当时就感觉音视频同步很神奇,现在看来神奇的还有很多,但愿学完这个课能做出来。
    我觉得通过单片机实现应该很底层了吧?应该可以对视频技术有一个比较完整的认识。
    另外对Android的音视频处理也很感兴趣。
    作者回复

    音视频同步是很难的、还有带宽预测、视频编码。其实RTC是几乎是音视频最难的使用场景。

    2021-11-23 14:17:32

  • 1900

    2021-11-22 19:26:02

    数字图像处理和一些前处理方法会用到信号与系统以及数字信号处理的知识吧?
    作者回复

    是的

    2021-11-23 14:18:12

  • Geek_25f406

    2024-12-06 15:23:33

    李江老师您好,想请教一下:
    1.现在一直在做嵌入式音视频,但是对于后面的路不知道咋走了,是要学习webrtc往pc走以后得发展才会更好麽
    2.现在流媒体开发是不是用得最多的是c++了
    作者回复

    1、这个还是按照自己兴趣点来会更好一些,我个人建议可能学习一些常用库的内部原理会更好一些,比如ffmpeg、webrtc、x264等,像如何采集到视频、如何进行编码解码、打包和组帧、如何传输视频数据这些更底层的实现原理。然后在这个学习过程中可以继续深入学习编码算法、传输算法等核心技术就更好了。你不一定会直接做这些核心技术的开发,但是懂得这些核心技术之后可以更方便做视频相关的业务
    2、是的,用的最多的是C和C++

    2025-04-01 19:44:12

  • 武丽权

    2023-03-04 22:02:11

    老師有沒有學習群呢?想進群和同學們共同學習
  • 麦嘎

    2022-09-15 17:42:41

    想问一下老师,音视频技术的岗位对学历要求高吗?比如像算法这类岗位一般大公司才招而且学历要求高,大专学历搞算法很容易失业。我就是大专学历,怕学了无用武之地。
    作者回复

    其实坦白讲我觉得有的公司可能会真的卡学历,这个可能是每个公司有自己的用人标准吧。
    对于我个人来说,我去面试一个人还是看个人能力的和项目经历的。能力强的人肯定是有用武之地,所以还是需要你自己努力提升自己的能力的。
    我印象中我读研的时候,有一位同学是某个不知名的科技学院考入浙大的研究生的,最后能力非常强,硕士期间表现优异,同时被剑桥大学还有苹果公司发offer了。
    所以,会不会有可能被卡学历?有可能会的。但是也有不卡学历的公司,如果你有一段优秀的工作经历,之后学历就会慢慢被淡化的。

    2022-11-21 17:39:58

  • 左子穆

    2022-04-16 17:28:23

  • Geek8435

    2022-03-11 21:04:32

    学通信的看那张图,好熟悉的感觉,就是信源编码和信道编码
  • 九灵

    2021-12-06 22:37:14

    老师你好,我是从事服务端开发的,目前在建设类似阿里云MPS的能力。由于短视频这块目前能参考的方案不多,想跟你学习一下 视频服务落地 有哪些可以做的事情。
    作者回复

    服务端我没怎么做过,不好意思。不然我会误导你,哈哈

    2021-12-24 10:32:53

  • litmango🥭

    2021-11-25 20:21:58

    有必要钻研到这么底层乃至到这种数学公式吗
    作者回复

    一步步来。先从如何使用视频技术开始,然后再到如何用好视频技术。在如何用好的阶段就需要了解原理了,知道一个东西是如何工作的,这样你才能更好的使用它。

    2021-11-29 11:53:04

  • Fan

    2021-11-22 19:07:55

    什么开发语言的呢
    作者回复

    C/C++

    2021-11-23 14:18:05