初探vp9中的svc

原文文档: webrtcH4cKs: Chrome's webrtc vp9 svc layer

很明显的分层特征

svc编码的层可以删除其中不被选中的层, 且不破坏其他流的可读性.

  • 单一流中可以被拆分出多种码流大小的流, 有利于sfu做带宽范围可选的码流分发.

  • 优点: 适应更多的下行网络场景, 大大减轻sfu的压力和复杂度, 对比simulcast分层技术, 不需要额外的上行冗余和cpu消耗.

  • 缺点: 对编码器增加多余的消耗

svc分类:

  1. Temporal 时域分层- 帧率拆分

  2. Spatial 空域分层- 分辨率拆分

  3. Quality 质量分层- 编码质量拆分

VP9 svc技术的特点:

  1. 空域分层技术可以不降分辨率从而降质量, 对于vp9来说, svc可以把空域分层和质量分层统一说明为空域分层

  2. 可以同时进行时域分层和空域分层编码(如果不能动态控制空域层的占比, 码率冗余会变得非常大) TODO: 理想的分层编码, 最大质量是可以利用所有层的, 不像simulcast技术, 分辨率拆分后不能相互叠加质量

image
  1. 参考方式
    image

待需要解决的问题:

  1. 决定合适数量的s(分辨率)数量和t(时域层数)数量, 或者提供api去进行配置

  2. 提供一个方式去开启或者关闭svc, 当一对一的时候, 就不需要开启svc了

  3. 去噪??

  4. cpu使用会很高, 可以添加接口获取cpu使用量, 然后按照cpu使用动态调节输出的编码质量. 或者降低分辨率

测试结果:

从结果看来, 码控并不很稳定....波动还是比较大的...

image

总结:

整体来说, 这篇文章介绍了vp9里面svc的相关实现和原理, 及测试结果, 从结果来看效果是非常好的, 直接就一路流做到了之前两路simulcast + svc才能做到的事情, 很棒, 很有借鉴价值.

缺少些什么:

  1. 文中的二维svc和simulcast的对比

  2. 二维svc对比一维svc增加了多少性能消耗

  3. 编码出来的图像质量对比啊之类的

  4. 是否可以替代传统的simulcast, 以及还差哪些

  5. 超级帧的大小比传统的关键帧大了多少啊之类的

  6. gop间隔可以设置到多少啊之类的

  7. 是否支持码率控制,以及控制的类型啊之类的, 比如 cbr, abr, crf之类的码控方式

你可能感兴趣的:(初探vp9中的svc)