音视频基础知识

一、API与SDK

SDK的中文名叫“软件开发工具包”(本文中将之简称为软件包或软件开发包),它被开发出来是为了减少程序员工作量的,有公司开发出某种软件的某一功能,把它封装成SDK(比如美颜SDK就是能够实现美颜功能的SDK),出售给其他公司做开发用,其他公司如果想要给软件开发出某种功能,但又不想从头开始搞开发,可以付钱省事。
API(Application Programming Interface,应用程序接口)是一些预先定义的接口(如函数、HTTP接口),或指软件系统不同组成部分衔接的约定。 用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节。
可以把SDK想象成一个虚拟的程序包,在这个程序包中有一份做好的软件功能,这份程序包几乎是全封闭的,只有一个小小接口可以联通外界,这个接口就是API。如果我们现在短视频中增加某个功能(比如美颜、萌颜、云存储)但又不想自己亲手去做这个功能,我们可以选择使用这个“SDK”软件包,我们把我们的程序连接上API接口,就可以使用SDK软件包里的功能了。

参考链接: 短视频app开发丨教新手三分钟分清楚什么是API和SDK.

二、音视频开发包括什么?

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

采集——数据从哪里来

渲染——数据怎么展现

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

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

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

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

比如:

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

处理——数据怎么加工

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

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

a. 图像处理:OpenGL,OpenCV,libyuv,ffmpeg 等
b. 视频编解码:x264,OpenH264,ffmpeg 等
c. 音频处理:speexdsp,ffmpeg 等
d. 音频编解码:libfaac,opus,speex,ffmpeg 等

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

传输——数据怎么共享

其中最重要的就是协议,无论什么数据,要想在不同的国家、不同设备之间互联互通,离不开 “标准”,有了 “标准”,大家就能互相读懂对方。

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

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

参考链接: C/C++程序员的黄金方向-音视频开发之入门篇.

三、视频流从加载到准备播放的过程

视频流从加载到准备播放的过程如下图:
在这里插入图片描述
协议指的就是流媒体协议。一般有 HTTP 、RTSP、RTMP 等,我们就最常见的就是 HTTP 网络协议,而 RTSP 和 RTMP 一般用于直播流或支持带有控制信令的常见,比如远程监控。

封装是的是视频的封装格式。视频封装协议指的是我们常见的 MP4 、AVI 、RMVB 、MKV、TS、FLV 等常见后缀格式,它们所表示的就是多媒体的封装协议,就是在传输过程中把音频和视频打包都一起的封装,所以播放前是需要把这部分内容解开,提取出对应音频编码和视频编码。

编码又分为视频编码和音频编码。
音频编码指的是音频数据的编码方式,一般通过编码来进行压缩和去冗余,常见的音频编码方式:MP3、 PCM、WAV、AAC、AC-3 等。
视频编码用来压缩图像,指的就是画面图像的编码压缩方式,一般有 H263、H264、HEVC(H265)、MPEG-2 、MPEG-4 等,其中H264 是目前比较常见的编码方式。
通常情况下我们理解的画面是 RGB 组合出来,而目前视频领域可能更多使用 YUV 格式,其中 Y 表示的是亮度(灰度),而 U 和 V表示的是色度(饱和度)。YUV 是对 RGB 的特殊处理和叠加来获取颜色,比如 YUV420 可以理解对色度以 2:1 的抽样率进行存储,然后亮度透过色度来显示画面,更多 YUV 的这里就不展开讨论,而为什么使用 YUV 其中有一点因素就是为了兼容以前的黑白电视。

参考链接: 移动开发者的音视频基础知识.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值