Android音视频开发-前言

Android音视频开发,我想很多开发者都知道这个概念,音视频开发不仅需要掌握图像、音频、视频的基础知识,并且还需要掌握如何对它们进行采集、渲染、处理、传输等一系列的开发和应用,因此,音视频开发是一门涉及到很多内容的领域,主要内容如下(一图胜千言)


Android音视频开发-前言_第1张图片
音视频-1
采集

采集,在音视频开发中主要针对的是数据从哪里来的问题。图像、视频的可视化数据来自摄像头这毫无疑问,而音频数据则是来自麦克风,关于采集的知识点涉及到如下内容:

  • 系统的摄像头采集接口是什么,怎么用 ?
    如:Windows:DirectShow,Linux:V4L2,Android:Camera

  • 系统的摄像头采集的参数怎么配置,都是什么含义 ?
    如:分辨率、帧率、预览方向、对焦、闪光灯 等

  • 系统的摄像头输出的图像/视频数据,是什么格式,不同格式有什么区别 ?
    如:图片:JPEG,视频数据:NV21,NV12,I420 等

  • 系统的麦克风采集接口是什么,怎么用 ?
    如:Windows:DirectShow,Linux:ALSA & OSS,Android:AudioRecord,iOS:Audio Unit 等

  • 系统的麦克风采集参数怎么配置,都是什么含义 ?
    如:采样率,通道号,位宽 等

  • 系统的麦克风输出的音频数据,是什么格式?
    如:PCM

渲染

渲染,在音视频开发中主要针对的是数据展现的问题。我们知道,图像、视频最终都是要绘制到视图(View层)上面,而音频最终都是要输出到扬声器,因此,做音视频渲染,就要掌握如下的技术知识:

  • 系统提供了哪些 API 可以绘制一张图片或者一帧 YUV 图像数据的 ?
    如:
    Windows:DirectDraw, Direct3D, GDI,OpenGL 等
    Linux: GDI, OpenGL 等
    Android:ImageView,SurfaceView,TextureView,OpenGL 等
  • 系统提供了哪些 API 可以播放一个 mp3 或者 pcm 数据 ?
    如:
    Windows:DirectSound 等
    Linux:ALSA & OSS 等
    Android:AudioTrack 等
处理

渲染,在音视频开发中主要针对的是数据如何加工的问题,那具体怎么处理?如下图:


Android音视频开发-前言_第2张图片
音视频-处理

针对图像和音视频的处理,实现方式除了使用系统的 API,大多数也会使用一些优秀的第三方库,通过掌握这些第三方库的原理和使用方法,基本上就可以满足日常音视频处理工作了,这些库包括但不限于:

  • 图像处理:OpenGL,OpenCV,libyuv,ffmpeg 等
  • 视频编解码:x264,OpenH264,ffmpeg 等
  • 音频处理:speexdsp,ffmpeg 等
  • 音频编解码:libfaac,opus,speex,ffmpeg 等
传输

传输,在音视频开发中主要针对的是数据共享的问题,采集完并处理数据以后,我们如何快速传输数据这一难题又摆在了面前,试想如果一个以音视频为主导业务的APP如果在播放过程中非常卡顿的话,用户体验那会是非常糟糕的。因此,解决传输的问题也就摆在了我们的面前。那么,数据究竟如何实现传输共享呢 ?共享,实现细则最重要的一点,就是协议,因此需要具体掌握的协议如下:

  • 打包,音视频在传输前怎么打包,如:FLV,ts,mpeg4 等
  • 直播推流,有哪些常见的协议,如:RTMP,RTSP 等
  • 直播拉流,有哪些常见的协议,如:RTMP,HLS,HDL,RTSP 等
  • 基于 UDP 的协议有哪些?如:RTP/RTCP,QUIC 等

总体来说 Android音视频开发属于高级研发工程师涉及到的领域,市场上对于Android音视频开发工程师提供的薪资真的是very very可观的,另外,Android音视频开发的学习系列文章主要是参考Jhuster前辈的博客和指导意见,这里在次感谢前辈们的无私分享,前辈也给出了具体的学习任务线,具体内容如下:

  • 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 特效等功能

加油吧少年!

如果这篇文章对您有开发or学习上的些许帮助,希望各位看官留下宝贵的star,谢谢。

Ps:著作权归作者所有,转载请注明作者, 商业转载请联系作者获得授权,非商业转载请注明出处(开头或结尾请添加转载出处,添加原文url地址),文章请勿滥用,也希望大家尊重笔者的劳动成果

你可能感兴趣的:(Android音视频开发-前言)