app开发者平台在数字化时代的重要性与发展趋势解析
726
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 的采样与格式
移动端图片格式调研
《音视频开发进阶指南:基于Android与iOS平台的实践》百度网盘pdf最新全集-:
链接: https://pan.baidu.com/s/1_XWVI4OhWHxU7WJc0qqicA
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
更多音视频知识请点击 : 专注音视频开发
该篇主要是探讨转码相关的技术点,比如:
一般来说,在做转码时音频影响不大,重点在于视频压缩。
视频压缩参数主要分为以下:
编码器高级参数设置,甚为复杂:
x264参数在FFMPEG中可以使用很多参数,同样也可以使用x264本身的参数来控制,具体的参数列表如下所示:
音视频技术交流群1 已满
音视频技术交流群2 已满
音视频技术交流群3 群号782508536
最新文章请关注以下专栏:
专栏: https://www.jianshu.com/nb/29979868
知乎专栏: https://zhuanlan.zhihu.com/multimedia
[1] ffmpeg转换参数和压缩输出大小的比率
关于音视频开发进阶和音视频开发进阶指南这本书怎么样的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 音视频开发进阶的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于音视频开发进阶指南这本书怎么样、音视频开发进阶的信息别忘了在本站进行查找喔。版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~