android 视频编码开发,Android音视频开发-前言

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

9429ffb1cd10

音视频-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 等

处理:

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

9429ffb1cd10

音视频-处理

针对图像和音视频的处理,实现方式除了使用系统的 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地址),文章请勿滥用,也希望大家尊重笔者的劳动成果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值