前言

想赚钱,第一点就得选对自己的方向,有的行业和领域,无论你如何努力,天花板也不过如此。选对时代的风口,就算是头猪都能被吹上天,今天我们就来聊聊音视频开发。

蓬勃发展的音视频开发

时至今日,短视频App可谓是如日中天,一片兴兴向荣。随着短视频的兴起,音视频开发也越来越受到重视,但是由于音视频开发涉及知识面比较广,入门门槛相对较高,让许许多多开发者望而生畏。接下来我介绍一下音视频开发的基础部分,帮助大家学习。

一. 颜色模式

RGB

RGB颜色模型的主要目的是在电子系统中检测,表示和显示图像,比如电视和计算机,但是在传统摄影中也有应用。

RGB

基础的部分不过多描述,更多内容点击标题见维基百科。

YUV

Y’UV的发明是由于彩色电视与黑白电视的过渡时期。黑白视频只有Y(Luma,Luminance)视频,也就是灰阶值。到了彩色电视规格的制定,是以YUV/YIQ的格式来处理彩色电视图像,把UV视作表示彩度的C(Chrominance或Chroma),如果忽略C信号,那么剩下的Y(Luma)信号就跟之前的黑白电视频号相同,这样一来便解决彩色电视机与黑白电视机的兼容问题。Y’UV最大的优点在于只需占用极少的带宽,因为人眼对亮度敏感,对色度不敏感,因此减少部分UV的数据量,但人眼感知不到。

YUV也称为YCbCr,对于每个分量如下:

如下图,可以看到3个分量的效果差值。

YUV示例图

RGB与YUV转换公式 (RGB取值范围均为0~255)

HSV

  • 色调H: 用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;

  • 饱和度S: 饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。

  • 明度V: 明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。

    hsv_1.png

hsv_2.png

RGB和CMY颜色模型都是面向硬件的,而HSV(Hue Saturation Value)颜色模型是面向用户的。
HSV模型的三维表示从RGB立方体演化而来。设想从RGB沿立方体对角线的白色顶点向黑色顶点观察,就可以看到立方体的六边形外形。六边形边界表示色彩,水平轴表示纯度,明度沿垂直轴测量。

HSV在做颜色检测方面比较常用,可以参考文章HSV颜色检测。


二. 视频基础概念

帧(Frame)

简单的理解帧就是为视频或者动画中的每一张画面,而视频和动画特效就是由无数张画面组合而成,每一张画面都是一帧。

帧数(Frames)

帧数其实就是为帧生成数量的简称,可以解释为静止画面的数量

帧率(Frame Rate)

帧率(Frame rate) = 帧数(Frames)/时间(Time),单位为帧每秒(f/s, frames per second, fps)。

刷新率

屏幕每秒画面被刷新的次数,分为垂直刷新率和水平刷新率,一般我们提到的都是指垂直刷新率,以赫兹(Hz)为单位,刷新率越高,图像就越稳定,图像显示就越自然清晰。

目前, 大多数显示器根据其设定按 30Hz、 60Hz、 120Hz 或者 144Hz 的频率进行刷新。 而其中最常见的刷新频率是 60 Hz。 这样做是为了继承以前电视机刷新频率为 60Hz 的设定。

帧率关键值
  • 10~12 FPS:由于人类眼睛的特殊生理结构,如果所看画面之帧率高于每秒约10至12帧的时候,就会认为是连贯的,此现象称之为视觉暂留。
  • 24 FPS:一般电影的拍摄及播放帧数是每秒24帧。
  • 60 FPS:这个帧率对人眼识别来说已经具备较高的平滑度。
  • 85 FPS:人类大脑处理视频的极限,人眼无法分辨更高频率的差异。
60FPS

在做页面性能优化时,常用60FPS作为一个基准,所以需要尽量让每一帧的渲染控制在16ms内,这样才能达到一秒60帧的流畅度。

分辨率

视频、图片的画面大小或尺寸。

码率/比特率

单位时间播放连续的媒体如压缩后的音频或视频的比特数量。常用单位“比特每秒”,缩写是“bit/s”。比特率越高,带宽消耗得越多。


三. CPU & GPU

CPU:中央处理器(英文全名:Central Processing Unit),包括运算器(算术逻辑运算单元,ALU,Arithmetic Logic Unit)和高速缓冲存储器(Cache)及实现它们之间联系的数据(Data)、控制及状态的总线(Bus)。

GPU:图形处理器(英语全名:Graphics Processing Unit),专为执行复杂的数学和几何计算而设计的,拥有2D或3D图形加速功能。

GPU相比于CPU,更强大的2D、3D图形计算能力,可以让CPU从图形处理的任务中解放出来,执行其他更多的系统任务,这样可以大大提高计算机的整体性能。

硬件加速

硬件加速(Hardware acceleration)就是利用硬件模块来替代软件算法以充分利用硬件所固有的快速特性。硬件加速通常比软件算法的效率要高。

将2D、3D图形计算相关工作交给GPU处理,从而释放CPU的压力,也是属于硬件加速的一种。

硬解和软解

硬解和上面的硬件加速对应,即使用硬件模块来解析视频、音频文件等,而软解即是用CPU去计算解析。


四. 视频封装格式(Container format)

格式 全名 开发商 初版年限 特点
MP4 MP4 Moving Picture Experts Group,即 MPEG(动态图像专家组) 1998 常用有损压缩格式,通用性强
AVI Audio Video Interleaved(音频视频交错格式) 微软 1992 体积大算法简单
MOV QuickTime 影片格式 Apple 1991 苹果专属格式对很多其他的播放器支持不是很友好
WMV Windows Media Video 微软 2003 微软的专业视频格式,兼容性并不是很好
FLV Adobe Flash 网络流媒体格式 Adobe 2002 被淘汰的早期网络视频格式
MKV Matroska 多媒体容器 Matroska.org 2002 最有包容性的视频格式,能容纳无限量、多种不同类型编码的视频、音频及字幕流
WebM WebM Google 2010 谷歌推出的 HTML5 标准的网络视频标准,以MKV容器格式为基础开发
RMVB RMVB Real Networks 1997 根据不同的网络传输速率,而制定出不同的压缩比率,从而实现在低速率的网络上进行影像数据实时传送和播放,具有体积小,画质不错的优点。已过时。

更多参考 维基百科视频文件格式。


五. 视频编码格式(Codec)

1. MPEG:(Moving Picture Experts Group, ISO旗下的组织)

MPEG是Moving Picture Experts Group的简称。这个名字本来的含义是指一个研究视频和音频编码标准的“动态图像专家组”组织,成立于1988年,致力开发视频、音频的压缩编码技术。

版本 用途
MPEG - 1 VCD
MPEG - 2 DVD、数字有线电视信号
MPEG - 4(第二部分) 视频电话、网络传输、广播和媒体存储

2. H.26X : ITU-T VCEG(Visual Coding Experts Group,国际电联旗下的标准化组织)制定

版本 用于
H.261 老的视频会议和视频电话产品
H.262 DVD、数字有线电视信号(与MPEG共同制定,与MPEG-2完全一致)
H.263 视频会议、视频电话和网络视频
H.264 高精度视频的录制、压缩和发布格式(与MPEG-4第十部分完全一致),当前主流
H.265 H.264的两倍之压缩率,可支持4K分辨率甚至到超高画质电视,最高分辨率可达到8192×4320(8K分辨率)

3. H.264

当前主流的编码格式是H.264,这是由ITU-T VCEG和MPEG共同制定的标准,MPEG - 4第十部分内容也是H.264。

视频封装格式 & 视频编码格式

封装格式是提供了一个容器,用于存放视频、音频以及其他配置信息,而编码格式是指对视频画面内容进行压缩的一种标准。


六. 音频格式

  • WAV:因其文件扩展名为wav,微软和IBM联合开发的标准,数据本身的格式为PCM或压缩型,属于无损格式。
  • MP3 : MP3是一种音频压缩技术,其全称是动态影像专家压缩标准音频层面3(Moving Picture Experts Group Audio Layer III),简称为MP3。压缩比4:1~10:1之间。
  • AAC:Advanced Audio Coding, 出现于1997年,由Fraunhofer IIS、杜比实验室、AT&T、Sony、Nokia等公司共同开发。AAC压缩比通常为18:1。相比MP3,采用更高效的编码算法,音质更佳,文件更小。
  • Opus:Opus格式是一个开放格式,使用上没有任何专利或限制,比MP3、AAC、HE-AAC等常见格式,有更低的延迟和更好的声音压缩率。2012年7月2日,Opus被IETF批准用于标准化。

七. H.264编码介绍

IPB帧

  • I帧:帧内编码帧(intra picture),采用帧内压缩去掉空间冗余信息。
  • P帧:前向预测编码帧(predictive-frame),通过将图像序列中前面已经编码帧的时间冗余信息来压缩传输数据量的编码图像。参考前面的I帧或者P帧。
  • B帧:双向预测内插编码帧(bi-directional interpolated prediction frame),既考虑源图像序列前面的已编码帧,又顾及源图像序列后面的已编码帧之间的冗余信息,来压缩传输数据量的编码图像,也称为双向编码帧。参考前面一个的I帧或者P帧及其后面的一个P帧。

PTS和DTS

  • DTS(Decoding Time Stamp)是标识读入内存中bit流在什么时候开始送入解码器中进行解码。也就是解码顺序的时间戳。
  • PTS(Presentation Time Stamp)用于度量解码后的视频帧什么时候被显示出来。在没有B帧的情况下,DTS和PTS的输出顺序是一样的,一旦存在B帧,PTS和DTS则会不同。也就是显示顺序的时间戳。

GOP

即Group of picture(图像组),指两个I帧之间的距离,Reference(参考周期)指两个P帧之间的距离。

一个I帧所占用的字节数大于一个P帧,一个P帧所占用的字节数大于一个B帧。所以在码率不变的前提下,GOP值越大,P、B帧的数量会越多,平均每个I、P、B帧所占用的字节数就越多,也就更容易获取较好的图像质量;Reference越大,B帧的数量越多,同理也更容易获得较好的图像质量。

简而言之:

  • 字节大小:I > P > B
  • 解码顺序:I -> P -> B

GOP解码案例


更多Android开发详细资料扫码免费获得

写在最后

在技术领域内,没有任何一门课程可以让你学完后一劳永逸,再好的课程也只能是“师傅领进门,修行靠个人”。“学无止境”这句话,在任何技术领域,都不只是良好的习惯,更是程序员和工程师们不被时代淘汰、获得更好机会和发展的必要前提。

如果你觉得自己学习效率低,缺乏正确的指导,可以扫码,领取更多详细音视频资料,并加入我们资源丰富,学习氛围浓厚的技术圈一起学习交流吧!

加入我们吧!群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。

5分钟带你了解音视频开发相关推荐

  1. 即时通讯音视频开发(十八):详解音频编解码的原理、演进和应用选型

    1.引言 大家好,我是刘华平,从毕业到现在我一直在从事音视频领域相关工作,也有一些自己的创业项目,曾为早期Google Android SDK多媒体架构的构建作出贡献. 就音频而言,无论是算法多样性, ...

  2. 音视频开发总结之二Android平台相关

    一. 音视频采集流程 串联整个音视频录制流程,完成音视频的采集.编码.封包成 mp4 输出. 通过摄像头和麦克风获得实时的音视频数据: 播放流程: 获取流->解码->播放. 录制播放路程: ...

  3. 即时通讯音视频开发(0):零基础,史上最通俗视频编码技术入门

    [来源申明]本文引用了微信公众号"鲜枣课堂"的<视频编码零基础入门>文章内容.为了更好的内容呈现,即时通讯网在引用和收录时内容有改动,转载时请注明原文来源信息,尊重原作 ...

  4. 视频教程-FFmpeg音视频开发实战6 iOS/Android/windows/Linux-其他

    FFmpeg音视频开发实战6 iOS/Android/windows/Linux 先后就职于德国BOSCH,iBabyLabs等企业担任架构设计师,主程, 精通嵌入式Linux,iOS,Android ...

  5. iOS音视频开发-了解编码及视频

    1. 视频H264编码 1.1 为何编码? 从存储角度和网络传输以及通用性 3个角度,压缩已经成了不可或缺的动作.压缩编码最基本的指标,就是压缩比. 压缩比通常都是小于1(如果等于或者大于1,是不是就 ...

  6. 【Android音视频开发】音频编码原理

    文章变更表 文章版本号 变更内容 变更日期 备注 0.0.1 创建 2022/9/29 初版 0.0.2 补充编码原理和音频格式等内容 2022/9/30 1. 前言 在[Android音视频开发] ...

  7. 音视频开发基础入门|声音的采集与量化、音频数字信号质量、音频码率

    栏目介绍: 为了帮助开发者更好的理解音视频概念,进行音视频应用开发,ZEGO 即构科技联合内部音视频开发专家打磨了本套<音视频开发进阶>课程,帮助大家轻松入门并可以自己动手开发音视频 Ap ...

  8. 音视频开发刚入门该如何实现一个录音/播放器

    如果你从未接触过音视频开发,但有实现一个录音器.播放器的需求或想法,本文会是一个比较好的入门内容. 本博客是从基础内容到具体的实践,再展现一个简易的整体框架,内容主要有: 1.音频基础知识,可以了解音 ...

  9. im和音视频开发哪个更好_找时间成为更好的开发人员

    im和音视频开发哪个更好 There's no time for anything. At least that's how it feels doesn't it? No time to learn ...

最新文章

  1. Apache Libcloud 0.12.3 发布
  2. [Android]转-Android 中的拿来主义(编译,反编译,AXMLPrinter2,smali,baksmali)!
  3. Facebook的一些基本操作(网页版)
  4. 从pfx里面 解析出公私钥
  5. Vue2.0 Transition常见用法全解惑
  6. Android界面编程--使用活动条(ActionBar)--通过ActionBar菜单改变TextView的字体和颜色...
  7. 联想服务器开机显示系统恢复选项,联想电脑win10系统开机时按哪个键进入一键还原模式...
  8. 动态调用对象的属性和方法——性能和灵活性兼备的方法
  9. 拼的html页面乱,页面分页html拼接
  10. 每一个创业的人,你要解决的就是流量
  11. 秒杀项目(2)集成redis
  12. 谷歌,IE,火狐浏览器内核
  13. 泰坦尼克号生还者预测
  14. html网页制作期末大作业成品_新疆旅游网页设计作品_dreamweaver作业静态HTML网页设计模板_新疆旅游景点网页作业制作...
  15. 记录一个问题:RJ45灯,绿灯与黄灯同时闪烁,连接出问题
  16. 任何手机都能刷原生android系统吗,如果你的安卓手机能自由地刷系统,你会选择谁?...
  17. C语言 数组元素的遍历
  18. flutter dio 示例
  19. 学习高等数学一学期对”高等”的感悟与体会
  20. 计算机该如何暴力破解

热门文章

  1. 如何让计算机无法开机,详细教您如何电脑开不开机
  2. 数据库综合实验代码展示
  3. mac下如何使用Wireshark的详细教程
  4. 【技术推文】生态系统碳库的遥感估算:森林碳储量、草地系统、城市扩张、区域能源消耗碳排放空间格局模拟、大气温室气体浓度的卫星监测、区域碳循环的遥感模拟与预测(遥感数据同化\模型驱动使用)
  5. html页面实现自动刷新或自动跳转
  6. Oracle 批量插入sql
  7. python 之路,致那些年,我们依然没搞明白的编码
  8. leaflet实现四色预警(仿echarts气泡图)(leaflet篇.41)
  9. android Loading动画效果
  10. 报价、订货、付款方式、通关、保险、提单、结汇等问题解析