关键帧请求
- PLI(Picture Loss Indication)
- SLI(Slice Loss Indication)
发送方接收到接收方反馈的 PLI 或 SLI 需要重新让编码器生成关键帧并发送给接收端。
- FIR(Full Intra Request)
这里面 Intra 的含义是图像内编码,不需要其他图像信息即可解码;Inter 指图像间编码,解码需要参考帧。所以 Intra Frame 其实就是指 I 帧,Inter Frame 指 P 帧或 B 帧。
那么为什么在 PLI 和 SLI 之外还需要一个 FIR 呢?
原因是使用场景不同,FIR 更多是在一个中心化的 Video Conference 中,新的参与者加入,就需要发送一个 FIR,其他的参与者给他发送一个关键帧这样才能解码,而 PLI 和 SLI 的含义更多是在发生丢包或解码错误时使用。
在网络环境不是太好的情况下,比如网络拥塞比较严重,丢包率可能比较高,简单实用NACK申请重传的机制,这样就会有大量的RTCP NACK报文,发送端收到相应的报文,又会发送大量指定的RTP报文,反而会增加网络的拥塞程度,可能导致更高的丢包率,导致接收端解码失败,导致花屏等马赛克现象。这时采用申请I帧的方式可能会解决马赛克等现象,申请的I帧方式主要PLI(Picture Loss Indication)和FIR(Full Intra Request)两种方式,FIR又包括RFC2032和RFC5104规定的两种方式,其中RFC5104规定的FIR报文比较常用。一般发送端在收到接收端发送过来的RTCP PLI报文,按申请I帧处理,当然收到FIR报文,就是申请I帧,PLI报文和FIR(RFC5104)的报文如下图:
int rtcp_pli_pack(struct rtp_context* ctx, uint8_t* ptr, int bytes ,uint32_t newssrcr)
{
/*
@doc: https://tools.ietf.org/html/rfc4585#section-6.1
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P| FMT | PT | length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SSRC of packet sender |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SSRC of media source |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: Feedback Control Information (FCI) :
: :
*/
rtcp_header_t header;
if (bytes < 12)
return 12;
header.v = 2;
header.p = 0;
header.pt = RTCP_PSFB;
header.rc = 1; // self only /* FMT=1 */
header.length =2 ;
nbo_write_rtcp_header(ptr, &header);
nbo_w32(ptr + 4, ctx->self->ssrc);
nbo_w32(ptr + 8, newssrcr /*>> 32*/);
return 12;
}
注:newssrcr 这个是从对方sdp的ssrc里面获取 如下:
a=ssrc:3406697873 cname:janus
a=ssrc:3406697873 msid:janus janusv0
a=ssrc:3406697873 mslabel:janus
a=ssrc:3406697873 label:janusv0
a=ssrc:2258376012 cname:janus
a=ssrc:2258376012 msid:janus janusv0
a=ssrc:2258376012 mslabel:janus
a=ssrc:2258376012 label:janusv0
参考
- [1] webrtc
- [2] RFC4585
作者:Aliveyun
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。