H264

官网定义

H.264: H.264/AVC项目的目的是为了创建一个比以前的视频压缩标准,在更低的比特率的情况下依然能够提供良好视频质量的标准(如,一半或者更少于MPEG-2,H.263,或者MPEG-4 Part2 )。同时,还要不会太大的增加设计的复杂性。
优势:
1)网络亲和性,即可适用于各种传输网络
2)高的视频压缩比,当初提出的指标是比 H.263,MPEG-4,约为它们的 2 倍,现在都已基 实现;

概念

QP

量化是在不降低视觉效果的前提下减少图像编码长度,减少视觉恢复中不必要的信息。H264采用标量量化技术,它将每个图像样点编码映射成较小的数值。一般标量量化器的原理为:FQ = round(y/Qstep)。其中,y为输入样本点编码,Qstep为量化步长,FQ为y的量化值。其相反过程即反量化为:y' = FQ ·Qstep。

h264编码时,将每一帧的图像分为很多个宏块,每个宏块编码后都有一个qp值(每个宏块的qp不一定相等)。所以对于每一帧图像来说,都有一个最大qp值和最小qp值,也就是max_qp 和min_qp。

现有的码率控制算法主要是通过调整离散余弦变换的量化参数大小输出目标码率。实际上,量化参数(QP)反映了空间细节压缩情况,如QP小,大部分的细节都会被保留;QP增大,一些细节丢失,码率降低,但图像失真加强和质量下降。也就是说,QP和比特率成反比的关系,而且随着视频源复杂度的提高,这种反比关系会更明显

NACK

概念和定义

在WebRTC中,丢包重传(NACK)是抵抗网络错误的重要手段。NACK则在接收端检测到数据丢包后,发送NACK报文到发送端;发送端根据NACK报文中的序列号,在发送缓冲区找到对应的数据包,重新发送到接收端。NACK需要发送端发送缓冲区的支持,RFC5104[2]定义NACK数据包的格式。

NACK是一种RTCP报文。RTP/RTCP协议是流媒体通信最基本协议。RTP协议定义流媒体数据在互联网上传输的数据包格式,而RTCP协议则负责可靠传输、流量控制和拥塞控制等服务质量保证。在RTP会话期间,各参与者周期性彼此发送RTCP报文。报文中包含各参与者数据发送和接收等统计信息,参与者可以据此动态控制流媒体传输质量。

RTP:Real-time Transport Protocol
RTCP:RTP Control Protocol

简言之,RTCP是用来控制RTP的,类似于信令和数据。

说NACK前,先说说ACK。ACK实际上就是到达通知技术。大家都知道TCP是可靠的连接,他之所以可靠,那是因为接收方在收到数据后会给发送方返回一个“已收到数据”的消息(ACK),告诉发送方“我已经收到了”,确保消息的可靠。

NACK也是一种通知技术,只是触发通知的条件刚好的ACK相反,在未收到消息时,通知发送方“我未收到消息”,即通知未达。

在WebRTC中,NACK在接收端检测到数据丢包后,发送NACK报文到发送端;发送端根据NACK报文中的序列号,在发送缓冲区找到对应的数据包,重新发送到接收端。

流程

  1. SDP协商
  2. 接收端丢包判定
  3. NACK报文发送和接收
  4. RTP数据包重传

你可能感兴趣的:(H264)