美文网首页
WebRTC之视频NackModule

WebRTC之视频NackModule

作者: stoneliuxs | 来源:发表于2019-02-20 20:07 被阅读0次

NackModule

一个包的最大请求次数是kMaxNackRetries(10)次,最大请求时间是10*rtt,在这个时间内还没有获取到丢失的包则不再请求
对外提供的接口如下,源码

const int kDefaultRttMs = 100;
const int kMaxNackRetries = 10;
const int kProcessFrequency = 50;
const int kProcessIntervalMs = 1000 / kProcessFrequency;
int OnReceivedPacket(const VCMPacket& packet);
void ClearUpTo(uint16_t seq_num);
void UpdateRtt(int64_t rtt_ms);
void Clear();
int64_t TimeUntilNextProcess() override;
void Process() override;
  • OnReceivedPacket
    数据走向:RtpReceiverImpl::IncomingRtpPacket -> RTPReceiverVideo::ParseRtpPacket -> RtpVideoStreamReceiver::OnReceivedPayloadData -> NackModule::OnReceivedPacket
    • IncomingRtpPacket
      数据从网卡过来,经过上一层的分发(每个ssrc会对应一个RtpReceiver实例),这里会根据payloadType得到对应的视频编解码类型
    • ParseRtpPacket
      根据视频编解码类型调用对应的RtpDepacketizer解析此包,得到帧类型(FrameType)和帧信息(RTPTypeHeader -> RTPVideoHeader)等信息
    • OnReceivedPayloadData
      添加ntp时间直接交付给nack模块
  1. 所以到了nack模块是可以知道此包是否是关键帧的包,是否是一帧的第一个包,包序号等信息。
  2. 例如收到1 2 3 6 7 4 5等包,那么在收到序号为6的包的时候就认为4和5这两个包丢失了,具体可以阅读AddPacketsToNack这个函数,然后把4和5两个包加入到nack列表中(nack_list_),当收到5这个包的时候从nack列表中移除
  3. 调用GetNackBatch(kSeqNumOnly)找到缺失的包序号,kSeqNumOnly选项触发第一次nack请求,所以nack请求是非常及时的
  • ClearUpTo
    此函数最终是由帧缓触发的FrameBuffer::InsertFrame,帧缓冲只保留kMaxFramesBuffered帧,并且当帧是乱序的时候也不要此帧。清除到此序号的nack列表和关键帧列表

  • UpdateRtt
    更新rtt时间,rtt是根据sr包的信息计算得到的,第一个包的nack触发以后,后面的9次触发都是依据rtt时间而定的。也就是说nack请求的间隔是nack1 rtt nack2 rtt nack3 ...

  • Clear
    清空nack列表和关键帧列表

  • TimeUntilNextProcess
    获取下一次执行Processc的时间,每隔kProcessIntervalMs(20ms)检查一次

  • Process
    依据rtt找到当前需要发送的nack序号,并递增nack的重试次数(retries),当超过最大重试次数时,不再请求此序号

相关文章

  • WebRTC之视频NackModule

    NackModule 一个包的最大请求次数是kMaxNackRetries(10)次,最大请求时间是10*rtt,...

  • webrtc

    使用WebRTC搭建前端视频聊天室——入门篇使用WebRTC搭建前端视频聊天室——信令篇Android之WebRTC介绍

  • webrtc源码分析之视频编码之三

    在webrtc源码分析之视频编码之一和webrtc源码分析之视频编码之二分别分析了视频编码模块的初始化流程和编码流...

  • iOS下 WebRTC 视频渲染

    iOS下 WebRTC 视频渲染 iOS下 WebRTC 视频渲染

  • WebRTC知识整理

    WebRTC WebRTC实现了跨平台的音视频通话 WebRTC的架构 WebRTC的底层代码是C++实现的 并通...

  • webrtc之Android视频质量提升:保帧率降分辨率

    前言: 上篇文章《webrtc之Android视频质量提升:保帧率降码率》](https://www.jiansh...

  • 编解码

    WebRTC Native开发实战之视频编码[https://www.cnblogs.com/xl2432/p/1...

  • iOS 音视频通话及会议2

    iOS webRTC + webSocket 实现音视频会议 webRTC在上一篇,已经给大家对webRTC做...

  • WebRTC学习(一)

    WebRTC 什么是WebRTC音视频处理+即时通讯的开源库 WebRTC能干什么音视频实时互动游戏、即时通讯、文...

  • webrtc之封装视频源

    webrtc视频设备采集,需要先创建VideoCapturer 然后设置采集的限制: 然后使用PeerConnec...

网友评论

      本文标题:WebRTC之视频NackModule

      本文链接:https://www.haomeiwen.com/subject/phdkyqtx.html