【问题标题】:Does vp9 handle packet loss or I have to handle manually?vp9 处理丢包还是我必须手动处理?
【发布时间】:2022-09-29 15:33:25
【问题描述】:
我是捕获我的屏幕在即时的和编码他们使用VP9编解码器(使用 JNI)。编码帧是 I 帧或 P 帧。然后我划分他们进入块(子帧)并将它们发送到网络。但是在接收端有一些自然的数据包丢失甚至一个单身小姐的子帧导致无法重建相应的 I/P - 帧。我试图在本地模拟(随机丢弃一些子帧)同样的事情,同样的事情发生了。不VP9编解码器有一些内置包损失处理?如果是这样,如何启用它们以及它如何在一定百分比上表现良好?
如果没有内置的丢包处理我必须手动实施 FIR 或 FEC?在哪里跟随?
提前致谢。
标签:
webrtc
video-streaming
screensharing
packet-loss
vp9
【解决方案1】:
发送视频流的常用方法是基于 UDP 的 RTP 协议,在其他库中,WebRTC 也使用这种传输方式。发送前的每个编码帧都被打包,即拆分为一个或多个 RTP 数据包。在此上下文中,术语“数据包丢失”是指 RTP 数据包丢失。这些丢失由发送方对等方使用来自其他对等方的 RTCP 接收器报告来处理:发送方可以重新传输丢失的数据包。因此,这种重建与 VP9 或任何其他特定编解码器无关。
【解决方案2】:
由于 vp9 是熵编码,即使单个数据包丢失也会导致无法重建 I/P 帧。即使无法重建 I 帧,也会导致无法构建所有后续和相关的 P 帧。当我使用原始 vp9 时,我必须实现任何类型的重传或冗余。
有一个 error_resilient 数据包或黄金帧的概念,可以称为 I 帧的预算版本,我需要以一定的间隔从发送者发送,以便 I 帧和后续 P
帧将具有一定的弹性(我尝试过并通过启用参数从编码器生成黄金帧失败,也许我必须自己生成它)。