大厂流媒体开发工程师的工作内容主要是做什么 ?
作者:韦睿
目前国内流媒体开发做的需求主要包含哪些内容呢?
很多大厂数年前就已经构建了各自的音视频底层框架,发展到现在底层框架层面是不是比较完善了,现在的需求是不是就只有 修bug、适配新协议 这些?
具体到业务上又会有哪些需求呢?
在大厂里流媒体/音视频工作到底需要做些什么?
一、音视频的本质
音视频的本质就是在极端复杂的网络情况下,充分利用终端硬件,给用户最好的音视频体验。
所以说,音视频的开发过程其实是一个追求极致的过程。
换句话说,如果你的业务有很多用户,是公司的主营业务,上面老板也非常重视这一块业务,那你能做的事情就会很多。
如果你的业务可做可不做,你连修bug、适配新协议这些工作都不用做。
其实很多初创公司都是拿webrtc直接编译,然后用接口封装下,就用于直播、视频通话了。
二、大厂的现状是怎么样的呢?
首先,当今的流媒体应用领域已经不仅仅局限于视频通话了,它面向的是音频通话、直播、极速直播(比如远程抓娃娃)、视频会议、在线教育、视频通话、互动白板等诸多业务场景或领域。
每个领域的用户痛点是不同的,所以底层框架并不是“很早就构建”。
要完整解决用户问题,在webrtc形成的音视频底层框架的基础上,轻则换组建,重则要重构。
比如你要应用于连麦直播,为了提升音频质量,至少音频编码要从opus换成aac吧。
至于重构,出于信息安全的考虑,我只能告诉你,这几个大厂的音视频底层框架其实都是经过重构过的。
接下来,我从流媒体涉及到的模块以及分工来展开讲述
现在的流媒体开发,已经不是几个人小作坊似的开发模式了,一般会按照模块进行部门或组的分工。
大体可以分为SDK组,主要职能是提供对外接口支持、对接指导以及业务层、逻辑层的维护;
音频组,主要工作分为音频工程开发、音频算法开发、音频传输开发。
其中,音频算法开发主要是实现特定业务场景或通用场景的音频前处理算法开发及优化、以及音频编解码协议、算法、实现的优化,音频传输开发主要是在jitbuffer,plc等技术基础上进行音频传输的优化,而音频工程开发主要是集成其他两部分同事的工作打包给SDK同事进行流媒体SDK的集成开发;
视频组,主要职能就是视频图像处理及视频编解码;
网络组,主要职能就是负责流媒体的传输模块,在保证延时的基础上提升流媒体的弱网抗性,这个模块里耳熟能详的技术有fec,arq,svc等等,其实也远远不限定于这些技术。
经过业务场景多元化和模块划分很细的讲解,你应该知道这里工作量很大了吧。
每个大厂的阶段不一样,业务不一样,这里不太好直接指明他们具体会有哪些工作,也涉及到人家信息安全的风险,只能说这里工作量很大,不然人家也不会招那么多人,而且还在继续招人。
为了让你初步了解这里的工作量,举个例子,比如音频采集。你看起来是不是很容易。
但是实际上,现在大厂里面有一些人就是专门做这一块的,因为现实中设备很复杂,比如你要考虑蓝牙、麦克风、耳机等等不同设备的采集,兼容性问题突出;
其次,不同设备不同场景下的采集方式是不一样的,比如你用耳机采集,回声问题影响较小,如果你应用于直播场景,那你就要关掉硬件降噪,对软件3A进行适配,在不引入回声的基础上提升音质;
最后就是,Android里面,opensl和audiotrack,audiorecord不同设备不同场景下的选择也是一大难点。
三、关于日常工作“修Bug”,还是纠正一下。
对咱们做工程的来说,工作永远不可能是修Bug,即使产品或者技术再稳定,更不要把自己的工作局限为修Bug。
一旦一个音视频SDK接入的APP多了,用户规模上去了,整个SDK方方面面都是挑战,比如稳定性、性能优化、SDK本身质量、音视频体验上的优化。
即使你修一个Bug,也不会是一个单点问题,而是系统问题,你需要考虑对其他模块的影响,你需要考虑是否有一种通用的方案来系统解决同类型的问题,甚至你需要考虑解决了这个Bug之后怎么验证等等。
上面这些都是我们的日常工作。除了日常工作,其他的需要思考的地方就更多了。
比如你要考虑排障成本、测试效率、服务成本(需要基于用户反馈找到ROI,以最小成本满足用户需求),也要考虑SDK的复用,如何快速赋能更多业务。
每个大厂阶段不一样,水平不一样,你的leader水平可能也不一样,这些你可能之前没有考虑过,但是实际上真正提升技术以及让你的SDK做的更好都是我们需要深刻思考的。
四、封神之路
Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的。只能通过一点点的学习和积累把这块的知识串联积累起来。
不少人在音视频初级入门过程中只是接触Android多媒体展示相关的API,通过单独的列举和使用这些API,只能让你对Android音视频处理有一个基本的轮廓,知识点都是零散的,根本没有有效的途径将所有知识点串联起来。
这样对于音视频的了解和控制就仅仅局限于最外层的API了,在深入学习之前,往往这些API就已经把脑袋都弄大了,而且,仅仅停留在使用API的层次,不能让你适应不断变化的需求。
如果最开始的方向都错了,那么不管你如何努力,都学不好音视频!
而如果是跟着正确的学习路线一步步深挖,那么一切都不是问题!
这里给大家推荐《音视频开发核心知识点笔记》,有需要的朋友们可以前往公号中:Android开发之家自行访问查阅。
音视频初级入门
image- Android 音视频开发(一):通过三种方式绘制图片
- Android 音视频开发(二):使用 AudioRecord 采集音频PCM并保存到文件
- Android 音视频开发(三):使用 AudioTrack 播放PCM音频
- Android 音视频开发(四):使用 Camera API 采集视频数据
- Android 音视频开发(五):使用 MediaExtractor 和 MediaMuxer API 解析和封装 mp4 文件
- Android 音视频开发(六):MediaCodec API 详解
- Android 音视频开发(七):音视频录制流程总结
- ……
音视频中级进阶:OpenSL ES 学习
- Android OpenGL ES 开发(一): OpenGL ES 介绍
- Android OpenGL ES 开发(二): OpenGL ES 环境搭建
- Android OpenGL ES 开发(三): OpenGL ES 定义形状
- Android OpenGL ES 开发(四): OpenGL ES 绘制形状
- Android OpenGL ES 开发(五): OpenGL ES 使用投影和相机视图
- Android OpenGL ES 开发(六): OpenGL ES 添加运动效果
- Android OpenGL ES 开发(七): OpenGL ES 响应触摸事件
- Android OpenGL ES 开发(八): OpenGL ES 着色器语言GLSL
- Android OpenGL ES 开发(九): OpenGL ES 纹理贴图
- Android OpenGL ES 开发(十): 通过GLES20与着色器交互
- ……
**如果需要这份《音视频开发核心知识点笔记》,可以前往公号中:Android开发之家自行访问查阅。
音视频高级探究
音视频编解码技术
- 音视频编解码技术(一):MPEG-4/H.264 AVC 编解码标准
- 音视频编解码技术(二):AAC 音频编码技术
- ……
流媒体协议
- 流媒体协议(一):HLS 协议
- 流媒体协议(二):RTMP协议
- ……
多媒体文件格式
- 多媒体文件格式(一):MP4 格式
- 多媒体文件格式(二):FLV 格式
- 多媒体文件格式(三):M3U8 格式
- 多媒体文件格式(四):TS 格式
- 多媒体文件格式(五):PCM / WAV 格式
- ……
FFmpeg 学习
- FFmpeg命令行工具学习(一):查看媒体文件头信息工具ffprobe
- FFmpeg命令行工具学习(二):播放媒体文件的工具ffplay
- FFmpeg命令行工具学习(三):媒体文件转换工具ffmpeg
- FFmpeg命令行工具学习(四):FFmpeg 采集设备
- FFmpeg命令行工具学习(五):FFmpeg 调整音视频播放速度
- ……
- FFmpeg 学习(一):FFmpeg 简介
- FFmpeg 学习(二):Mac下安装FFmpeg
- FFmpeg 学习(三):将 FFmpeg 移植到 Android平台
- FFmpeg 学习(四):FFmpeg API 介绍与通用 API 分析
- FFmpeg 学习(五):FFmpeg 编解码 API 分析
- FFmpeg 学习(六):FFmpeg 核心模块 libavformat 与 libavcodec 分析
- ……
- FFmpeg 结构体学习(一):AVFormatContext 分析
- FFmpeg 结构体学习(二):AVStream 分析
- FFmpeg 结构体学习(三):AVPacket 分析
- FFmpeg 结构体学习(四):AVFrame 分析
- FFmpeg 结构体学习(五):AVCodec 分析
- FFmpeg 结构体学习(六):AVCodecContext 分析
- FFmpeg 结构体学习(七):AVIOContext 分析
- FFmpeg 结构体学习(八):FFMPEG中重要结构体之间的关系
- ……
- FFmpeg 开发之 AVFilter 使用流程总结
- FFmpeg 过时 Api 汇总整理
- ……
**如果需要这份《音视频开发核心知识点笔记》,可以前往公号中:Android开发之家自行访问查阅。