繁体   English   中英

Media Foundation H264 硬件编码器中的锯齿/质量问题,尤其是文本(文本上的锯齿和模糊)

[英]Aliasing/Quality issues in Media Foundation H264 hardware encoder, especially for text(aliasing and blur on text)

我一直在使用硬件加速的 h.264 编码、解码流式传输实时视频,并且我已经能够使用 Windows Media Foundation 使其工作。

我使用 d3d11 视频处理器将帧从 RGB 压缩为 NV12 格式,并使用硬件 MFT 编码为 h.264。

我现在唯一的问题是,在解码和渲染视频后,屏幕上会出现锯齿和光晕效果以及文本。

下面的图片显示了我的问题。

编码前的帧

原始图像

编解码后的帧

解码图像

经过一番研究,我遇到了H.264/AVC 444 ,微软通过在 RDP 10 中引入全屏 AVC 444 模式解决了这个问题。

在 AVC 444 模式下,通过显着提高帧吞吐量,我们可以使用 4:2:0 硬件编码器/解码器获得 4:4:4 质量的文本。

介绍 AVC 444 模式 在远程桌面场景中使用 AVC/H.264 作为唯一的编解码器的主要挑战是文本显示了 AVC/H.264 的典型实现的光环效应。 这是由作为压缩的一部分发生的颜色转换过程引起的,该过程会丢弃一些色度信息,如 4:2:0 格式所示。 对人眼来说,视频内容缺乏色度信息并不那么明显,但是对于主要使用文本的远程桌面场景,这是显而易见的,用户会认为这是模糊的。 AVC/H.264 标准定义了使用 4:4:4 格式的能力,该格式在转换期间不会丢失色度,但是通常这不是大多数 AVC/H.264 硬件编码器和解码器实现的一部分,因此提供一个挑战。 要显示 4:4:4 和 4:2:0 之间的差异,请参见下图,它显示了很容易注意到的差异:

AVC 444

我试图在 Media Foundation 中实现相同的目标,但找不到任何资源来破解它。

我发现颜色转换为 NV12 是这个问题背后的原因,我一直在尝试解决它,我也尝试过 YUV 444,但找不到支持它的硬件 MFT。 我无法使用硬件 MFT 对除 NV12 之外的任何其他颜色格式进行编码

有没有办法克服这个问题?任何帮助将不胜感激。

  1. 您可以使用屏幕捕获优化编解码器: https://docs.microsoft.com/en-us/windows/win32/medfound/usingthewindowsmediavideo9screencodec

  2. NVIDIA 在多种显卡上支持 4:4:4 硬件辅助: https://developer.nvidia.com/video-encode-decode-gpu-support-matrix

  3. 将屏幕从 1920x1080 缩放到 3840x2160 转换为 NV12 (4:2:0) 压缩为 H.264,然后在接收器上执行相反的操作。 放大和随后的 4:2:0 转换应保留全彩色分辨率。 这听起来很浪费,但如果它是在硬件上完成的,它应该可以工作。

这不是答案,而是对正在研究 AVC444 的人的观察。

我正在使用 AVC444(硬件)(通过查看 Windows 事件日志来确认这一点),虽然它对于正常的 RDP 目的非常好,但文本不如原始文本(或正常的 RDP 编码器)清晰。 当我打开 AVC444 时,我立即注意到高对比度文本中的颜色混叠。

这是原始版本和 AVC444 编码版本之间的比较。 AVC444比较

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM