风口持续!22 年仍旧稀缺的 Android 人才!

字节流动

共 3521字,需浏览 8分钟

 · 2022-05-18

/  前言  /

如今音视频的知识纷繁复杂,自己学习非常困难,既需要非常扎实的基础知识,又需要有很多的工程经验。

而音视频从业者基本上有两个层面:一个层面是搞音视频算法,这类人非常少,需要有深的数学能力和算法背景,这类人一般都会选择去大公司,薪水百万是最low 的。

另一个层面是搞工程,这类人相对较多,他们有扎实的理论基础,很强的技术功底,对音频、视频都非常熟悉。这些人工资要比一般开发者高20%左右;随着5G时代的到来,不管作为开发者还是用户,现在我们每天都会接触到各种各样的短视频、直播类的App,与之相关的音视频方向的开发也变得越来越重要。现在有大量的公司开始寻找音视频人才,一个稍好点的音视频人才现在可能会有3-4家公司抢着要。因此,对音视频人才的需求也从小众变成了大众,这更多的是大家对未来市场的预期导致的结果。


/  小众领域的神秘面纱  /

但是对于大多数Android开发者来说,从事Android音视频相关的开发可能目前还算是个小众领域,虽然可能目前深入这个领域的开发者还不是太多,但这个方向涉及的知识点可一点都不少。

语言
  • C/C++:音视频开发经常需要跟底层代码打交道,掌握C/C++是必须的技能。这方面资料很多,相信我们都能找到。
  • ARM NEON汇编:这是一项进阶技能,在视频编解码、各种帧处理低下时很多都是利用NEON汇编加速,例如FFmpeg/libyuv底层都大量利用了NEON汇编来加速处理过程。虽说它不是必备技能,但有兴趣也可以多多了解,具体资料可以参考ARM社区的教程。
框架
  • FFmpeg:可以说是业界最出名的音视频处理框架了,几乎囊括音视频开发的所有流程,可以说是必备技能。
  • libyuv:Google开源的YUV帧处理库,因为摄像头输出、编解码输入输出也是基于YUV格式,所以也经常需要这个库来操作数据(FFmpeg也有提供了这个库里面所有的功能,在libswscale都可以找到类似的实现。不过这个库性能更好,也是基于NEON汇编加速)。
  • libx264/libx265:目前业界最为广泛使用的H.264/H.265软编解码库。移动平台上虽然可以使用硬编码,但很多时候出于兼容性或画质的考虑,因为不少低端的Android机器,在低码率的场景下还是软编码的画质会更好,最终可能还是得考虑使用软编解码。
  • OpenGL ES:当今,大部分视频特效、美颜算法的处理,最终渲染都是基于GLES来实现的,因此想要深入音视频的开发,GLES是必备的知识。另外,除了GLES以外,Vulkan也是近几年开始发展起来的一个更高性能的图形API,但目前来看,使用还不是特别广泛。
  • ExoPlayer/ijkplayer:一个完整的视频类App肯定会涉及视频播放的体验,这两个库可以说是当下业界最为常用的视频播放器了,支持众多格式、协议,如果你想要深入学习视频播放处理,它们几乎也算是必备技能。

打牢基础之后,我们可以循序渐进增强自己的实际业务能力:

  1. 在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView,SurfaceView,自定义 View
    2. 在 Android 平台使用 AudioRecord 和 AudioTrack API 完成音频 PCM 数据的采集和播放,并实现读写音频 wav 文件
    3. 在 Android 平台使用 Camera API 进行视频的采集,分别使用 SurfaceView、TextureView 来预览 Camera 数据,取到 NV21 的数据回调
    4. 学习 Android 平台的 MediaExtractor 和 MediaMuxer API,知道如何解析和封装 mp4 文件
    5. 学习 Android 平台 OpenGL ES API,了解 OpenGL 开发的基本流程,使用 OpenGL 绘制一个三角形
    6. 学习 Android 平台 OpenGL ES API,学习纹理绘制,能够使用 OpenGL 显示一张图片
    7. 学习 MediaCodec API,完成音频 AAC 硬编、硬解
    8. 学习 MediaCodec API,完成视频 H.264 的硬编、硬解
    9. 串联整个音视频录制流程,完成音视频的采集、编码、封包成 mp4 输出
    10. 串联整个音视频播放流程,完成 mp4 的解析、音视频的解码、播放和渲染
    11. 进一步学习 OpenGL,了解如何实现视频的剪裁、旋转、水印、滤镜,并学习 OpenGL 高级特性,如:VBO,VAO,FBO 等等
    12. 学习 Android 图形图像架构,能够使用 GLSurfaceviw 绘制 Camera 预览画面
    13. 深入研究音视频相关的网络协议,如 rtmp,hls,以及封包格式,如:flv,mp4
    14. 深入学习一些音视频领域的开源项目,如 webrtc,ffmpeg,ijkplayer,librtmp 等等
    15. 将 ffmpeg 库移植到 Android 平台,结合上面积累的经验,编写一款简易的音视频播放器
    16. 将 x264 库移植到 Android 平台,结合上面积累的经验,完成视频数据 H264 软编功能
    17. 将 librtmp 库移植到 Android 平台,结合上面积累的经验,完成 Android RTMP 推流功能
    18. 上面积累的经验,做一款短视频 APP,完成如:断点拍摄、添加水印、本地转码、视频剪辑、视频拼接、MV 特效等功能

/  如何学习音视频开发  /

这里给大家分享一份《音视频精编源码解析》,内容分为7个章节,涵盖 WebRTC Native 源码导读、X264 源码解读、FFmpeg、ijkplayer 源码分析系列、jsmpeg 源码解析、Live555 源码解析、Opus 源码解析,一共 675 页。

第一章 WebRTC Native 源码导读

第一节-安卓相机采集实现分析
第二节-安卓预览实现分析
第三节-安卓视频硬编码实现分析
第四节-VideoCRE 与内存抖动优化
第五节-安卓 P2P 连接过程和 DataChannel 使用
第六节-视频数据 native 层之旅
第七节-混音
第八节-P2P 连接过程完全解析
第九节-API 概览
第十节-RTP H.264 封包与解包

第二章 X264源码解读

第一节-概述
第二节-x264命令行工具
第三节-编码器主干部分-2
第四节-x264_slice_write()
第五节-滤波(Filter)部分
第六节-宏块分析(Analysis)部分-帧内宏块(Intra)

第四章 ijkplayer 源码分析系列

第一节-整体结构总结
第二节-read_thread流程
第三节-解码流程
第四节-渲染流程

扫码即可领取资料
第五章 jsmpeg 源码解析

第一节-基础知识 字符处理 ArrayBuffer TypedArray
第二节-TS码流 PAT PMT
第三节-源码buffer.js对Uint8Array的封装
第四节-源码ts.js TS格式解析流程
第五节-源码mpeg1.js MPEG1码流结构
第六节-概要总结

第六章 Live555源码解析

第一节-GROUPSOCK
第二节-MEDIUM媒体基础类
第三节-MEDIASOURCE、MEDIASINK、MEDIASESSION、MEDIASUBSESSION
第四节-FRAMEDSOURCE、RTPSOURCE、RTPSINK
第五节-GENERICMEDIASERVER、RTSPSERVER、RTSPCLIENT
第六节-testRTSPClient
第七节-ServerMediaSession、ServerMediaSubsession、live555MediaServer

第七章 Opus源码解析

第一节-简介
第二节-编解码器使用
第三节-手撸一个Opus编码程序
第四节-Opus解码程序实现
第五节-OggOpus封装器全解析
第六节-Opus编码基础之认识声音
第七节-Opus编码基础之压缩编码


最后

音视频是 Android 开发者一定要学会掌握的技术,各大厂目前对音视频人才求贤若渴,精通音视频的话将成为与其他开发者的分水岭!

想要深入学习了解音视频 ,那么这份《音视频精编源码解析》一定不要错过。需要的朋友扫描下方二维码添加【天天老师】: 即可领取!


PS:在5月17-18日,我们特邀腾讯课堂路哥为大家带来《音视频特训营》,手把手带大家一起进入音视频开发探索之路~


浏览 68
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报