一、岗位要求
音视频开发属于我自己想要学习的板块,我想知道公司招聘音视频开发工程师所需要的条件,于是我就从招聘网站上找来了几个有关音视频开发的岗位需求,内容仅供参考:
(1)算法工程师-视频编解码
参与JVET / VVC的下一代视频编码标准设计和算法研究;
参与视频编码(包括但不限于VVC/AV1/AVS3)优化:通过信号处理和机器学习的快速编码决策、数据结构、并行框架设计,优化编码速度,同时在有竞争力的视频编码内核基础上,探索基于语义的内容自适应编码优化;
参与超低带宽的视频压缩:针对超低带宽场景下,探索针对信号处理和语义的信息论极限;
参与视频编码与处理联合优化:在标准编码框架的基础上,借助AI领域的新技术成果来研究视频信号的表征、编码与处理,将视频前后处理与编码联合优化,提升端到端压缩效果;
进行面向人眼视觉模型编解码技术研究:将视频编码与质量评价相结合,提升人眼压缩体验;
参与为VR/ AR等新兴应用设计和实施新颖的视频处理、编码和质量评估算法,以推动端到端系统体验优化。
加入我们,迎接未来的视频洪流的挑战,同时为用户提供无处不在的沉浸式高品质视频服务,布局下一代多媒体标准开发和沉浸式多媒体体验创新(如虚拟现实、增强现实、沉浸式音视频等)
职位要求【必备项】
1、本科及以上学历,计算机等相关专业,有视频或图像编码和处理研究背景;
2、有视频编码优化或视频标准的经验优先考虑,如X264,X265,VVENC, VVC,JEM,HEVC,SHVC,SCC,H.264 / AVC,SVC,MVC,AVS,VP8和/或图像编码标准,如JPEG,JPEG-XR,JPEG HDR或JPEG2000;
3、精通C ++和C编程,有使用视频编码开源软件或标准参考软件的经验,如X264,X265,VVENC, VTM,JEM,HM,SHM,JM和JSVM优先考虑;
4、有出色的分析研究及创新能力。
(2)研发工程师-音视频
负责为用户提供最优的播放体验,负责直播推流和视频播放,包括但不限于音视频采集渲染、RTC视频传输、QOS优化、视频架构设计、客户端性能优化等;
职位要求【必备项】
- 熟悉音视频引擎技术架构和常见的多媒体框架,如WebRTC、FFMPEG、GStreamer等;
- 了解音视频通话的客户端架构,了解音视频采集、编码、推流等环节;如H.264、Opus、AAC、AV1等,熟悉常见的系统层,如RTP、RTCP、RTSP、RTMP等;
- 熟练掌握C/C++开发语言,计算机基础扎实;
- 扎实的网络技术基础,对Socket通信、UDP、TCP/IP、HTTP、ICE有深刻的理解;
- 有较强的学习欲、好奇心和进取心,积极乐观、责任心强,具有良好的团队沟通和协作能力
(3)云计算工程师
可以参与到弹性计算、智算超算、云存储、云网络、混合云、数据库、云终端、云原生、操作系统、高性能网络、芯片、信息安全、其他(架构及平台研发)等一个或多个领域,开展科研及技术研发工作。
1.从事云计算、云网融合领域的新技术研究探索,开展技术评测与验证;
2.承担天翼云操作系统、弹性计算、分布式存储、服务器、云安全等技术及软硬协同、云网融合、云边协同、ABC一体化(AI/BigData/Cloud)等方向关键问题的深入研究,提出创新方法,并与产品研发团队协同,完成落地实施;
3.跟踪、研究云计算领域前沿技术和相关产业的发展趋势,提出云计算领域关键核心技术攻关方向,探索和解决核心技术问题,提出创新性解决方案;
4.产出高质量的研究报告、知识产权和技术标准,丰富中国电信在云计算领域的知识产权储备;
二、学习路线
根据上面的这些岗位要求,再从互联网上看一下其他人的经验,我总结出音视频开发的学习路线:
音视频流媒体所需要具备的技能:
1、音视频基础(ffmpeg环境搭建,音视频基础)
2、FFMPEG编程(FFMPEG命令,音视频渲染,FFmpeg API,音视频编码,音视频封装格式,音视频过滤器,播放器开发,ffplay播放器,ffmpeg录制转码)
3、流媒体(rtmp流媒体,hls流媒体,http-flv流媒体,RTMP/HLS/HTTP-FLV流媒体服务器,RTSP流媒体)
主流的流媒体协议主要有:RTMP,HLS,RTSP等
4、WEBRTC(WebRTC中级开发, WebRTC高级开发,Janus服务器源码)
(1)从一个简单的音视频播放器开始
FFmpeg常见的API --> 音频队列视频队列 --> PTS DTS 音视频同步 --> OpenGL渲染视频 --> 音频冲采样 --> 音频播放 --> 硬件解码
(2)视频容器mp4封装技术
h.264 265编码 --> aac编码 --> 音视频同步 --> pts 时间基
(3)在音视频开发领域里,OpenGL基础是必须要掌握的。
1、基本概念和安装配置
学习图形学的基本概念:像素、坐标系、颜色、矢量、矩阵等。
绘制基本形状:使用顶点缓冲对象(VBO)和顶点数组对象(VAO)绘制三角形、四边形等基本形状。
简单着色器:编写顶点着色器(Vertex Shader)和片段着色器(Fragment Shader),理解着色器的基本概念。
2、变换和3D投影
变换矩阵:学习平移、旋转、缩放变换,以及使用矩阵表示和计算这些变换。
视图变换:了解视角变换和观察点的概念,学习设置观察矩阵。
投影变换:理解正交投影和透视投影,学习设置投影矩阵。
3、纹理映射
基本纹理映射:学习加载和使用纹理,理解纹理坐标和采样。
多重纹理:了解如何在一个物体上应用多个纹理。
纹理过滤和环绕方式:学习设置纹理的过滤模式(如线性过滤、最近邻过滤)和环绕方式(如重复、镜像等)。
4、光照和材质
基本光照模型:学习Phong光照模型,包括环境光、漫反射光、镜面反射光。
光源:学习如何在场景中添加点光源、平行光和聚光灯。
材质属性:了解物体材质的属性,如漫反射、镜面反射、发光等。
5、高级OpenGL技术
帧缓冲对象(FBO):学习使用FBO进行离屏渲染,理解多重渲染目标(MRT)。
高级着色器技术:了解几何着色器(Geometry Shader)和计算着色器(Compute Shader)的使用。
后期处理:实现一些常见的后期处理效果,如模糊、边缘检测、HDR等。
6、动画和物理
基本动画技术:学习关键帧动画、骨骼动画等。
物理引擎:了解如何结合物理引擎(如Bullet)进行物理模拟。
7、优化和高级渲染技术
性能优化:学习减少绘制调用、使用Instancing、批处理等技术来优化性能。
高级渲染技术:了解延迟渲染(Deferred Shading)、全局光照(Global Illumination)、环境光遮蔽(Ambient Occlusion)等。
三、学习阶段
(1)音视频流媒体开发
第一阶段:
无论是音视频图像渲染方向,还是流媒体方向,音视频基础都是需要学习的,比如rgb、yuv,FFmpeg 播放器核心,音视频编解码,硬件编解码,H.264 265编码算法,解析mp3/aac/mp4/flv/mkv这些视频容器。以及如何将264 265这些视频流封装到mp4 都是需要深入学习的
流媒体开发方向侧重于网络通讯,所以Linux网络socket通讯编程是基础中的基础,从自己手写tcp udp私有协议开始,到深入tcp协议栈,可靠性udp封装,udp打洞 p2p,流媒体转发服务器等,都要滚瓜烂熟。 然后就是一些常见的流媒体协议,比如rtsp rtmp rtcp rtp hls sip等。当然这些东西,你音视频网络通讯功底好,就非常容易学习。
第二阶段:
深入研究网络通讯,比如webrtc这种低延迟,经济实惠的p2p 结合relay的框架, 比如它里面的udp打洞,网络拥塞,都懂,丢包重传等机制。这些东西一方面需要你的网络通讯基础,另一方面需要C++工程能力。
第三阶段:
进一步研究这一套低延迟框架如何适应大规模的应用场景。这种工作更加偏向于后端音视频服务器开发,当然这种岗位现在局限于一些大厂。中小公司没这种技术以及金钱的实力
应用场景:视频点播、视频会议、远程教育、远程医疗、短视频、在线直播系统等
(2)OpenGL+音视频
这些岗位主要做的工作,其实在音视频领域叫后期处理。
1、 视频特效叠加。这个属于AR领域,直播带货虚拟场景,直播特效,人脸上带个狗鼻子,变脸,最近几年新兴的一些应用场景特别多。我们将实时采集的图片,交给机器学习,机器学习就能实时识别场景里面的内容,比如识别到人脸,就能准确标定人脸上鼻子的具体位置,嘴唇的具体位置,有了这些位置数据以后,我们就可以用opengl叠加各种特效,动画。 所以这个属于比较前沿的AR领域。
2、AIGC领域,随着大模型人工智能越来越火,那么大模型要接触到终端消费者,一些前端的交互界面,渲染,都需要用到OpenGL。
3、各种设计软件领域,比如CAD、CAE啊,这几年国产替代,很多国产设计软件都在大量招人,这个领域一般跟Qt结合开发的岗位比较多。
4、游戏引擎,以及游戏引擎周边的工具软件开发,比如游戏编辑器啊等等。
5、一些前沿的虚拟现实、虚拟仿真软件领域的基础软件开发,这个市场稍微小一些,但是依然有公司在做。