前言
2015 ~ 1016是直播大火的年代,最近公司也是在着手直播这块,作为Android开发,自然也要懂得一些知识,经过一段时间的调研,学习,作了一下自我总结,写了一个【Android音视频开发】
系列,此文便是开篇了!
PS:关于这块的文章着实太少,点开10个链接,有7、8个链接的内容是一样的,各种转来转去,也是耗费了很大的功夫才了解到音视频的一点皮毛。而且很多文章都是12年、13年的,拿到现在可能根本就不适用,我通过实例验证,做下此总结。最近一直在看这一块的东西,今天抽空,趁着记忆的知识还比较新鲜记下来,好记性不如烂笔头,也希望能帮助到其他的人。
直播
从技术层面上来,直播大致分为:音视频采集、美颜/滤镜/特效处理、编码、封包、推流、分发、解码/渲染/播放。
对应到具体的Android层面,便会有如下几个重要环节:
- 视频实时采集:Camera预览/MediaRecorder绑定LocalSocket
- 音频实时采集:MediaRecorder/AudioRecord/OpenSL ES
- 特效处理:视频磨皮美颜,音频降噪去回声等算法
- 编解码:H264&AAC,MediaCodec(API >= 16)硬解,ffmpeg等三方库软解
- 流媒体传输:rtmp rtsp hls等
- 渲染播放:MediaPlayer,ijkplayer等三方库
科普
编解码
采集到的原始音视频数据是非常大的,不利于传输,所以就需要对这些数据进行压缩,这个过程就是编码。解码则是编码的逆向过程。编码分为硬编码、软编码,解码也是如此。
- 硬编码:使用非CPU进行编码,如显卡GPU、专用的DSP、FPGA、ASIC芯片等。性能高,低码率下通常质量低于硬编码器,但部分产品在GPU硬件平台移植了优秀的软编码算法(如X264)的,质量基本等同于软编码。
- 软编码:使用CPU进行编码。性能高,低码率下通常质量低于硬编码器,但部分产品在GPU硬件平台移植了优秀的软编码算法(如X264)的,质量基本等同于软编码。
关于音视频压缩编码的基本原理可以参见雷神的这篇文章。
视频编码
视频编码的主要作用是将视频像素数据(RGB,YUV等)压缩成为视频码流,从而降低视频的数据量。主要视频编码一览:
名称 | 推出即构 | 退出时间 | 目前使用领域 |
---|---|---|---|
HEVC(H.265) | MPEG/ITU-T | 2013 | 研发中 |
H.264 | MPEG/ITU-T | 2003 | 各个领域 |
MPEG4 | MPEG | 2001 | 不温不火 |
MPEG2 | MPEG | 1994 | 研发中 |
VP9 | 2013 | 研发中 | |
VP8 | 2008 | 不普及 | |
VC-1 | Microsoft Inc. | 2006 | 微软平台 |
不难看出,目前主流的视频编码便是H264了,我们项目中选取的也是此编码标准。
音频编码
音频编码的主要作用是将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。主要音频编码一览:
名称 | 推出即构 | 退出时间 | 目前使用领域 |
---|---|---|---|
AAC | MPEG | 1997 | 各个领域(新) |
AC-3 | Dolby Inc. | 1992 | 电影 |
MP3 | MPEG | 1993 | 各个领域(旧) |
WMA | Microsoft Inc. | 1999 | 微软平台 |
那么主流的音频编码便是AAC了,项目选取的也是此编码标准。
参考
如何搭建一个完整的视频直播系统?
android音视频点/直播模块开发
视音频编解码技术零基础学习方法
移动直播技术秒开优化经验
从0到1打造直播 App