音视频开发进阶(音视频开发进阶指南这本书怎么样)

网友投稿 744 2022-12-22

本篇文章给大家谈谈音视频开发进阶,以及音视频开发进阶指南这本书怎么样对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享音视频开发进阶的知识,其中也会对音视频开发进阶指南这本书怎么样进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

音视频基础概念

音视频之所以叫音视频是因为他由音频和视频构成音视频开发进阶,我们平时看音视频开发进阶的视频其实就是音视频。本文将记录笔者在学习音视频遇到音视频开发进阶的概念音视频开发进阶,如果你和笔者一样对音视频并没有接触太多,那么下面的笔记将会帮你认识音视频。

描述概念

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 的采样与格式
移动端图片格式调研

图像数值的表示

归一化表示,取值范围 0.0~1.0 ,如openGL对每个子像素点的表示方式。

取值范围 0~255 或者 00~FF ,8bit表示一个子像素。
如图像格式RGBA_8888,表示4*8bit表示一个像素,
而RGB_565用5 + 6 + 5 bit表示一个像素。
一张1280 * 720, RGBA_8888格式的图片的大小 = 1280 * 720 * 32bit = 1280 * 720 * 32 / 8 byte,也是位图bitmap在内存中占用的大小。

视频的裸数据一般使用YUV数据格式表示。Y表示明亮度(Luminance/Luma),也称灰度值(灰阶值)。UY表示色度(Chrominance/Chroma),均表示影响的色彩和饱和度,用于指定像素的颜色。
亮度需要透过RGB输入信号建立,方式为将RGB信号的特定部分(g分量信号)叠加到一起。
色度定义了颜色的色调和饱和度,分别用Cr、Cb表示。(C代表分量(是component的缩写))
Cr 反映RGB输入信号 红色部分 与RGB信号亮度值之间的差异。
Cb 反映RGB输入信号 蓝色部分 与RGB信号亮度值之间的差异。
视频帧裸数据之所以采用YUV色彩空间,使用为亮度信号Y和色度信号UV是 分离的 。当无UV色度信号,只有Y亮度信号时,那么这样表示的图像就是黑白灰度图像。彩色电视正是使用YUV空间使用Y亮度信号解决彩色电视与黑白电视的兼容问题、使黑白电视也能接收彩色电视信号。最常用的YUV都使用8个字节来表示,所以取值范围就是0~255。但是广播电视系统不传输很低或很高的值,为了防止信号变动造成过载,因而把过高或过低这两边的数值作为“保护带”,在Rec.601和BT.709的广播标准中,Y的取值范围16~235,UV的取值范围都是16~240。

YUV最常用的采样格式是4:2:0,还有4:2:2、4:4:4等格式,一般灰度(也就是亮度)的采样是不会减少的, 因为人眼对亮度的敏感度高于色度,因此会选择适当地减少对色度的采样,节约空间 。
4:4:4 表示色度值(UV)没有减少采样。即Y,U,V各占一个字节,加上Alpha通道一个字节,总共占 4字节 这个格式其实就是24bpp(bitperpixel)的RGB格式了。
4:2:2 表示UV分量采样减半,比如第一个像素采样Y,U,第二个像素采样Y,V,依次类推每个点占用2个字节,由两个相邻的像素组成一个宏像素(macro-pixel)。
4:2:0 这种采样并不意味着只有Y,Cb而没有Cr分量,这里的0说的U,V分量 隔行才采样一次 。比如第一行采样 4:2:0,第二行采样 4:0:2,依次类推...在这种采样方式下,每一个像素占用16bits或10bits空间。
4:1:1 可以参考4:2:2分量,是进一步压缩,每隔四个点才采一次U和V分量。一般是第0点采Y,U,第1点采Y,第3点采YV,第四点采Y,依次类推。

YUV存储格式分为两类: planar和packed 。
对于packed(打包格式)的YUV格式,每个像素点的Y,U,V是连续交叉存储的。将YUV分量存放在同一个数组中,通常是几个相邻的像素组成一个宏像素(macro-pixel)
如YUV422采样的存储格式YUYV:
Y0 U0 Y1 V0 Y2 U2 Y3 V2....
其中 Y0 U0 Y1 V0 这个像素组成一个宏像素。(Y0和Y1亮度分量共用U0,V0色度分量)。

对于planar(平面格式)的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。使用三个数组分开存放YUV三个分量,就像是一个三维平面一样。
如YUV422采样的存储格式YUV422P:

RGB 转换成 YUV的标准公式:
Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16
Cr = V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128
Cb = U = -( 0.148 * R) - (0.291 * G) + (0.439 * B) + 128
YUV 转换成 RGB的标准公式:
B = 1.164(Y - 16) + 2.018(U - 128)
G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
R = 1.164(Y - 16) + 1.596(V - 128)
///当然,可以对标准公式做适当的简化,降低运算量

参考文章:
音视频开发进阶指南
YUV格式分析
YUV和RGB格式分析
YUV
YUV格式的解析
图文详解YUV420数据格式

求《基于Android与iOS平台的实践》全文免费-百度网盘资源,谢谢~

《音视频开发进阶指南:基于Android与iOS平台的实践》百度网盘pdf最新全集-:
链接: https://pan.baidu.com/s/1_XWVI4OhWHxU7WJc0qqicA

?pwd=5wmv 提取码: 5wmv
简介:书中首先通过介绍音视频的物理现象与基础概念,帮助读者建立模拟信号到数字信号转化的过程,然后重点介绍了如何在移动端开发音视频项目,其中包括开发中所需要了解的各种知识,如音视频的解码与渲染,采集与编码,音视频的处理与性能优化等;在此基础上最后综合当下*流行的直播场景,介绍如何将书中的已有项目改造、适配成为一个直播产品,进一步帮助读者自由、有效的开发出功能丰富、性能一流的音视频App。  

第三章 FFmpeg的介绍与使用

FFmpeg名称中的mpeg来自视频编码标准MPEG,而前缀FF是Fast Forward的首字母缩写。

目录

默认的编译会生成 4 个可执行文件和 8 个静态库。可执行文件包括用于 转码 、 推流 、Dump媒体文件的 ffmpeg 、用于播放媒体文件的 ffplay 、 用于获取媒体文件信息的 ffprobe ,以及作为简单流媒体服务器的 ffserver 。

8个静态库其实就是FFmpeg的8个模块,具体包括如下内容。

比如AAC编码,常见的有两种封装格式

AAC 的 bit stream filter 常常应用在 编码 的过程中。

与音频的AAC编码格式相对应的是视频中的 H264编码 ,它也有两种封装格式

FFmpeg中也提供了对应的 bit stream filter ,称 H264_mp4toannexb ,可以将MP4封装格式的H264数据包转换为annexb封装格式的H264数据 (其实就是裸的H264的数据)包。

H264 的 bit stream filter 常常应用于视频解码过程中。

ffmpeg 是进行媒体文件转码的命令行工具
ffprobe 是用于查看媒体 文件头信息的工具
ffplay 则是用于播放媒体文件的工具

1.首先用ffprobe查看一个音频的文件

2.输出格式信息format_name、时间长度duration、文件 大小size、比特率bit_rate、流的数目nb_streams等。

3.以JSON格式的形式输出具体每一个流 最详细 的信息

4.显示帧信息的命令如下:

5.查看包信息的命令如下:

ffplay是以FFmpeg框架为基础,外加渲染音视频 的库libSDL来构建的媒体文件播放器。

业界内开源的 ijkPlayer 其实就是基于 ffplay 进行改造的播放器,当然其做了硬件解码以及很多兼容性的工作。

在 ffplay中音画同步的实现方式其实有三种。分别是

并且在 ffplay 中默认的对齐方式也是以 音频 为基准进行对齐的。

首先要声明的是,播放器接收到的视频帧或者音频帧,内部都会有 时间戳(PTS时钟) 来标识它实际应该在什么时刻进行展示。

实际的对齐策略如下:比较视频当前的播放时间和音频当前的播放时间

关键就在于音视频时间的比较以及延迟的计算,当然在比较的过程中会设 置一个 阈值(Threshold) ,若超过预设的阈值就应该做调整(丢帧渲染 或者重复渲染),这就是整个对齐策略。

ffmpeg 就是强大的媒体文件转换工具。它可以转换任何格式的媒体文件,并且还可以用自己的 AudioFilter 以及 VideoFilter 进行处理和编辑。

接下来介绍一个解码的实例,该实例实现的功能非常单一,就是把一个视频文件解码成单独的音频PCM文件和视频YUV文件。

AVFormatContext是API层直接接触到的结构体,它会进行格式的封 装与解封装。

该结构体包含的就是与实际的 编解码 有关的部分。

3.3.1 av_register_all
所以该函数的内部实现会先调用 avcodec_register_all 来注册所有config.h里面开放的编解码器,然后会注册所有的 Muxer 和 Demuxer (也就是封装格式),最后注册所有的 Protocol (即协议层的东西)。

3.3.2 av_find_codec
这里面其实包含了两部分的内容:一部分是寻找 解码器 ,一部分是寻找 编码器 。

3.3.3 avcodec_open2
该函数是打开编解码器(Codec)的函数,无论是编码过程还是解码过程,都会用到该函数。

avformat_open_input
根据所提供的文件路径判断文件的格 式,其实就是通过这一步来决定使用的到底是哪一个 Demuxer 。

avformat_find_stream_info
该方法的作用就是把所有 Stream 的 MetaData 信息填充好。

av_read_frame
使用该方法读取出来的数据是 AVPacket 。

对于 音频流 ,一个 AVPacket 可能包含 多 个 AVFrame ,但是对于 视频流 ,一个 AVPacket 只包含 一 个 AVFrame ,该函数最终只会返回一个 AVPacket 结构体。

avcodec_decode
该方法包含了两部分内容:一部分是 解码视频 ,一部分是 解码音频 , 解码 是会委托给对应的解码器来实施的。

avformat_close_input
该函数负责释放对应的资源。

avformat_alloc_output_context2
该函数内部需要调用方法avformat_alloc_context来分配一个 AVFormatContext 结构体。

avio_open2
编码的阶段了,开发者需要将手动封装好的 AVFrame 结构体,作为 avcodec_encode_video 方法的输入,将其编码成为 AVPacket ,然后调用 av_write_frame 方法输出到媒体文件中。

本文参考 音视频开发进阶指南

项目源码地址 - FFmpegDecoder

视频水印添加及反色

曾经有个项目要求给实时画面添加时间水印,当时在老大的带领下,使用的方案是ffmpeg+freetype,但是这种方案有两点不太好

因为我们的时间水印是白色,这样一旦背景是白色时,就会导致水印看不到,当时是给白色字体加了黑边来规避这个问题,但是看到很多大厂都是用反色的方案

天天P图攻城狮:OpenGL shader性能优化策略一减少分支语句
LearnOpenGL CN-纹理
Dev_Maskmale:iOS 开发之字符串转图片
书籍:音视频开发进阶指南(基于Android与iOS平台的实践)

视频水印添加及反色 Demo地址

FFMPEG进阶系列03-ffmpeg转码专题(上)

更多音视频知识请点击 : 专注音视频开发

该篇主要是探讨转码相关的技术点,比如:

一般来说,在做转码时音频影响不大,重点在于视频压缩。
视频压缩参数主要分为以下:

编码器高级参数设置,甚为复杂:

x264参数在FFMPEG中可以使用很多参数,同样也可以使用x264本身的参数来控制,具体的参数列表如下所示:

音视频技术交流群1 已满
音视频技术交流群2 已满
音视频技术交流群3 群号782508536

最新文章请关注以下专栏:
专栏: https://www.jianshu.com/nb/29979868
知乎专栏: https://zhuanlan.zhihu.com/multimedia

[1] ffmpeg转换参数和压缩输出大小的比率

关于音视频开发进阶和音视频开发进阶指南这本书怎么样的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 音视频开发进阶的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于音视频开发进阶指南这本书怎么样、音视频开发进阶的信息别忘了在本站进行查找喔。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:mybatis3中@SelectProvider传递参数方式
下一篇:小程序之家app(小程序之家怎么打不开)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~