基础知识篇

344 阅读9分钟

这里将会从最最基础的知识点说起,如果感觉太基础可以直接跳过

  1. 字节和比特的关系:
1B=8b  1KB=1024B  1M=1024KB  1GB=1024MB  
  1. 比特率:每秒传送的比特,单位为bps(bit per second),用来计算信息的传递速度。也叫 码率

下面是个国际单位制下的各种比特率单位:(注意换算比)

国际单位单位简写
千比特每秒kbit/s10^3kbps
兆比特每秒Mbit/s10^6Mbps
吉比特每秒Gbit/s10^9Gbps
太比特每秒Tbit/s10^12Tbps
  1. 编码:windows平台通常使用UTF-16编码,而macOS平台通常使用UTF-32编码。
  2. 网络协议:网络上传递的二进制数据是分层的。比如TCP/IP四层网络协议和OSI七层网络协议。网络协议分层是在应用层数据包前面,附加多个协议头,如下图所示(括号内为所占字节数):

image.png 为了区分每个物理层的网卡设备,在链路层,为每个网卡定义了一个MAC地址,也叫网卡的物理地址。MAC地址通常是6字节,前3字节为厂商标识,后3字节为该厂商的设备标识。由此,可以通过MAC地址确定出是属于哪个厂商和设备。

上图中一个MAC头有14字节,就是包含了两个相互连接的主机,前6个字节为目的MAC地址,后6个字节为自身MAC地址,最后2字节用来表示使用的上层协议类型。

  1. IP地址和MAC地址互查:在windows上使用命令arp -a;在macOS/UNIX上使用arp -n
  2. UDP协议:只能保证数据包能发出,但不保证对方能准确收到。在这其中会有丢包和被攻击的可能,效率高但安全性和可靠性可能有问题。它只有8个字节,如下所示:
字段长度(单位字节)含义
源端口2Big-Endian方式
目的端口2Big-Endian方式
报文长度2报文长度必须小于65535
校验和2报文每个字节取反相加得到的和
  1. TCP协议:面向连接的、可靠的、基于字节流的传输层协议。它能保证对方一定能收到包,可靠性很高,但传输效率相对来说不高,因为传输的内容和做的功课多了。它有20个字节,前两个字节表示源端口,第3和第4字节表示目的端口

为了确保对方一定能收到数据包,做了以下3件事:

1. 给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认消息
2. 在一定时间内没有得到确认回复,就会超时重发
3. 如果重发后还是没有回应,则会将等待时间翻倍,然后再重发。(在Linux下,默认重试次数为5次,重试的间隔时间从1s开始每次都翻倍,5次的重试时间间隔为1s, 2s, 4s, 8s, 16s,总共31s,第5次发出后还要等32s才知道第5次也超时了,所以,总共需要 1s + 2s + 4s+ 8s+ 16s + 32s = 63s,TCP才会断开这个连接。)
  1. RGB颜色:分为红(red,R)、绿(greeen,G)和蓝(blue,B)3个分量进行表示。任何一个颜色都是一个RGB三元组。每个分量使用8bit表示,最小值为0,最大值为255。
  2. YUV颜色:分为Y亮度(灰度值)、U色度和V浓度。使用YUV颜色编码最大的好处就是可以降低占用的存储空间和节省带宽。原因在于视觉对于亮度的敏感远大于色度和浓度,可以适当的减少色度和浓度,以此来使用不同的压缩策略。
  3. RGB和YUV互换

image.png

image.png

  1. 分辨率:即图像大小,用长和宽表示,单位是像素。普通屏常用4:3,宽屏常用16:9。
规格分辨率宽高比
4K4096 x 216016 : 9
2k2560 x 144016 : 9
1080P1920 x 108016 : 9
720P1280 x 72016 : 9
NTSC760 x 48016 : 9
PAL720 x 5764 : 3
VGA640 x 4804: 3

12:帧率:以帧为单位的图像连续出现在显示器上的频率,简单来说就是一秒之内图片在你眼前划过数量的多少。一般限制在120fps之内。

13:重复帧检测 :用于降低帧率,将重复帧去除,降低宽带。检测重复帧可用以下方法:

  • 通过 memcmp函数 函数,直接比较前后两帧Y分量的内存,结果为0则为重复帧。
  • 计算前后两帧的 海明距离, 距离为0时判断为重复帧。
  • 计算前后两帧Y分量的均方误差MSE,当MSE为0则为重复帧。
  1. 帧率控制:当采集输出的帧率与所需的帧率不同时,可进行丢帧处理。首先给定每个帧输入时间戳,和一个所需的帧率,然后根据帧率计算出下一帧的时间戳。

image.png

  1. 视频帧类型:在视频编码中,有不同类型的帧,这些帧按照一定的顺序组织成GOP(group of picture)。
  • I帧:一种关键帧,也叫独立帧。是视频序列中独立编码的帧,不依赖于其他帧进行解码。每个 I帧 都是一个完整的图像帧,可以独立显示。
  • P帧:是预测帧,通过参考之前的一个或多个帧进行编码。利用运动估计和运动补偿来预测当前帧的内容。P帧比I帧具有更高的压缩效率。
  • B帧:双向预测帧,通过参考前后两个帧来进行编码,具有最高的压缩效率。
  1. 视频格式:以下是一些常见的视频简述和差异
名称编码方式压缩效率功能支持适用场景
MPEG-2基于离散余弦变换(DTC)的压缩算法相对较高,适用于广播,DVD和有线电视等应用支持多个音频和视频流、多角度、字幕等功能广播、DVD、数字电视等
MPEG-4 Part2基于离散余弦变换(DTC)的压缩算法,支持更高级的压缩技术比MPEG-2更高,适用于互联网和媒体流应用支持更高级的视频编码功能,如对象提取、透明视频等互联网视频、流媒体、移动视频等
H.264/MPEG-4 AVC基于离散余弦变换(DTC)的压缩算法,引入更多的编码技术和优化比MPEG-4 Part2提供更高的压缩技术,同时能保持较好的视频质量支持更多的编码功能和高级技术,如运动估计、自适应量化、多帧参考等互联网视频、流媒体、蓝光光盘、数字电视等
H.265/HEVC基于离散余弦变换(DTC)和离散正弦变换(DST)的压缩算法,引入更多的编码技术和优化达到H.264/MPEG-4 AVC两倍压缩率,可以实现更小的文件和更高的视频质量支持更多的编码功能和高级技术,如运动补偿、运动向量预测、取样自适应偏移等支持4K清晰度,甚至到超高清电视(UHDTV),最高清晰度可达到8192×4320(8K清晰度)
VP9Google开发的开源视频编码技术在相同的压缩质量下,相对于H.265/HEVC 有更高的压缩率VP9最高可支持 65536×65536的分辨率,相对而言H.265(HEVC)只支持到8192x4320互联网视频、流媒体视频等
  1. 音频采样率:采样是指将时间连续的模拟信号变成时间离散的数字信号,采样的频率就是采样率。注意:只有当采样率为最高音频频率的两倍,才不会出现信息丢失的情况。常见的设备采样率如下:
设备采样率
电话8000 Hz
AM调幅广播11025Hz
FM调幅广播22050Hz 24000Hz
音频CD、VCD和MP344100Hz
数字电视、DVD和电影48000Hz
  1. 音频格式:以下是一些常见的音频简述和差异
名称压缩率使用场景
MP3有损压缩,对人类听觉不重要的数据来达到压缩效果。比特率范围通常在128 - 320kbps具有广泛的兼容性,能适应几乎所有平台和设备
AAC有损压缩,在相同的比特率之下,相较于MP3通常可以达到更好的声音质量适用于音乐、广播和视频等
FLAC无损压缩,压缩后不会有任何音质损失。压缩效率为 50% - 70%,且压缩后还可以完全还原原始音频信号适用于音乐制作、无损音乐播放器等
ALAC(Apple Lossless Audio Codec)苹果公司出品,无损音频压缩。非压缩音频格式(WAV、AIFF)压缩至原先容量的40%至60%左右,编解码速度很快常用于 Apple设备和 iTunes中
OGG开源免费的有损压缩格式,相比于MP3和AAC,提供更好的音频质量和更小的文件大小常用于在线流媒体和音乐存储
  1. 音画同步:音频和视频的播放应该是同步的,不然就会出现听觉和视觉上的感官差异,影响观看体验。有以下三个标准:
  • 无法察觉音频和视频有区别的的时间戳差值在 -100ms 和 + 25ms 之间
  • 能够察觉音频滞后了 100ms 以上 或者 超前了 25ms 以上
  • 不能接受音频滞后了 185ms 以上 或者 超前了 90ms 以上

当然,也有常见的四种方式来解决不同的问题,1)硬件同步;2)软件同步;3)使用时间戳标记;4)使用缓存

到这里就简单介绍完了与音视频有关联的知识点了。这些知识点可能用不上,但应该了解一下。当出现问题时,这些知识点可能会给你提供一些思路和方法。

下一章节开始正式入门 webrtc。