“深入浅出”系列之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…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...