小米电视 app 开发的前景与挑战,如何把握市场机会?
494
2022-12-21
本文目录一览:
首先了解编码器、容器、采样率等。其余音视频开发怎么学的如图像、视频分辨率;画面更新fps、压缩(视频、音频、帧压缩等)
编解码器(codec)指的是-一个能够对一个信号或者-一个数据流进行变换的设备或者程序。这里指的变换既包括将信号或者数据流进行编码(通常是为了传输、存储或者加密)或者提取得到一个编码流的操作音视频开发怎么学,也包括为了观察或者处理从这个编码流中恢复适合观察或操作的形式的操作。编解码器经常用在视频会议和流媒体等应用中。
很多多媒体数据流需要同时包含音频数据和视频数据音视频开发怎么学,这时通常会加入一些用于音频和视频数据同步的元数据,例如字幕。这 三种数据流可能会被不同的程序,进程或者硬件处理,但是当它们传输或者存储的时候,这三种数据通常是被封装在一起的。通常这种封装是通过视频文件格式来实现的,例如常见的*.mpg, *.avi, *.mov, * .mp4, *.rm, *.ogg or *.tta.这些格式中有些只能使用某些编解器,而更多可以以容器的方式使用各种编解码器。
采样率(也称为采样速度或者采样频率)定义了每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。采样频率的倒数叫作采样周期或采样时间,它是采样之间的时间间隔。注意不要将采样率与比特率(bitrate, 亦称一位速率II )相混淆。
视频文件可被感知的有两个方面: 视频 和 音频 ,一个完整的视频文件中,可能包含着不同场景的多个子视频,不同的多个子音频。
音视频开发怎么学我们将这些 视频码流 、 音频码流 进行封装格式数据,形成我们常见的MP4、MKV、AVI文件,就可以在网络上进行传输了。
当我们拿到一个视频文件时,我们可以通过支持该格式的视频播放软件进行播放,播放主要包括如下步骤:
在文件编码这块主要由两个目的,其一是形成统一的数据形式,以 便于存储和传输 ,第二是为了 删除冗余数据 。
试想一下,一个1080P 30帧,32bit色彩 时长为1秒的视频文件,如果按每一帧画面进行存储的话,数据大小将会达到:
32bit * 30 * 1080 * 1920 ≈ 237MB的空间,除非有特殊的需求,这种方式存储、传输视频显然是不可接受的。
如果我们采取编码算法,例如MPEG4、H.264等等算法对视频文件进行去冗余,压缩后,那么实际上得到的文件大小会大大降低。
前面说到,编码的主要目的是为了压缩,各种编码方式都是为了让视频体积小,核心的思想就是:去除冗余信息,冗余信息主要包括:
例如这样一张视频截图,在背景色全部是黑色的情况下,我们实际上没有必要按照视频大小(1124*772)存储黑色,我们可以将存储黑色的像素点抽离出来记录,只存储其他像素点的颜色即可。
简单地说就是帧A和帧B是前后帧的关系,并且两个帧之间画面变化相对较小,那么帧B就完全没有必要存储一个完整的画面帧,记录变化即可。
人眼难以感知到或者说不敏感的部分图像数据可以压缩存储。
例如,对于图像的编码和解码处理时,由于压缩或量比截断引入了噪声而使图像发生了一些变化,如果这些变化不能为视觉所感知,则仍认为图像足够好。
事实上人类视觉系统一般的分辨能力约为26灰度等级,而一般图像量化采用28灰度等级,这类冗余我们称为视觉冗余。
也称编码冗余, 人们用于表达某一信息所需要的比特位数 总 比理论上表示该信息所需要的最小比特数 来的大,这之间的差距就成为信息熵冗余。
将音频三元组(采样率,采样大小和通道数)的值转成另外一-组值;
例如:将44100/16/2转成48000/16/2
《音视频入门到精通解析全套教学》
帧内预测是根据帧内已经编码的样本,为当前的样本计算出一个预测值,用当前样本值减去预测值得到一个残差值,目的就是为了减少传输的数据量。
rgb 8bit位深,3通道(不含透明度),一个pix占用3Bytes
常见电影_fps=60; 视频直播_fps=15
实时:i+p;转码:大量b帧,为减小存储
与帧相似程度极高达到95%6以上编码成B像是程度7096编码成P帧。如何编码不需要程序员来实现,已经由x264这个工具帮我们做了
图片
视频帧就行编码。大致的流程分为三步:
VTCompressionSessionCreate 创建编码对象参数详解:
VTCompressionSessionEncodeFrame 编码函数参数详解:
本篇就介绍了音视频的编码原理,及部分解析。更多H264以及H265编码,以及ffmpeg 实现。可以前往 《音视频入门到精通解析全套教学》 学习;里面内容解析了从入门到精通的详细教学。以及FFmpeg的实战笔录。
帧,是视频的一个基本概念,表示一张画面,如上面的翻页动画书中的一页,就是一帧。一个视频就是由许许多多帧组成的。
帧率,即单位时间内帧的数量,单位为:帧/秒 或fps(frames per second)。一秒内包含多少张图片,图片越多,画面越顺滑,过渡越自然。 帧率的一般以下几个典型值:
24/25 fps:1秒 24/25 帧,一般的电影帧率。
30/60 fps:1秒 30/60 帧,游戏的帧率,30帧可以接受,60帧会感觉更加流畅逼真。
85 fps以上人眼基本无法察觉出来了,所以更高的帧率在视频里没有太大意义。
这里我们只讲常用到的两种色彩空间。
RGB的颜色模式应该是我们最熟悉的一种,在现在的电子设备中应用广泛。通过R G B三种基础色,可以混合出所有的颜色。
这里着重讲一下YUV,这种色彩空间并不是我们熟悉的。这是一种亮度与色度分离的色彩格式。
早期的电视都是黑白的,即只有亮度值,即Y。有了彩色电视以后,加入了UV两种色度,形成现在的YUV,也叫YCbCr。
Y:亮度,就是灰度值。除了表示亮度信号外,还含有较多的绿色通道量。
U:蓝色通道与亮度的差值。
V:红色通道与亮度的差值。
音频数据的承载方式最常用的是 脉冲编码调制 ,即 PCM 。
在自然界中,声音是连续不断的,是一种模拟信号,那怎样才能把声音保存下来呢?那就是把声音数字化,即转换为数字信号。
我们知道声音是一种波,有自己的振幅和频率,那么要保存声音,就要保存声音在各个时间点上的振幅。
而数字信号并不能连续保存所有时间点的振幅,事实上,并不需要保存连续的信号,就可以还原到人耳可接受的声音。
根据奈奎斯特采样定理:为了不失真地恢复模拟信号,采样频率应该不小于模拟信号频谱中最高频率的2倍。
根据以上分析,PCM的采集步骤分为以下步骤:
采样率,即采样的频率。
上面提到,采样率要大于原声波频率的2倍,人耳能听到的最高频率为20kHz,所以为了满足人耳的听觉要求,采样率至少为40kHz,通常为44.1kHz,更高的通常为48kHz。
采样位数,涉及到上面提到的振幅量化。波形振幅在模拟信号上也是连续的样本值,而在数字信号中,信号一般是不连续的,所以模拟信号量化以后,只能取一个近似的整数值,为了记录这些振幅值,采样器会采用一个固定的位数来记录这些振幅值,通常有8位、16位、32位。
位数越多,记录的值越准确,还原度越高。
最后就是编码了。由于数字信号是由0,1组成的,因此,需要将幅度值转换为一系列0和1进行存储,也就是编码,最后得到的数据就是数字信号:一串0和1组成的数据。
整个过程如下:
声道数,是指支持能不同发声(注意是不同声音)的音响的个数。 单声道:1个声道
双声道:2个声道
立体声道:默认为2个声道
立体声道(4声道):4个声道
码率,是指一个数据流中每秒钟能通过的信息量,单位bps(bit per second)
码率 = 采样率 * 采样位数 * 声道数
这里的编码和上面音频中提到的编码不是同个概念,而是指压缩编码。
我们知道,在计算机的世界中,一切都是0和1组成的,音频和视频数据也不例外。由于音视频的数据量庞大,如果按照裸流数据存储的话,那将需要耗费非常大的存储空间,也不利于传送。而音视频中,其实包含了大量0和1的重复数据,因此可以通过一定的算法来压缩这些0和1的数据。
特别在视频中,由于画面是逐渐过渡的,因此整个视频中,包含了大量画面/像素的重复,这正好提供了非常大的压缩空间。
因此,编码可以大大减小音视频数据的大小,让音视频更容易存储和传送。
视频编码格式有很多,比如H26x系列和MPEG系列的编码,这些编码格式都是为了适应时代发展而出现的。
其中,H26x(1/2/3/4/5)系列由ITU(International Telecommunication Union)国际电传视讯联盟主导
MPEG(1/2/3/4)系列由MPEG(Moving Picture Experts Group, ISO旗下的组织)主导。
当然,他们也有联合制定的编码标准,那就是现在主流的编码格式H264,当然还有下一代更先进的压缩编码标准H265。
H264是目前最主流的视频编码标准,所以我们后续的文章中主要以该编码格式为基准。
H264由ITU和MPEG共同定制,属于MPEG-4第十部分内容。
我们已经知道,视频是由一帧一帧画面构成的,但是在视频的数据中,并不是真正按照一帧一帧原始数据保存下来的(如果这样,压缩编码就没有意义了)。
H264会根据一段时间内,画面的变化情况,选取一帧画面作为完整编码,下一帧只记录与上一帧完整数据的差别,是一个动态压缩的过程。
在H264中,三种类型的帧数据分别为
I帧:帧内编码帧。就是一个完整帧。
P帧:前向预测编码帧。是一个非完整帧,通过参考前面的I帧或P帧生成。
B帧:双向预测内插编码帧。参考前后图像帧编码生成。B帧依赖其前最近的一个I帧或P帧及其后最近的一个P帧。
全称:Group of picture。指一组变化不大的视频帧。
GOP的第一帧成为关键帧:IDR
IDR都是I帧,可以防止一帧解码出错,导致后面所有帧解码出错的问题。当解码器在解码到IDR的时候,会将之前的参考帧清空,重新开始一个新的序列,这样,即便前面一帧解码出现重大错误,也不会蔓延到后面的数据中。
DTS全称:Decoding Time Stamp。标示读入内存中数据流在什么时候开始送入解码器中进行解码。也就是解码顺序的时间戳。
PTS全称:Presentation Time Stamp。用于标示解码后的视频帧什么时候被显示出来。
前面我们介绍了RGB和YUV两种图像色彩空间。H264采用的是YUV。
YUV存储方式分为两大类:planar 和 packed。
planar如下:
packed如下:
上面说过,由于人眼对色度敏感度低,所以可以通过省略一些色度信息,即亮度共用一些色度信息,进而节省存储空间。因此,planar又区分了以下几种格式:YUV444、 YUV422、YUV420。
YUV 4:4:4采样,每一个Y对应一组UV分量。
YUV 4:2:2采样,每两个Y共用一组UV分量。
YUV 4:2:0采样,每四个Y共用一组UV分量。
其中,最常用的就是YUV420。
YUV420属于planar存储方式,但是又分两种类型:
YUV420P:三平面存储。数据组成为YYYYYYYYUUVV(如I420)或YYYYYYYYVVUU(如YV12)。
YUV420SP:两平面存储。分为两种类型YYYYYYYYUVUV(如NV12)或YYYYYYYYVUVU(如NV21)
原始的PCM音频数据也是非常大的数据量,因此也需要对其进行压缩编码。
和视频编码一样,音频也有许多的编码格式,如:WAV、MP3、WMA、APE、FLAC等等,音乐发烧友应该对这些格式非常熟悉,特别是后两种无损压缩格式。
但是,我们今天的主角不是他们,而是另外一个叫AAC的压缩格式。
AAC是新一代的音频有损压缩技术,一种高压缩比的音频压缩算法。在MP4视频中的音频数据,大多数时候都是采用AAC压缩格式。
AAC格式主要分为两种:ADIF、ADTS。
ADIF:Audio Data Interchange Format。音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。这种格式常用在磁盘文件中。
ADTS:Audio Data Transport Stream。音频数据传输流。这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。
ADIF数据格式:
ADTS 一帧 数据格式(中间部分,左右省略号为前后数据帧):
AAC内部结构也不再赘述,可以参考AAC 文件解析及解码流程
细心的读者可能已经发现,前面我们介绍的各种音视频的编码格式,没有一种是我们平时使用到的视频格式,比如:mp4、rmvb、avi、mkv、mov...
没错,这些我们熟悉的视频格式,其实是包裹了音视频编码数据的容器,用来把以特定编码标准编码的视频流和音频流混在一起,成为一个文件。
例如:mp4支持H264、H265等视频编码和AAC、MP3等音频编码。
我们在一些播放器中会看到,有硬解码和软解码两种播放形式给我们选择,但是我们大部分时候并不能感觉出他们的区别,对于普通用户来说,只要能播放就行了。
那么他们内部究竟有什么区别呢?
在手机或者PC上,都会有CPU、GPU或者解码器等硬件。通常,我们的计算都是在CPU上进行的,也就是我们软件的执行芯片,而GPU主要负责画面的显示(是一种硬件加速)。
所谓软解码,就是指利用CPU的计算能力来解码,通常如果CPU的能力不是很强的时候,一则解码速度会比较慢,二则手机可能出现发热现象。但是,由于使用统一的算法,兼容性会很好。
硬解码,指的是利用手机上专门的解码芯片来加速解码。通常硬解码的解码速度会快很多,但是由于硬解码由各个厂家实现,质量参差不齐,非常容易出现兼容性问题。
MediaCodec 是Android 4.1(api 16)版本引入的编解码接口,是所有想在Android上开发音视频的开发人员绕不开的坑。
由于Android碎片化严重,虽然经过多年的发展,Android硬解已经有了很大改观,但实际上各个厂家实现不同, 还是会有一些意想不到的坑。
相对于FFmpeg,Android原生硬解码还是相对容易入门一些,所以接下来,我将会从MediaCodec入手,讲解如何实现视频的编解码,以及引入OpenGL实现对视频的编辑,最后才引入FFmpeg来实现软解,算是一个比较常规的音视频开发入门流程吧。
音视频之所以叫音视频是因为他由音频和视频构成音视频开发怎么学,音视频开发怎么学我们平时看的视频其实就是音视频。本文将记录笔者在学习音视频遇到的概念音视频开发怎么学,如果你和笔者一样对音视频并没有接触太多音视频开发怎么学,那么下面的笔记将会帮你认识音视频。
描述概念
PCM 即音频裸数据量大,存在本地稍微可以接受,但是要在网络中实时在线传播的话就太大了,因此就有了音频压缩编码的存在。压缩编码实际上就是 压缩冗余信号 ,冗余信号指的是人耳听不到的音频信号(20Hz ~ 20kHz范围以外)。
PCM(Pulse Code Modulation,脉冲编码调制)是无损编码,也是音频裸数据,能够达到最大程度的高保真。
优点 :音源信息保存完整,音质好
缺点 :信息量大,体积大,冗余度过大
适用场合 :广泛用于素材保存及音乐欣赏
WAV(Waveform Audio File Format)是一种不会进行压缩操作的编码,他在 PCM 数据格式的前面加上了 44字节 ,分别用来描述 PCM 的采样率、声道数、数据格式等信息。
优点 :音质非常好,大量软件都支持
缺点 :信息量大,体积大,冗余度过大
适用场合 :多媒体开发的中间文件、保存音乐和音效素材
MP3 具有不错的压缩比,使用 LAME 编码的中高码率的 MP3 文件,听感上非常接近 WAV 文件。
优点 :音质在 128 Kbps 以上表现还不错,压缩比比较高,兼容性高
缺点 :在 128 Kbps 及以下时,会出现明显的高频丢失
适用场合 :高比特率下对兼容性有要求的音乐欣赏
AAC 是新一代的音频有损压缩技术,它通过一些附加的编码技术(比如PS、SBR等),衍生出了 LC-AAC、HE-AAC、HE-AAC v2 三种主要的编码格式:
优点 :在小于 128 Kbps 的码率下表现优异,支持多种音频声道组合,提供优质的音质
适用场合 :128 Kbps 以下的音频编码,多用于视频中的音频轨的编码
Ogg 在各种码率下大豆油比较优秀的表现,尤其在中低码率场景下。可以用更小的码率达到更好的音质,128 Kbps 的 Ogg 比 192 Kbps 甚至更高码率的 MP3 还要出色。但是它的兼容性不是很好,因此和 MP3 无法相提并论。
优点 :可用比 MP3 个更小的码率实现比 MP3 更好的音质,高低中码率下均有良好的表现
缺点 :软件硬件的兼容性不好
使用场合 :语音聊天的音频消息场景
一幅幅图像是由一个个像素点组成的,每个像素点都由3个子像素点组成。
像素点的数量就是分辨率,比如一个屏幕的分辨率是 1280 x 720 ,那么说明水平方向有 720 个像素点,垂直方向有 1280 个像素点,因此整个屏幕就有 1280 x 720 个像素点(注:这是不算子像素点的说法)。
位图的像素都分配有特定的位置和颜色值。每个像素的颜色信息由 RGB 组合或者灰度值表示。根据 位深度 ,可将位图分为1、4、8、16、24及32位图像等。每个像素使用的信息位数越多,可用的颜色就越多,颜色表现就越逼真,相应的数据量越大。
一个图像可以由 RGB 组成,这些 子像素点的常用表示方式 如下:
那么一张 1280 x 720 的 RGBA_8888 图像的大小就是:
YUV 主要应用于优化彩-信号的传输,使其向后兼容老实黑白电视。与 RGB 视频型号传输相比,最大的优点是占用极少的 频宽
表示方式 :YUV 的每个分量都使用一个字节(8位)来表示,所以取值范围是 0 ~ 255。
存储格式 :
采样范式 :YUV 图像的主流采样方式有如下三种:
YUV 4:4:4 采样,意味着 Y、U、V 三个分量的采样比例相同,因此在生成的图像里,每个像素的三个分量信息完整,都是 8 bits,也就是一个字节。
如下图所示(Y 分量用叉表示,UV 分量用圆圈表示):
这种采样方式的图像和 RGB 颜色模型的图像大小是一样,并没有达到节省带宽的目的,当将 RGB 图像转换为 YUV 图像时,也是先转换为 YUV 4:4:4 采样的图像。
YUV 4:2:2 采样,意味着 UV 分量是 Y 分量采样的一半,Y 分量和 UV 分量按照 2 : 1 的比例采样。每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一个采集一个。如下图所示(Y 分量用叉表示,UV 分量用圆圈表示):
两个图像共用一个 U、V 分量,因此YUV 4:2:2 采样的图像比 RGB 模型图像节省了三分之一的存储空间,在传输时占用的带宽也会随之减少。
YUV 4:2:0 采样,并不是指只采样 U 分量而不采样 V 分量。而是指,在每一行扫描时,只扫描一种色度分量(U 或者 V),和 Y 分量按照 2:1 的方式采样。每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一行按照 2 : 1 进行采样。对于每个色度分量来说,它的水平方向和竖直方向的采样和 Y 分量相比都是 2:1 。如下图所示(Y 分量用叉表示,UV 分量用圆圈表示):
四个图像共用一个 U、V 分量,因此YUV 4:2:0 采样的图像比 RGB 模型图像节省了一半的存储空间,因此它也是比较主流的采样方式。
RGB 到 YUV 的转换,就是将图像所有像素点的 R、G、B 分量转换到 Y、U、V 分量。对于显示器来说,它是通过 RGB 模型来显示图像的,而在传输图像数据时又是使用 YUV 模型(可节省带宽),因此就有:
视频中的每帧都代表着一幅静止的图像
相较于音频数据,视屏数据有极强的相关性,也就是说有大量的冗余信息,包括空间上的冗余信息和时间上的冗余信息。
帧间编码技术 - 去除时间上的冗余信息
帧内编码技术 - 去除空间上的冗余信息
MPEG 算法是适用于动态视频的压缩算法,它除了对单幅图像进行编码外,还利用图像序列中的相关原则去除冗余,大大提高了视频的压缩比。
ITU-T 制定的 H.261、H.262、H.263、H.264⼀系列视频编码标准是⼀套单独的体系。其中,H.264 集中了以往标准的所有优点,并吸取了以往标准的经验,采⽤的是简洁设计,这使得它⽐ Mpeg4 更容易推⼴。现在使⽤最多的就是 H.264 标准,H.264 创造了 多参考帧 、 多块类型 、 整数变换 、 帧内预测 等新的压缩技术,使⽤了更精细的分像素运动⽮量(1/4、1/8)和新⼀代的环路滤波器,这使得压缩性能得到⼤⼤提⾼,系统也变得更加完善。
GOP( Group Of Picture ),表示一组图片,两个I帧之间就形成的一组图片。通常在为编码器设置参数的时候,必须要设置 gop_size 的值,其代表的是两个I帧之间的帧数目。
《音视频开发进阶指南》
一文读懂 YUV 的采样与格式
移动端图片格式调研
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~