5分钟带你了解音视频开发

2023-05-16

前言

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

蓬勃发展的音视频开发

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

一. 颜色模式

RGB

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

RGB

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

YUV

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

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

  • Y:Luminance, 亮度,也就是灰度值。除了表示亮度信号外,还含有较多的绿色通道量。
  • U:Cb,蓝色通道与亮度的差值。
  • V:Cr,红色通道与亮度的差值。

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

YUV示例图

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

  • Y=0.299R+0.587G+0.114B ⁄ R=Y+1.14V
  • U=-0.147R-0.289G+0.436B ⁄ G=Y-0.39U-0.58V
  • V=0.615R-0.515G-0.100B ⁄ B=Y+2.03U

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)

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

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


五. 视频编码格式(Codec)

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

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

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

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

版本用于
H.261老的视频会议和视频电话产品
H.262DVD、数字有线电视信号(与MPEG共同制定,与MPEG-2完全一致)
H.263视频会议、视频电话和网络视频
H.264高精度视频的录制、压缩和发布格式(与MPEG-4第十部分完全一致),当前主流
H.265H.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岁后的你只会比周围的人更值钱。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

5分钟带你了解音视频开发 的相关文章

  • SQL - 将查询结果插入到另一张表中

    一 INSERT INTO 注意 xff1a 字段必须一致 xff08 位置一致 xff0c 类型一致 xff09 xff0c 否则会出现数据转换错误 1 字段一致 INSERT INTO 目标表 SELECT FROM 来源表 WHERE
  • Ubuntu18.04设置在开机时自动链接蓝牙键盘

    简介 系统升级到Ubuntu18 04时 xff0c 启动后蓝牙键盘不能自动连接 xff0c 需要虚拟键盘登录后手动连接蓝牙键盘后 xff0c 才能正常使用 如何在开机时自动链接键盘 xff1f 查找蓝牙键盘的Address地址 在Sett
  • iOS scrollview touchbegin

    1 开篇 最近在项目中遇到一个 需求就是在一个可以左右拨动的页面上 xff0c 添加一些交互功能 xff0c 比如说点击某个页面会有文字变化 xff0c 图片变换 xff0c 最后有比较特殊的需求是做个像slider功能的可以拖动的按钮 x
  • 大数据毕业设计 - 选题推荐(一)

    文章目录 1 开题指导1 1 起因1 2 如何避坑 重中之重 1 3 为什么这么说呢 xff1f 1 4 难度把控1 5 题目名称1 6 最后 选题建议3 最后 毕设帮助 xff0c 开题指导 xff0c 资料分享 xff0c 疑问解答 见
  • 大数据毕设题目推荐 - 最新大数据毕设选题 - 毕业设计项目方向课题

    文章目录 0 前言1 如何选题1 1 选题技巧 xff1a 如何避坑 重中之重 1 2 为什么这么说呢 xff1f 1 3 难度把控1 4 题目名称1 5 最后 2 大数据 选题推荐2 1 大数据挖掘类2 2 大数据处理 云计算 区块链 毕
  • 解决OAth2.0的授权token放在header中,导致文件下载验证失效的问题

    1 项目背景 项目是采用微服务架构 xff0c 使用spring gateway作为网关 xff0c 统一做校验权限 2 问题 OAth2 0的授权token是放在请求头Authorization中的 xff0c 如果使用浏览器直接下载文件
  • 大数据毕业设计选题推荐(二)

    文章目录 0 前言1 大数据相关题目2 开题指导2 1 起因2 2 如何避坑 重中之重 2 3 为什么这么说呢 xff1f 2 4 难度把控2 5 题目名称 3 最后 0 前言 这是学长亲手整理的 xff0c 大数据毕设选题系列第二篇 xf
  • 【C语言程序设计】日期函数,日期处理函数!

    定义一个表示日期的结构体类型 xff0c 再分别定义函数完成下列功能 xff1a 计算某一天是对应年的第几天 xff0c 这一年一共多少天 xff1b 计算两个日期之间相隔的天数 两个日期由键盘输入 算法思想 设定结构体类型表示日期类型名为
  • 关于ArchLinux系统中某些软件无法输入中文的问题

    1 检查是否安装语言支持 P S 这个是可选操作 xff0c 可跳过 一般安装的时候都会选安装中文 xff0c 如果不确定 xff0c 最好检查一下 首先检查一下语言设置 span class token function sudo spa
  • Windows Python 命令行如何退出

    在使用 Python 命令行工具的时候 xff0c 我们发现通常使用的 Ctrl 43 C 没有办法退出界面 例如 xff0c 下图所示 xff0c 当我们从键盘上输出 Ctrl 43 C 还是没有办法退出 解决方法 可以通过键盘上输入 C
  • Node 的 cross-env 模块

    cross env 是运行跨平台设置的和使用环境变量 xff08 Node中的环境变量 xff09 的脚本 一句话来说明 cross env xff0c 就是针对相同的语句和命令 xff0c 我们希望这条语句能够同时在 Windows 和
  • 如何从 Java 的 List 中删除第一个元素

    概述 在这个实例中 xff0c 我们将会演示如何删除在 Java 中定义的 List 的第 1 个元素 我们将会针对这个问题使用 List 接口的 2 个实现 ArrayList 和 LinkedList 来进行演示 创建一个 List 首
  • 史上最详细----阿里云创建ECS实例教程(每一步图文结合)

    进入阿里云官网 xff0c 登录账号 进入控制台页面 打开侧边导航栏 xff0c 进入云服务器ECS页面 点击创建实例 进入到这个页面 xff08 我这里为了方便演示 xff0c 用的是旧版的页面 xff09 选择付费模式和可用区 选择配置
  • 使用python的opencv和tesseract库来识别图片中指定区域的中文

    使用python的opencv和tesseract库来识别图片中指定区域的中文 需求说明 图片中包含大量中文 xff0c tesseract全图识别是逐行识别的 xff0c 无法得出满意的结果 xff0c 需要识别指定区域的中文 实现方案
  • 7-5 判断回文 栈实现

    回文是指正读反读均相同的字符序列 xff0c 如 abba 和 abdba 均是回文 xff0c 但 good 不是回文 试写一个程序判定给定的字符向量是否为回文 xff0c 用栈实现 提示 xff1a 将一半字符入栈 输入格式 输入任意字
  • antd design国际化配置为中文时,日期组件中月与星期显示为英文,其他显示为中文

    antd design国际化具体配置见官网 https ant design components locale provider cn 主要代码 xff1a import LocaleProvider from 39 antd 39 im
  • SQL Server 2016新特性: 对JSON的支持

    SQL Server 2005开始支持XML数据类型 xff0c 提供原生的XML数据类型 XML索引及各种管理或输出XML格式的函数 随着JSON的流行 xff0c SQL Server2016开始支持JSON数据类型 xff0c 不仅可
  • vsftp 限制用户目录,不得改变目录到上级

    3 2 3 特定使用者peter john 不得变更目录 使用者的预设目录为 home username xff0c 若是我们不希望使用者在ftp 时能够 切换到上一层目录 home xff0c 则可参考以下步骤 Step1 修改 etc
  • Qt 使用 MPV 开源播放器

    前言 因为做的一个项目中需要用到 mpv 来实现播放视频流 暂停 录制等功能 xff0c 所以写篇博客简单总结下 MPV Player mpv 是基于 MPlayer 和 mplayer2 的媒体播放器 它支持多种视频文件格式 xff0c
  • NodeJS实现TCPSocket(套接字)服务器和客户端

    NodeJS实现TCPSocket xff08 套接字 xff09 服务器和客户端 TCP Socket xff08 套接字 xff09 客户端清单 TCP Socket xff08 套接字 xff09 服务器清单 结果服务器客户端 TCP

随机推荐

  • NodeJS控制台出现乱码

    NodeJS控制台出现乱码 问题复现问题显示 解决思路实现办法实现结果 问题复现 使用spawn xff08 xff09 执行一个系统命令时控制台出现乱码 span class token comment 64 description TO
  • Python 图像对比度增强的几种方法

    Python 图像对比度增强的几种方法 图像处理工具 灰度直方图python实现结果 线性变换线性变换python实现线性变换结果 直方图正规化直方图正规化python实现直方图正规化结果 伽马变换伽马变换python实现伽马变换结果 图像
  • Nodejs+AngularJS模块之Angular依赖注入

    Nodejs 43 AngularJS模块之Angular依赖注入 Angular模块需要的模块idea项目结构1 基本的nodejs静态Web服务器代码2 在控制器和模块定义中实现依赖注入代码injector jsinjector htm
  • Nodejs+AngularJS模块之把作用域实现为数据模型

    Nodejs 43 AngularJS模块之把作用域实现为数据模型 作用域实例1 作用与控制器之间的关系代码scope controller htmlscope controller js结果 实例2 作用域和模板之间的关系代码scope
  • Linux基础命令对应练习

    对应练习 路径练习新建目录 mkdir练习复制 cp练习移除文件或目录 rm练习移动文件与目录 xff0c 或更名 mv练习直接查看文件内容 cat练习修改文件时间或建新档 touch练习程序编辑器 vim练习vim练习答案 参考来源 路径
  • 实现回调(一)向回调函数传递额外的参数

    大部分回调函数都有传递给它们的自动参数 xff0c 如错误或结果缓冲区 使用回调时 xff0c 常见的一个问题时如何调用给它们传递额外的参数 做到这一点的方法是在一个匿名函数中实现该参数 xff0c 然后用来自匿名函数的参数调用回调函数 清
  • (node:3872) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issue

    NodeJS运行下列代码时报错 var numbers 61 Buffer 34 123456789 34 node 3872 DEP0005 DeprecationWarning Buffer is deprecated due to s
  • CentOS上搭建MPICH2开发环境的步骤

    本博客已迁往http coredumper cn 前提条件 共有 5 台机器 均安装有 CentOS6 4 系统 主机名分别为 node0 node1 node2 node3 node4 node0 作为主节点 这里的主节点是指将 node
  • 算法设计与分析5.11求解满足方程解问题

    编写一个实验程序 xff0c 求出a b c d e xff0c 满足ab cd e 61 1方程 xff0c 其中所有变量的取值为1 5并且均不相同 注 xff1a 原书上的方程为ab cd 43 e 61 1 xff0c 该方程无解 分
  • pip安装python第三方库的四种方法

    文章目录 一 无镜像安装二 镜像安装三 一劳永逸式镜像安装四 批量安装总结 一 无镜像安装 pip install 库名 打开命令提示符 win 43 r 输入cmd xff0c 在命令提示窗口输入pip install 库名 xff0c
  • 【计算机组成原理】实验5:运算器实验

    实验内容 一 实验原理 实验中所用的运算器数据通路如下图所示 ALU运算器由CPLD描述 运算器的输出经过2片74LS245三态门与数据总线相连 xff0c 2个运算寄存器AX BX的数据输入端分别由4个74LS374锁存器锁存 xff0c
  • 有什么免费好用的全球天气api?

    简单介绍几个 xff0c 选你觉得合适的就行 xff08 下面推荐的国内外的都有 xff0c 访问速度会有些差别 xff09 高德天气 API 天气查询 API文档 开发指南 Web服务 API 高德地图API知心天气 API HyperD
  • Xming的另一种配置,实现远程登录Linux图形界面

    Xming Xming xff1a 我估计这是最简单的登陆Linux桌面的方式了 可以到Xming的网站下载Xming软件 xff0c 因为是Windows软件 xff0c 所以安装非常简单 安装完成后会有两个快捷方式 xff0c 一个是X
  • openstack octavia 简介以及手工安装过程

    openstack octavia 是 openstack lbaas的支持的一种后台程序 xff0c 提供为虚拟机流量的负载均衡 实质是类似于trove xff0c 调用 nove 以及neutron的api生成一台安装好haproxy和
  • Win10 ubuntu子系统,如何安装到其他盘?

    win10的WSL子系统 xff0c 如果是按照网上的一般的安装方法 xff0c 基本都是安装到了C盘了 xff0c 但是只要稍微懂点电脑知识的人都不希望自己的软件安装到C盘 xff0c 那么这个子系统怎么能不安装到C盘咧 xff1f 首先
  • ffmpeg 转jpg文件为rgb32格式的文件

    ffmpeg i 1 jpg vcodec rawvideo pix fmt rgba raw1 rgb 1 jpg 需要转换的原始文件 rgba bgra rgba格式转换 raw1 rgb 转换完成输出的文件名 xff08 注 xff1
  • vbox下安装archlinux

    从 http mirrors ustc edu cn archlinux iso 下载archlinux 在vbox中启动安装介质 xff0c 默认关闭uefi 一路默认 xff0c 一直到磁盘分配 输入 span class hljs p
  • openstack zun源码分析

    容器服务启动过程 项目包括三个服务 xff0c 分别是zun api xff0c zun wsproxy xff0c zun compute xff0c 均使用systemctl来管理启动停止 xff0c 相关的服务文件如 zun api
  • 有效解决Ubuntu18.04无法联网问题

    网络配置 虚拟机的网络适配器的模式有两种 xff1a 桥接模式 xff1a 使得虚拟机拥有跟物理机一样的IP地址 NAT模式 xff1a 使得虚拟机直接共享物理机的IP xff0c 自己本身没有独立的IP地址 这两种模式选择在 以上两种模式
  • 5分钟带你了解音视频开发

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