音视频开发进阶指南(音视频开发进阶指南读后感)

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

第三章 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

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

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

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

图像数值的表示

归一化表示,取值范围 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数据格式

视频水印添加及反色

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

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

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

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

抖音运营方面的工具有哪些

我用的最多的软件有:1、西瓜数据2、微商相册3、Toobigdate4、快剪辑等

短视频运营实时更新
链接:https://pan.baidu.com/s/1QTf0ACiCD39vHlybC4vOhA

?pwd=2D72
提取码:2D72 

资源包含:快手赚钱全攻略   、火神社7成佣金暴利带车    抖推猫开创星座号小程序新玩法    【云递联盟】雷神9月9日安卓硬改伪新机教程    臻曦无人直播    敢死队8.7苹果手机抖音自动养号教程!无需任何插件和物理外挂!轻松助你解决不适宜!    火神社视频号新机制与不刷赞撸养生茶玩法,轻松日赚1000+【视频教程】    媒老板·8堂0基础直播带货课    9.12J总不适宜公开和全平台实时转播技术    秋叶视频号训练营    9.9日398火神社视频号新机制与不刷赞撸养生茶    抓住2020年最大风口,小白也能做一个赚钱的视频号!(赠送爆款拆解)    【云递联盟】雷神9月8日实时转播技术    【云递联盟】雷神9月4日直播间破不适宜    鸭子工作室不适宜公开    无人直播时间同步技术    陈江熊直播课程 等

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

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

上一篇:太原市一体化政务服务平台(山西省一体化政务服务平台)
下一篇:手机vue开发小程序(vue直接开发小程序)
相关文章

 发表评论

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