“深入浅出”系列之FFmpeg:(3)音视频开发的学习路线和必备知识
一、岗位要求
音视频开发属于我自己想要学习的板块,我想知道公司招聘音视频开发工程师所需要的条件,于是我就从招聘网站上找来了几个有关音视频开发的岗位需求,内容仅供参考:
(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、一些前沿的虚拟现实、虚拟仿真软件领域的基础软件开发,这个市场稍微小一些,但是依然有公司在做。
相关文章:
“深入浅出”系列之FFmpeg:(3)音视频开发的学习路线和必备知识
一、岗位要求 音视频开发属于我自己想要学习的板块,我想知道公司招聘音视频开发工程师所需要的条件,于是我就从招聘网站上找来了几个有关音视频开发的岗位需求,内容仅供参考: (1)算法工程师-视频编解码 …...
Webpack简述
一、为什么要构建工具 人类喜欢书写的代码以及开发方式计算机不喜欢,构建工具的作用就是让人类舒舒服服写自己喜欢的代码,然后一打包生成计算机喜欢的代码 第一个webpack自身仅仅是将我们引入的模块打包成一个文件(编译import)&am…...
解决 Error: Invalid or corrupt jarfile day04_studentManager.jar 报错问题
在 Java 开发过程中,我们可能会遇到这样的报错信息:Error: Invalid or corrupt jarfile day04_studentManager.jar。这个错误通常表示 day04_studentManager.jar 文件可能已损坏或无效,下面将为大家详细介绍如何解决这个问题。 一、错误点分…...
ACL基础理论
ACL ——访问控制列表 ACL属于策略的一种 ACL访问控制列表的作用: 访问控制:在路由器流量流入或流出的接口上,匹配流量,然后执行设定好的动作:permit(允许)、deny(拒绝ÿ…...
庄周梦蝶1
和尚大概的意思如下:人的每一个梦境都是一个世界,这些世界统称三千世界。每一个世界当中所谓时间的跨度不同,发展程度不同,但是里面都有一个你。这些世界是同时存在的,所以不存在未来过去和现在,因为你就存…...
使用SIPP发起媒体流性能测试详解
使用SIPP发起媒体流性能测试详解 一、SIPP工具简介二、测试前的准备三、编写测试脚本四、运行测试五、分析测试结果六、总结SIPP(SIP Performance Protocol)是一个开源工具,专门用于SIP(Session Initiation Protocol)协议的性能测试和基准测试。SIP是一种用于控制多媒体通…...
瑞利衰落信道机理的详解
瑞利衰落信道(Rayleigh fading channel)是一种无线电信号传播环境的统计模型,用于描述信号在无线信道中的传播特性。这种模型假设信号通过无线信道后,其信号幅度是随机的,即“衰落”,并且其包络服从瑞利分布…...
PyTorch使用教程(2)-torch包
1、简介 torch包是PyTorch框架最外层的包,主要是包含了张量的创建和基本操作、随机数生成器、序列化、局部梯度操作的上下文管理器等等,内容很多。我们基础学习的时候,只有关注张量的创建、序列化,随机数、张量的数学数学计算等常…...
Bash语言的函数实现
Bash语言的函数实现 Bash(Bourne Again SHell)是一种流行的命令行解释器,用于Unix和类Unix操作系统。它不仅支持命令行操作,还能通过脚本语言进行编程。函数是Bash脚本编程中的一个重要概念,可以帮助我们组织代码、提…...
ChatGPT 写作系列
ChatGPT 辅助写作 | 专栏 1 写作核心 先讲一下 ChatGPT 写作的核心。核心就是需要有文章大纲,而且文章大纲要足够细致。 具体怎么做呢? 提前准备多级标题大纲,刚开始有两个级别的标题就行,等用熟练了再细化。分一级标题&…...
RK3576 Android14 状态栏和导航栏增加显示控制功能
问题背景: 因为RK3576 Android14用户需要手动控制状态栏和导航栏显示隐藏控制,包括对锁屏后下拉状态栏的屏蔽,在设置功能里增加此功能的控制,故参考一些博客完成此功能,以下是具体代码路径的修改内容。 解决方案&…...
SDL2:arm64下编译使用 -- SDL2多媒体库使用音频实例
更多内容:XiaoJ的知识星球 SDL2:Android-arm64端编译使用 2. SDL2:Android-arm64端编译使用2.1 安装和配置NDK2.2 下载编译SDL22.3 SDL2使用示例:Audio2.4 Android设备运行 2. SDL2:Android-arm64端编译使用 在Linux系…...
Syncthing在ubuntu下的安装使用
以前安装这个软件的时候, 是在windows和mac上,都是图形化的安装方式,但是ubuntu不太一样,需要增加源,然后执行命令。安装的系统版本是2004。 参考链接1,主要命令包含下面几个部分: 第一步&…...
使用 Helm 安装 Redis 集群
在 Kubernetes 集群中使用 Helm 安装 Redis 集群可以极大地简化部署和管理 Redis 的过程。本文将详细介绍如何使用 Helm 安装 Redis 集群,并提供一些常见问题的解决方案。 前提条件 Kubernetes 集群。(略)已安装 Helm 工具。搭建了存储类nf…...
基于32QAM的载波同步和定时同步性能仿真,包括Costas环的gardner环
目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要 载波同步是…...
【ArcGIS微课1000例】0140:总览(鹰眼)、放大镜、查看器的用法
文章目录 一、总览工具二、放大镜工具三、查看器工具ArcGIS中提供了三种局部查看的工具: 总览(鹰眼)、放大镜、查看器,如下图所示,本文讲述这三种工具的使用方法。 一、总览工具 为了便于效果查看与比对,本实验采用全球影像数据(位于配套实验数据包中的0140.rar中),加…...
使用QQ登录(头条项目-09)
一 QQ登录开发文档 QQ登录:即我们所说的 第三⽅登录,是指⽤户可以不在本项⽬中输⼊密码,⽽直接 通过第三⽅的验证,成功登录本项⽬。 1.1 QQ互联开发者申请步骤 若想实现QQ登录,需要成为 QQ互联的开发者,…...
iOS页面设计:UIScrollView布局问题与应对策略
在iOS开发中,UIScrollView是一个极其重要且常用的控件,它允许用户通过手势滑动查看大量内容。然而,在利用UIScrollView进行页面布局时,开发者往往会遇到一些挑战。本文将深入探讨UIScrollView布局中常见的问题,并提供相…...
Linux提权-02 sudo提权
文章目录 1. sudo 提权原理1.1 原理1.2 sudo文件配置 2. 提权利用方式2.1 sudo权限分配不当2.2 sudo脚本篡改2.3 sudo脚本参数利用2.4 sudo绕过路径执行2.5 sudo LD_PRELOAD环境变量2.6 sudo caching2.7 sudo令牌进程注入 3. 参考 1. sudo 提权原理 1.1 原理 sudo是一个用于在…...
vscode 设置
一、如何在vscode中设置放大缩小代码 1.1.文件—首选项——设置 1.2.在搜索框里输入“Font Ligatures”,然后点击"在settings.json中编辑" 1.3.在setting中("editor.fontLigatures":前)添加如下代码 "editor.mous…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
文章目录 一、开启慢查询日志,定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...
医疗AI模型可解释性编程研究:基于SHAP、LIME与Anchor
1 医疗树模型与可解释人工智能基础 医疗领域的人工智能应用正迅速从理论研究转向临床实践,在这一过程中,模型可解释性已成为确保AI系统被医疗专业人员接受和信任的关键因素。基于树模型的集成算法(如RandomForest、XGBoost、LightGBM)因其卓越的预测性能和相对良好的解释性…...
