当前位置: 首页 > news >正文

长参考帧LTR

一、LTR是什么

在 RTC 场景下一般的编码参考策略是向前一帧参考(在不考虑 temporal svc 的情况下),因为一般情况下参考距离越近,相似性越好,则压缩效果越好,出于实时的考虑编码只有 I 帧和 P 帧,没有 B 帧。在有 P 帧丢失的场景下,接收端需要重新请求 I 帧才能继续正确的解码和播放。

如果发生弱网导致中间的某个 P 帧(✖️ 标记)丢失,无法恢复,则接收端会请求发送端重新编码 I 帧。

长期参考帧是一种可跨帧的参考帧选择策略,这种策略打破了传统的向前一帧的限制,可以更加灵活地选择参考帧。长期参考帧策略的目的是在有 P 帧丢失的场景下,接收端不需要重新请求 I 帧也能继续正确的解码和播放,其相对于 I 帧可以明显提升编码效率,节省带宽。该技术可以绕过丢失的帧,利用丢失帧之前的一个已经接收的长期参考帧作为参考进行编码 / 解码显示,从而提升弱网场景下的视频流畅性。

上图所示是引入 LTR 技术后的丢帧恢复策略,未发生弱网时仍然是正常的 I P P P 帧编码,只是会将其中的某些 P 帧标记为 LTR 帧(如图中的绿色 P 帧,以下称为 LTR 标记帧)。如果发生弱网中间的某个 P 帧(✖️ 标记)丢失,无法恢复,则接收端会请求发送端(编码器)利用 LTR 恢复,此时编码器会利用之前的已经确认收到的 LTR 标记帧做为参考编出一个 P 帧(图中红色 P 帧,以下被称为 LTR 恢复帧)。

由于之前的 LTR 标记帧已经被解码器确认收到,所以解码器参考帧 buffer 中必然存有此帧,所以利用此帧做参考的红色 P 帧必然可以被解码器正确解码。LTR 恢复帧由于是有参考的 P 帧,所以比 I 帧的编码效率显著提升。

根据上述 LTR 技术的特点和目的,可见 LTR 技术是一种网络模块和编码器共同配合完成的参考帧选择技术。实现 LTR 技术需要有接收端侧反馈信息,即编码器发出的 LTR 标记帧(图中的绿色 P 帧),如果被解码器成功收到,需要解码器通知编码器其收到了这一帧,这样编码器在收到 LTR 恢复请求的时候,才可以 “放心的” 使用此帧做参考。

二、LTR的应用

2.1 节省带宽、提高画质

与关键帧相比,LTR-P 尺寸更小,但质量更高。LTR-P 可以比关键帧小 40% 到 50%,但它提供与 P 帧相似的视频质量(如果离 LTR 不是很远)。下图说明了关键帧和 P 帧之间的潜在差异:

Figure 3: Key frame on the left. LTR-P on the right.

鉴于质量差异,LTR-P 可以成为改善损失恢复的基础。不再需要对每个丢失的数据包进行重传;现在接收器可以根据最后可解码的 LTR 帧请求 LTR-P。在高损耗网络中,这比重传要高效得多。

再者,在一个稳定的视频场景中,高质量的参考帧可以提高后续帧的图像质量。在解码内容相似帧时,可以使参考帧保持更长时间,这样避免在场景稳定的情况下传输另一个参考帧,从而节省传输带宽。 根据视频内容来动态的使用LTR功能,这叫做自适应性LTP。当检测到静态场景时采用LTP, 动态场景关闭LTP。

在视频监控的场景中,稳定的视频占多数,使用LTP会很好的提高视频质量。编码误差不容易扩散。

2.2 RTC场景下抗弱网

总的来说,利用LTR可以避免在弱网环境下频繁的进行I帧请求,降低卡顿率,以及减少对其他下行的影响,感兴趣的读者可以阅读字节和阿里在RTC场景下应用LTR的心得和分享。 developer.volcengine.com/articles/72…

mp.weixin.qq.com/s?__biz=MjM…

mp.weixin.qq.com/s?__biz=MjM…

三、参考

www.cnblogs.com/VideoCloudT…

cloud.tencent.com/developer/a…

zhuanlan.zhihu.com/p/103542912

http://www.xdnf.cn/news/874459.html

相关文章:

  • 前端八股之JS的原型链
  • 20-项目部署(Docker)
  • 【人工智能】大模型的创造力:从训练到应用的灵感火花
  • 如何配置deepseek + ida-pro-mcp
  • 让AI看见世界:MCP协议与服务器的工作原理
  • [AI Claude] 软件测试2
  • JS利用原型链实现继承
  • Spring 中的disposableBean介绍
  • C语言数据结构笔记2:结构体地址的遍历_结构体嵌套
  • Java DLL依赖缺失解决思路和修复过程(Windows版本)
  • JVM 内存结构 详解
  • 【Java】CopyOnWriteArrayList
  • 使用 SseEmitter 实现 Spring Boot 后端的流式传输和前端的数据接收
  • 陈伟霆电视剧《九门》开机 续写传奇热血新篇
  • 【博客X】缤果串口蓝牙网络USB调试助手(总汇)
  • python打卡day44
  • 如何通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式(并进行了训练、推理)
  • SQL 中 IN 和 EXISTS 的区别
  • 局部变量-线程安全
  • 池化层-机器学习
  • 5.Promise,async,await概念(1)
  • 【SpringCloud】Nacos配置中心
  • 【HarmonyOS 5】游戏开发教程
  • 面向文档编程:MoonBit 的创新开发体验
  • 照片按时间自动重命名工具
  • Java异常信息
  • PaddleOCR(1):PaddleOCR介绍
  • 雷达流速仪相关介绍
  • 微信小程序开发一个自定义组件的详细教程
  • Haystack:AI与IoT领域的全能开源框架