国内是不是很缺客户端音视频的开发人员?现在上车还来得及吗?

Posted 上马定江山

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了国内是不是很缺客户端音视频的开发人员?现在上车还来得及吗?相关的知识,希望对你有一定的参考价值。

社招方面

很缺音视频相关领域的开发人员。计算机的岗位我个人大概分为四类:1、算法岗 2、前端 3、后台 4、客户端,但是上面的四类岗位中都会有音视频相关的岗位。例如:算法岗:负责编解码器的算法优化、美颜算法优化等,前端、客户端:负责各平台上音视频的编解码,传输,渲染等开发工作,后台:负责云端录制、转码、混流以及其他需要后台参与的业务逻辑。

但是音视频开发相比于应用、UI层面的业务逻辑开发,需要更多领域相关的知识:例如,排查视频编解码问题的时候,你需要大致了解h264算法和编码参数的意义,新增一个功能时,你需要清楚音视频是如何经过采集、编码、发送、接收、解码、渲染等流程,最终传输到另一台用户设备上的。这也就意味着,音视频开发工作中,工作经验和业务熟悉程度的重要性占比要略高于其它大部分的开发工作(当然,其他开发岗位也是需要经验的哈~~这里只是表明一个比较级关系)。一个实习生可能一两个月就可以参与一些app的开发,但是想要向底层错综复杂的音视频模块提交重要的代码,可能需要等到工作大半年之后。

换言之,由于对相关经验的要求,中途转行到音视频开发的门槛略高于传统app应用层开发的岗位,并且相比于人工智能等大火的领域,音视频开发领域的人数本来就不多,这也就导致了社招时很难找到经验丰富、能力强的高级别工程师。

校招方面

缺人程度大体与其他岗位一样。目前来讲在简历筛选和面试上秉承着宁缺毋滥的态度。互联网公司对于校招普遍都是更加看重潜力胜过经验,丢掉了对工作经验的限制,招聘时可选择的简历就多了起来,自然就没有社招那么缺人了。

如何学习音视频开发?(实时音视频相关)

因为我目前只从事过实时音视频相关的开发工作,所以在这里只分享实时音视频相关的建议。

实时音视频的开发工作可以分为以下几个环节:采集–>预处理–>编码–>组包–>传输–>云端转码–>客户端拉流–>缓冲–>解码–>渲染,想要踏足音视频开发领域,不需要精通所有环节,只需要在一两个环节上精通,其他环节有一个大体的了解,你在面试官的眼里就是一个很好的面试者了。

采集模块:

调用摄像头和麦克风,采集到音视频供后续使用。这是实时音视频的第一步,也是(看似)非常简单的一部。ios平台下因为平台设备统一,基本上就按照业务流程去调用苹果提供的API即可。但是android、Windows等平台,由于硬件厂商的驱动多种多样,系统版本也是五花八门,华为、小米、oppo以及其他数不清的厂商都会有自己的ROM,时常会遇到设备开启失败、用户拔插设备后设备状态获取出错、麦克风无声等等奇怪的问题。如何做好设备管理是一个能有效提升系统健壮性的问题。

预处理:

视频在编码发送前,会进行一次图像处理。美颜滤镜、特效、瘦脸长腿等功能往往就是在这一步实现的。这一个模块可以涉及到很多算法知识,数字图像处理、人体关键点检测等等都是有很多能做文章的地方,如果您想做一些图像算法相关的工作,可以仔细研究一下这个模块。

编码:

编码分为软编码(使用CPU)硬编码(GPU)两种,软编码兼容性更好,并且自由度也更高一些,硬编码器基本都是系统提供的闭源API,性能更高,但有时随着系统升级 API行为被改变时,由于没有源代码,排查起来很麻烦。一般来讲,硬编码没什么可做文章的地方,软编码的话,推荐了解一下ffmpeg的使用和实现,了解一下常用的音视频编码的算法,这样遇到玄学兼容性问题的时候也能够很快排查。

组包、传输:

这一块就是网络层的知识比较多了,实时音视频中直接使用TCP来传输音视频包,延迟太高,一般都会使用自己的私有协议去做。那么如何使用不可靠传输来封装成使用实时音视频的可靠传输协议、如何与后台交互等等都是大坑(我不是很了解这块,我就不多说了)。

云端转码:

我是做客户端的,这一块没有发言权,暂时不说了,欢迎补充。

客户端拉流、缓冲:

与前面的组包、传输类似,接收端接收到数据包后,应该按照怎样的协议请求重传或者排序,并且由于音视频帧往往不是同时到达,如何做音画同步?

解码:

与编码类似,分为软解和硬解,同样推荐了解相关的编解码算法和系统API。

渲染:

一般使用OpenGL、Metal、D3D(Windows这块不太了解,可能我说的过时了)等进行渲染,渲染这一块目前没什么好做文章的环节。

我之前看过一本关于音视频开发入门到精通的学习手册,大概按照整个流程讲了一遍音视频开发,有兴趣的可以看一下:

初级入门篇:

一、绘制图片

1. ImageView 绘制图片

2. SurfaceView 绘制图片

3. 自定义 View 绘制图片

二、AudioRecord API详解

三、使用 AudioRecord 实现录音,并生成wav

  • 创建一个AudioRecord对象
  • 初始化一个buffer
  • 开始录音
  • 创建一个数据流,一边从AudioRecord中读取声音数据到初始化的buffer,一边将buffer中数据导入数据流。
  • 关闭数据流
  • 停止录音

四、用 AudioTrack 播放PCM音频

1.AudioTrack 基本使用

  • MODE_STATIC模式
  • MODE_STREAM模式

2.AudioTrack 详解

  • 音频流的类型
  • Buffer分配和Frame的概念
  • AudioTrack构造过程

3. AudioTrack 与 MediaPlayer 的对比

  • 区别
  • 联系
  • SoundPool

五、使用 Camera API 采集视频数据

1.预览 Camera 数据

2.取到 NV21 的数据回调

六、使用 MediaExtractor 和 MediaMuxer API 解析和封装 mp4 文件

1.MediaExtractor API介绍

2.MediaMuxer API介绍

3.使用情境

七. MediaCodec API 详解

1.MediaCodec 介绍

2.MediaCodec API 说明

3.MediaCodec 流控

  • 流控基本概念
  • Android 硬编码流控
  • Android 流控策略选择

由于文章篇幅受限,剩余内容过多,文中插图有限,下文只能截图目录展示:

中级进阶篇:

  • 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与着色器交互
  • 使用 OpenGL 显示一张图片
  • GLSurfaceviw 绘制 Camera 预览画面及实现拍照
  • 使用OpenGL ES 完成视频的录制,并实现视频水印效果

高级探究篇:

  • 深入学习音视频编码,如H.264,AAC,研究使用开源编解码库,如x.264,JM 等
  • 深入研究音视频相关的网络协议,如 rtmp,hls,以及封包格式,如:flv,mp4
  • 深入学习一些音视频领域的开源项目,如 webrtc,ffmpeg,ijkplayer,librtmp 等等
  • 将 ffmpeg 库移植到 Android 平台,结合上面积累的经验,编写一款简易的音视频播放器
  • 将 x264 库移植到 Android 平台,结合上面积累的经验,完成视频数据 H264 软编功能
  • 将 librtmp 库移植到 Android 平台,结合上面积累的经验,完成 Android RTMP 推流功能

音视频编解码技术

  • 音视频编解码技术(一):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中重要结构体之间的关系

总结:以上就是关于音视频的资料最强整理和概括了(还有部分内容没有截图出来),相信应该是全网最全了,所有资料都是免费分享给大家的,也省去了对音视频感兴趣的小伙伴们四处找资料的时间。

小伙伴们如果有需要这份《音视频入门进阶学习手册》,扫描下方二维码即可免费领取!

以上是关于国内是不是很缺客户端音视频的开发人员?现在上车还来得及吗?的主要内容,如果未能解决你的问题,请参考以下文章

关于开发制作视频素材网站的问题咨询和合作

iOS 白嫖全网影视!限时上架!速度上车!

激光雷达「冰火两重天」:国外破产倒闭,国内上车提速,MPV都用上了

深圳不是说很缺前端吗?为什么我找了半个月还是没找到前端的工作?

现在还需要测试或者QA人员吗?

Android IOS WebRTC 音视频开发总结(六三)-- 2016国内IM云服务行业分析