本节内容:音视频面试常见问题-视频花屏、绿屏、黑屏排查思路
1视频画面怎么表示YUV/RGB
2.视频为什么会花屏
3.视频为什么会绿屏
4视频为什么会黑屏音
5.音视频成长路线分享
一、音视频面试常见问题-视频花屏、绿屏、黑屏排查思路
1.音视频编解码原理
简单来说就是 推流---流媒体服务器转发--拉流
2.图像基础概念
1.图像的基本概念
像素: 像素是一个图片的基本单位,pix是英语单词picture的简写,加上英语单词“元素element”,就行到了”pixe”,简称px,所以像素”有“图像元素之意。
分辨率: 是指图像的大小或尺寸。比如1920x1080。
位深: 是指在记录数字图像的颜色时,计算机实际上是用每个像囊需要的位深来表示的。比如红色分量用8bit。
率: 在1秒钟时间里传输的图片的倾数,也可以理解为图形处理器每秒钟能够刷新几次。比如25fps表示一秒有25张图片。
码率:视频文件在单位时间内使用的数据流量。比如1Mbps。
Stride: 指在内存中每行像素所占的空间。为了实现内存对齐每行像素在内存中所占的空间并不一定是图像的宽度.
2.YUV
2.1什么是YUV?
2.2YUV的存储方式:
2.3不同采样率 采样
2.4为什么解码出现绿屏?
一般:解码RGB出现绿屏、分辨率问题
因为解码失败时YUV分量都填为0值,然后根据公式:
R = 1.402*(-128)=-126.598
G=-0.34414*(-128)-0.71414*(-128)= 44.04992 + 9140992 = 135.45984B = 1.772*(-128)=-126.228
RGB 佰范围为[0,255],所以最终的值为
R =0
G=135.45984
B=0
此时只有G分量有值所以为绿色
YUV -> RGB
3.视频为什么需要进行编码压缩?
一张为720x480的图像,用YUV420P的格式来表示,其大小为:72048015约等于0.5MB
如果是25顿,10分钟的数据量 0.5M10*60*25 = 7500MB->7GB多
视频编码压缩的目的是降低视频数据大小,方便存储和传输。
视频压缩原理--数据冗余:
编码的目的是为了压缩,各种视频编码算法都是为了让视频体积变得更小,减少对存储空间和传输带宽的占用。编码的核心是去除冗余信息,通过以下几种冗余来达到压缩视频的目的:
1.空间冗余:图像相邻像素之间有较强的相关性,比如一帧图像划分成多个16x16 的块之后,相邻的块很多时候都有比较明显的相似性
2.时间冗余:视频序列的相邻前后帧图像之间内容相似,比如帧率为 25fps 的视频中前后两帧图像相差只有 40ms,前后两张图像的变化较小,相似性很高
3.视觉冗余:我们的眼睛对某些细节不敏感,对图像中高频信息的敏感度小于低频信息的。可以去除图像中的一些高频信息,人眼看起来跟不去除高频信息差别不大(有损压)
4.编码冗余(信息熵冗余) :一幅图像中不同像素出现的概率是不同的。对出现次数比较多的像素,用少的位数来编码。对出现次数比较少的像素,用多的位数来编码,能够减少编码的大小。比如哈夫曼编码
图像帧的类型:
3.1为什么 压缩的原始数据一般采用yuv的格式?
视频编码是对一张张图像来进行的。我们知道彩色图像的格式是 RGB 的,但RGB 三个颜色是有相关性的。
采用YUV格式,利用人对图像的感觉的生理特性,对于亮度信息比较敏感,而对于色度信息不太敏感,所以视频编码是将Y分量和UV分量分开来编码的,并且可以减少UV分量比如我们之前说的YUV420P。
3.2视频花屏、绿屏、黑屏排查
一般情况下问题出现的原因:
黑屏:渲染,比如opengl
绿屏:解码,丢数据问题
花屏:丢数据问题,码率过低
步骤:发送端--服务器转发--接收端
通过以上三个方面去排查:
1.如果发现观众端显示不正常排查顺序:
a.排查接收端
内存是否对齐?dump的格式是否正确?网络网卡带宽的限制?
b.发送端查询
dump H264的数据是否正常?
udp发送,有没有可能丢包?
采集数据的格式是否正常?
c.服务器排查(很多使用的是第三方的服务器)
一般排查相对难,层级去排查。