音视频学习笔记

音视频开发简介(点击打开链接

1.音视频开发包括哪些内容

虽然一篇文章无法把音视频开发的知识点都介绍清楚,但是大概的学习路线还是可以梳理一下的,我们先看看下面这张图:

其实说白了,音视频开发,就是要掌握图像、音频、视频的基础知识,并且学会如何对它们进行采集、渲染、处理、传输等一系列的开发和应用。

  • 采集:它解决的是,数据从哪里来的问题
  • 渲染:它解决的是,数据怎么展现的问题
  • 处理:它解决的是,数据怎么加工的问题
  • 传输:它解决的是,数据怎么共享的问题

每一个门类,都可以深挖,衍生出一个又一个充满技术挑战的话题,比如:如何更高效地渲染画面、如何提高音视频的压缩比,如何优化弱网下的音视频数据传输等等。

其实,音视频开发的技术积累,也没有那么难,带着问题去 Google,带着任务去实践,一切都不是问题,我们就从上面说的 4 个方向,逐个探索一下,有哪些知识点,是要我们去了解和掌握的。

1.1 采集

采集,它解决的是,数据从哪里来的问题,那么,数据究竟从哪里来的呢 ?

其实无论在哪个平台,图像、视频最初都是来自摄像头,而音频最初都是来自麦克风,因此,做音视频采集,就要掌握如下的技术知识:

  1. 系统的摄像头采集接口是什么,怎么用 ?

比如:

Windows:DirectShowLinux:V4L2Android:CameraiOS:AVCaptureSession

  1. 系统的摄像头采集的参数怎么配置,都是什么含义 ?

比如:分辨率、帧率、预览方向、对焦、闪光灯 等

  1. 系统的摄像头输出的图像/视频数据,是什么格式,不同格式有什么区别 ?

比如:图片:JPEG,视频数据:NV21,NV12,I420 等

  1. 系统的麦克风采集接口是什么,怎么用 ?

比如:

Windows:DirectShowLinux:ALSA & OSSAndroid:AudioRecordiOS:Audio Unit

  1. 系统的麦克风采集参数怎么配置,都是什么含义 ?

比如:采样率,通道号,位宽 等

  1. 系统的麦克风输出的音频数据,是什么格式?

比如:PCM

1.2 渲染

渲染,它解决的是,数据怎么展现的问题,那么,数据究竟怎么展现呢 ?

其实无论在哪个平台,图像、视频最终都是要绘制到视图上面,而音频最终都是要输出到扬声器,因此,做音视频渲染,就要掌握如下的技术知识:

  1. 系统提供了哪些 API 可以绘制一张图片或者一帧 YUV 图像数据的 ?

比如:

Windows:DirectDraw, Direct3D, GDI,OpenGL 等Linux: GDI, OpenGL 等Android:ImageView,SurfaceView,TextureView,OpenGL 等iOS: CoreGraphics,OpenGL 等

  1. 系统提供了哪些 API 可以播放一个 mp3 或者 pcm 数据 ?

比如:

Windows:DirectSound 等Linux:ALSA & OSS 等Android:AudioTrack 等iOS: AudioQueue 等

1.3 处理

处理,它解决的是,数据怎么加工的问题,那么,数据究竟可以怎么加工呢 ?

首先,我们看看图像/音视频的数据可以做哪些加工 ?

其实无论在哪个平台,图像和音视频的加工,除了系统的 API,大多数都会依赖一些跨平台的第三方库的,通过掌握这些第三方库的原理和使用方法,基本上就可以满足日常音视频处理工作了,这些库包括但不限于:

  1. 图像处理:OpenGL,OpenCV,libyuv,ffmpeg 等

  2. 视频编解码:x264,OpenH264,ffmpeg 等

  3. 音频处理:speexdsp,ffmpeg 等

4.音频编解码:libfaac,opus,speex,ffmpeg 等

因此,学习和掌握这些第三方库的使用,非常有必要。

1.4 传输

传输,它解决的是,数据怎么共享的问题,那么,数据究竟怎么共享呢 ?

共享,最重要的一点,就是协议。

我觉得互联网之所以能够如此蓬勃地发展,将整个世界都紧密联系在一起,其实是离不开 W3C 这个委员会的巨大贡献的,因为无论什么数据,要想在不同的国家、不同设备之间互联互通,离不开 “标准”,有了 “标准”,大家就能互相读懂对方。

因此,研究音视频传输,其实就是在研究协议,具体有哪些协议呢 ?

  1. 音视频在传输前,怎么打包的,如:FLV,ts,mpeg4 等

  2. 直播推流,有哪些常见的协议,如:RTMP,RSTP 等

  3. 直播拉流,有哪些常见的协议,如:RTMP,HLS,HDL,RTSP 等

  4. 基于 UDP 的协议有哪些?如:RTP/RTCP,QUIC 等

互联网环境下的音视频的传输,是一个非常有挑战和价值的方向,为了解决弱网下的传输延时、卡顿,提高用户体验,整个业界都在不断地进行着深入的探索和优化。

 

音频开发基础知识(点击打开链接

1.音频开发的主要应用

  • 音频播放器 :(QQ音乐,网易云音乐)

  • 录音机 :(全民K歌)

  • 语音电话:(QQ电话,微信电话)

  • 音视频监控应用:(摄像头,录音笔)

  •  音视频直播应用:(午夜直播,心灵之声电台)

  • 音频编辑/处理软件:(ktv音效、变声, 铃声转换)

  • 蓝牙耳机/音箱 :(耳机、KBOX)  等等。

2.音频开发基础概念

(1)采样率(samplerate)

是指录音设备在一秒钟内对声音信号的采样次数。
采样频率越高声音的还原就越真实越自然。单位用赫兹(Hz)

采样定理: (奈奎斯特定理)
在进行模拟/数字信号的转换过程中,当采样频率fs.max大于信号中最高频率fmax的2倍时(fs.max>2fmax),采样之后的数字信号完整地保留了原始信号中的信息,一般实际应用中保证采样频率为信号最高频率的2.56~4倍;

人耳能听到的声波的频率范围通常?    20~20000Hz

为了保证声音不失真,采样频率应在40kHz以上.
但是,常用的音频采样频率有:8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz、96kHz、192kHz等。

例如:电话是标准的8khz采样率!
话音信号频率在0.3~3.4kHz范围内,用8kHz的抽样频率,就可获得能取代原来连续话音信号的抽样信号。
而一般CD采集采样频率为44.1kHz。
目前,一般情况下的录音都是采用44100Hz的。

(2)量化精度(位宽)

就是把采样得到的声音信号幅度转换成数字值,
用于表示信号强度。

量化精度:用多少个二进位来表示每一个采样值,也称为量化位数。
声音信号的量化位数一般是 4,6,8,12或16 bits 。

这个数值的数据类型大小可以是:4bit、8bit、16bit、32bit等等,位数越多,表示得就越精细,声音质量自然就越好。
当然,数据量也会成倍增大。
 一般采用的是16bit。

(3)声道数(channels)

由于音频的采集和播放是可以叠加的.
因此,可以同时从多个音频源采集声音,并分别输出到不同的扬声器,故声道数一般表示声音录制时的音源数量或回放时相应的扬声器数量。
单声道(Mono)和双声道(Stereo)比较常见,顾名思义,前者的声道数为1,后者为2。

(4)音频帧(frame)

音频跟视频很不一样,视频每一帧就是一张图像,而从上面的正弦波可以看出,音频数据是流式的,本身没有明确的一帧帧的概念。

在实际的应用中,为了音频算法处理/传输的方便,一般约定俗成取2.5ms~60ms为单位的数据量为一帧音频。

这个时间被称之为“采样时间”,其长度没有特别的标准,它是根据编解码器和具体应用的需求来决定的,我们可以计算一下一帧音频帧的大小:

AAC: 一个AAC帧对应的采样点个数1024, 采样率(samplerate)为 44100Hz
当前一帧的播放时间 = 1024 * 1000000/44100= 22.32ms(单位为ms)
mp3: 每帧均为1152个字节
当前一帧的播放时间 = 1152* 1000000/44100= 26.122ms(单位为ms)

3.音频开发的具体内容

  • 音频采集/播放

  • 音频算法处理(去噪、静音检测、回声消除、音效处理、功放/增强、混音/分离,等等)

  • 音频的编解码和格式转换

  • 音频传输协议的开发(SIP,A2DP、AVRCP,等等)         

             SIP:会话初始协议(Session Initiation Protocol)是一种信令协议,用于初始、                         管理和终止网络中的语音和视频会话
            A2DP全名是Advanced Audio Distribution Profile 蓝牙音频传输模型协定!                              A2DP是能够采用耳机内的芯片来堆栈数据,达到声音的高清晰度。
            AVRCP(Audio/Video Remote Control Profile),即音频/视频远程控制规范。

4.音频开发的具体内容

什么是音频编码?

是将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。

为什么要音频编码?

存储一秒钟采样率为44.1KHz,位深为16bit,双声道的PCM编码的音频信号,需要
44100*16bit*2 / 8/1024 = 172.2KB的空间,那么1分钟则约为10.09M。
这对大部分用户是不可接受的。
只有2种方法,降低采样指标或者压缩。
降低采样是不可取的,因此就有了各种各样的压缩方式。

有两类主要的音频文件格式:有损和无损。
有损文件格式: 是基于声学心理学的模型,除去人类很难或根本听不到的声音。
无损格式,例如PCM,WAV,ALS,ALAC,TAK,FLAC,APE,WavPack(WV)
有损格式,例如MP3,AAC,WMA,Ogg

根据采样率和采样大小可以得知,相对自然界的信号,音频编码最多只能做到无限接近,至少目前的技术只能这样了,相对自然界的信号,任何数字音频编码方案都是有损的,因为无法完全还原。在计算机应用中,能够达到最高保真水平的就是PCM编码,被广泛用于素材保存及音乐欣赏,CD、DVD以及我们常见的WAV文件中均有应用。因此,PCM约定俗成了无损编码,因为PCM代表了数字音频中最佳的保真水准,并不意味着PCM就能够确保信号绝对保真,PCM也只能做到最大程度的无限接近。
我们而习惯性的把MP3列入有损音频编码范畴,是相对PCM编码的。
就像用数字去表达圆周率,不管精度多高,也只是无限接近,而不是真正等于圆周率的值。

5.音频算法处理的开源库

FFmpeg: Fast Forward  MPEG
Moving Picture Experts Group 先进视频编码标准


FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。
采用LGPL或GPL许可证。
它提供了录制、转换以及流化音视频的完整解决方案。
它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量。

不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。

FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。

FFmpeg组成组件

6.Android中音频开发相关的API

  • 音频采集:  MediaRecoder,AudioRecord

  • 音频播放:  SoundPool,MediaPlayer,AudioTrack 

  • 音频编解码: MediaCodec

  • NDK API:     OpenSL ES

7.Android音频的开发

播放流程: 获取流–>解码–>播放

录制播放路程: 录制音频视频–>剪辑–>编码–>上传服务器 别人播放.

直播过程 : 录制音视频–>编码–>流媒体传输–>服务器—>流媒体传输到其他app–>解码–>播放

几个重要的环节

  •  录制音频 AudioRecord

  •  视频剪辑 fmpeg

  •  音频编码 aac

  •  上传流文件 网络框架,进度监听,断点续传

  •  流媒体传输 流媒体传输协议rtmp rtsp hls

  •  音频解码 aac

  •  渲染播放 MediaPlayer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值