OTN帧中SM字节中BIP-8位校验,第i一个ppp帧的数据部分是7d5efe277d校验结果为什麽放在第i+2帧,而不是i+1呢,可以具体展开说一说吗?

什么是 HEVC ?简单说就是一种比 H264 压缩效率更高的现代视频编码格式,它支持 8K,支持 HDR,支持广色域,支持最高 16bit 的色彩深度,最高 YUV444 的色彩抽样,总之一句话,是一种用来取代现有 H264 的更高效、现代的视频编码格式,且目前已经被各类硬件广泛支持。

然而因为版权和技术派别等原因,这种格式一直没有被浏览器很好支持,尤其是目前市占率最高的 Chrome,一月初看到了一条 B 站用户吐槽 HEVC 解码性能/发热问题的新闻(感谢 B 站在 HEVC WASM 解码方案上的探索),考虑到这也是困扰业界很久的问题,大量依赖 HEVC 的 Web 项目均被迫产出了各种各样 Workaround 方案,但效果一直都不是最理想的,心想不如帮

本文简述了 Web 解码方案现状,介绍了作者为 Chromium 浏览器实现 & 完善硬解过程中遇到的问题和实现原理,并在文末附加了测试结果,预编译版本供参考,希望可以解决 FrontEnd 苦 HEVC 久矣的问题。

主流设备早已支持且广泛使用

  1. 版本号必须大于等于 Edge 99 。

出现上图所示的字样,则证明硬解开启成功。

  1. 在显卡支持的情况,性能是最好的。

由于 Apple 是 HEVC 标准的主要推动者,因此早在 17 年的 Safari 11 即完成了 HEVC 视频硬解的支持,无需安装任何插件开箱即用。

  1. 在显卡支持的情况,性能是最好的。

  2. 开箱即用,无需装插件。

  3. HDR 支持最好(比如:杜比视界 Profile5,杜比全景声)。

  1. 生态不足,缺乏大量 Chromium 内核下“可用、好用的”插件。

  2. Safari 俗称“下一个 IE”,其浏览器 API 兼容性与实现,相比 Chromium 仍有差距。

  3. 部分 HEVC 视频莫名其妙无法播放,哪怕视频本身没问题。

前端解码-WASM(软解,任何平台)

此类方案绝大部分基于 WASM + FFMPEG 编译实现,支持所有支持 WASM 的浏览器。

  1. 不挑浏览器,是纯前端的技术实现。

  1. 需要依赖所在版本浏览器 WASM 的稳定性。

  2. 不支持硬解,因为软解+性能损耗的缘故,性能有其天花板,4K 以上视频即使使用 5950X 这样的顶级 CPU 也会卡顿掉帧。

因此我们的目标就是正确按照 VideoToolbox 要求的方式,提交 Image Buffer,并等待 VT 将解码后的数据回传。

通过观察可发现,在 macOS 下,某种编码格式是否支持硬解,取决于硬解 Decoder 内的 SupportProfiles 是否包含这种编码格式,其代码如下:

可以看到,SPS_NUT的 Nalu Header 解析后的数据如截图右侧区域显示,感谢 Elecard 开发的这款好用的工具,有了它对我们实现 VPS 解析有很大帮助。

GPU 是否支持硬解检测

// 部分单反拍出的视频如果这里填充错误会导致花屏

处理分辨率,色彩深度的突变

现实中的实际视频,尤其是在 WebRTC 场景产生的视频,可能存在分辨率或者色彩深度突变的情况,因此,在实际实现 Decoder 的过程中,处理这种情况至关重要,如果处理不好,轻则会导致视频花屏、绿屏,重则会导致 D3D11 device context lost,并最终导致 GPU 进程崩溃。

Windows 平台更佳(Mac 会适当扩展高光),两款浏览器这一轮打平。

接着我们将显示器调为 HDR 模式,并开启操作系统的 HDR 输出。

可以看到,如果视频是 mov,一般都会在封装容器会写入色彩空间,此时二者区别不大,都可以较好在 HDR 显示器以 HDR 效果显示 PQ HDR 视频内容,但如果视频是 mp4 封装,则由于 mp4 一般不写入色彩空间到封装容器,Edge 存在 PQ 视频显示异常的问题,这一轮 Chromium 胜。

接着我们测试 macOS,在 macOS 播放 HDR 视频,无需任何设置,因为其支持 EDR 功能,我们选择支持 HDR 的 XDR 显示器 Mac (新款 M1 Pro / Max Macbook Pro)进行测试,正确显示 HDR 视频无需任何设置。(注:如果需要为外置显示器强制启用 HDR,需要使用支持的显示器并在 设置-显示器 面板开启“高动态范围”选项)

在 macOS,如果需要开启 HEVC 硬解功能,一种方式是以命令行的方式打开:

如果不喜欢命令行,也可以通过 Automator 建立启动自动操作的方式打开。

如何验证是否生效?打开chrome://gpu, 如出现下图红圈所示的字样表示成功。

打开活动监视器,搜索 VTDecoderXPCService , 播放视频时,观察到进程 CPU 占用率上涨也可说明硬解成功:

Windows 的 Chrome,在桌面快捷方式传入启动参数即可。

HEVC 硬解功能目前正在实验中,最早可能在 Chrome 105 稳定版发布。

[版权声明] 本站所有资料由用户提供并上传,若内容存在侵权,请联系邮箱。资料中的图片、字体、音乐等需版权方额外授权,请谨慎使用。网站中党政主题相关内容(国旗、国徽、党徽)仅限个人学习分享使用,禁止广告使用和商用。

我要回帖

更多关于 帧格式为1个起始位,8个数据位 的文章

 

随机推荐