cherishman2005 / rtc

webrtc websocket GCC NACK FEC
MIT License
17 stars 2 forks source link

音视频开发 #6

Open cherishman2005 opened 3 years ago

cherishman2005 commented 3 years ago

人类视觉系统HVS

HVS的构成: 眼睛 神经 大脑

image

HVS特点: 对高频信息不敏感 对高对比度更敏感 对亮度信息比色度信息更敏感 对运动的信息更敏感

image

针对HVS的特点,数字视频系统的设计应该考虑哪些因素?

丢弃高频信息,只编码低频信息 提高边缘信息的主观质量 降低色度的解析度 对感兴趣区域(Region of Interesting,ROI)进行特殊处理

image

什么是RGB色彩空间?

三原色分别是红(R),绿(G),蓝(B)。任何颜色都可以通过按一定比例混合三原色产生。

RGB色度空间: 由RGB三原色组成 广泛用于BMP,TIFF,PPM等 每个色度成分通常用8bit表示[0,255]

image

什么是YUV色彩空间?

YUV色彩空间是指,Y:亮度分量,UV:两个色度分量。YUV能更好的反映HVS特点。

RGB如何转化到YUV空间?

image

主流的编解码标准的压缩对象都是YUV图像。

何为YUV图像分量采样?

YUV图像可以根据HVS的特点,对色度进行分量采样,可以降低视频数据量。

根据亮度和色度分量的采样比率,YUV图像通常有以下几种分量方式:

image

通用的YUV图像格式有哪些?

根据YUV图像的亮度、分辨率定义了如下图像格式:

image

I/P/B

image

码率控制

受到缓冲区,带宽的限制,编码码率不能无限制的增长,因此需要通过码率控制来将编码码流控制在目标码率范围内。

一般通过调整量化参数的手段控制码率:

帧级控制 条带级控制 宏块级控制

码率控制考虑的问题:

防止码流有较大的波动,导致缓冲区发生溢出, 同时保持缓冲区尽可能的充满,让图像质量尽可能的好而且稳定

CBR(Constant Bit Rate):比特率稳定,但图像质量变化大。VBR(Variable Bit Rate):比特率波动大,但图像质量稳定。

码率控制算法:

码率分配 码率控制

码率控制属于非标准技术,编码端有,解码端没有。

image

cherishman2005 commented 3 years ago

视音频数据处理入门:RGB、YUV像素数据处理 https://blog.csdn.net/leixiaohua1020/article/details/50534150

cherishman2005 commented 3 years ago

https://github.com/xhunmon/VABlog

一、前言

正所谓源于开源,回馈开源!以下是学习音视频路线推荐。丰富的音视频资料往最后翻。

二、学习技能

技能 重要度 作用 学习建议
c/c++ ★★★★☆ 音视频开源库基本都是用c/c++写的,如:FFmpeg库用C语言写的,Webrtc底层是用c++写的。 1. 看动脑或网易c/c++视频;2. 看书:c++ primer 第5版;3. 看FFmpeg源码;4. 最重要自己动手敲。
cmake ★★★☆☆ 跨平台引导编译的重要语言。在CMakeList.txt文件体现。 1. 看动脑CMake中视频;2. CMake 入门实战
shell ★★☆☆☆ 很多开源库都是通过shell脚本进行编译的。如ffmpeg和x264中configure。 Shell脚本
Android NDK ★★☆☆☆ 在android平台上使用,需要掌握NDK的一些知识。如:交叉编译,JNI的接入。 看动脑NDK中JNI和交叉编译视频;
IOS ★★☆☆☆ (略) (略)

三、学习音视频理论知识

四、学习音视频基本原理

1)视音频数据处理入门

[总结]视音频编解码技术零基础学习方法 系列文章,介绍了视音频编解码技术大体上原理和流程,通俗易懂。包括以下文章:

2)完整RTMP推送小项目

这个项目简单介绍音视频相关知识,以及实现的原理,总共分五章:

五、学习FFmpeg

音视频开发是绕不开FFmpeg的,因为它是一个"集大成者",里面已经包含或可集成现代几乎所有的音视频技术(库)。

1)学习途径

2)学习路线

这里不推荐直接学习雷神的 [总结]FFMPEG视音频编解码零基础学习方法,建议是通过在学习FFmpeg官方例子中进行学习,避免先入为主使用了过时的API。

a) 源码编译

编译ffmpeg4.2.2通过这篇文章我们基本可以编译出我们想要的FFmpeg库

b) 源码阅读

c) 学习官方例子

d) 音视频同步

3)FFmpeg相关

六、OpenGL

OpenGL使用GPU渲染视频,释放宝贵的CPU资源,学习它是必不可少的。但是,正如雷神所说 :作为一个搞视频技术的人研究OpenGL,需要耗费大量时间和精力,这样学习不是很经济。所以推荐只学习有关视频渲染相关知识。

其他推荐

更多精彩内容持续更新中...

音视频资料

创作皆不易,有条件的朋友请支持原版,谢谢!

cherishman2005 commented 3 years ago

ffmpeg

image

转码原理

image

image

音视频文件的格式有封装格式、编码格式之分:

封装格式是因为音频、视频的同步需要而出现的,因此封装格式是 没有 视频封装格式、 音频封装格式这样的概念的,常见的封装格式有:Avi、Flv、Mkv、Mp4、Mov、Rmvb 等

编码格式则需要区分音频、视频: 常见的音频编码格式有:Mp3、AAC; 常见的视频编码格式有:H.26x 系列(H.261、H.263、H.264、H.265 等)、MPEG 系列(MPEG-1、MPEG-2、MPEG-4 等)

转码则是针对编码格式而言的,包括音频、视频。 比如从 MPEG-1 转码为 H.264。

音视频同步

造成音视频不同步的原因有很多种,学会分析其中的原因才是我们想要的,其中最好的方式就是看别人怎么做的。如果你在做播放的过程想参考一下音视频同步处理不妨看一下fftools/ffplay.c 。