这是一堂解剖课。解剖对象是一台在武汉某场行业论坛上"当场趴窝"的导播机,死因写在验尸报告的第一行:直播包装图层堆得太狠。
事情发生在七月九日下午两点四十七分。当时台上正在颁奖,导播切PGM的瞬间画面卡了大概0.8秒,紧接着输出帧率从50跌到31,肉眼可见的顿挫。备机顶上之后我们把主机拉到后台,一层一层剥开看,最后定位到的原因跟大多数人的猜测都不一样。
先说结论:拖慢导播机的不是图层数量,是图层的合成方式。
第一刀:Alpha通道到底贵在哪
导播机做画面合成,本质是把每一层按透明度混合。没有Alpha的图层是直接覆盖,一次内存拷贝就完事;带Alpha的图层要逐像素做混合运算。
我们在自家机房里搭了同样的环境做对照测试,1080p50输出,逐层往上加:
| 图层配置 | GPU占用 | 输出帧率 | 备注 |
|---|---|---|---|
| 纯净输出,无包装 | 18% | 50.0 | 基准 |
| +1层静态台标(带Alpha) | 24% | 50.0 | 可忽略 |
| +1层下方字幕条(带Alpha动画) | 41% | 50.0 | 开始吃力 |
| +1层四角计时器(带Alpha) | 53% | 49.7 | 出现零星丢帧 |
| +1层全屏粒子背景(带Alpha) | 88% | 38.2 | 明显掉帧 |
| +1层实时数据榜(带Alpha刷新) | 100% | 29.4 | 崩溃边缘 |
看出规律了吗?前三层加起来才41%,加到第五层直接翻倍。原因是全屏粒子那一层覆盖了整个画面区域,它的Alpha混合运算量是台标的九十多倍——台标只占画面0.8%的面积,粒子占100%。
直播包装图层的开销跟数量关系不大,跟"带Alpha的像素总面积"强相关。 这是解剖课的第一个知识点。武汉那台机器上,包装师傅为了好看加了一层半透明的渐变蒙版铺满全屏,就这一层,吃掉了三分之一的算力。
摄行科技现在做包装评审,第一件事就是问设计:"这层需要铺满吗?"能裁到局部的,一律裁。
第二刀:分辨率错配的隐形税
第二个发现更隐蔽。客户提供的包装素材是4096×2160的PNG序列,而输出是1920×1080。
导播机每一帧都要把4K素材缩放到1080,这个缩放不是免费的。实测同一个字幕条动画,用4K素材是41%占用,换成1920×1080精确匹配的素材,掉到26%。白白多花了15个百分点,只因为素材没做适配。
更糟的是有些团队用矢量渲染实时生成,那开销比位图还大。我们的标准是:除非内容每帧都在变,否则一律预渲染成与输出分辨率完全一致的位图序列或者带Alpha的视频文件(比如ProRes 4444或者Hap Alpha)。
这条规矩是从一次事故里学的。当时用的是实时渲染的3D台标,转起来好看,代价是CPU单核跑到97%,整台机器的调度全乱了。
第三刀:刷新频率不需要那么高
实时数据榜那一层,包装做的是每帧刷新,也就是每秒50次。
问题是,观看直播的人根本分辨不出50次和2次刷新的区别——数据本身几秒才变一个数。我们把刷新降到每秒2次,GPU占用从满载掉到了61%,画面观感零区别。
同理还有计时器。秒表类元素每秒刷新1次就够,做成每帧刷新纯粹是浪费。这属于典型的"技术上能做,业务上不需要"。
导播台的键控功能怎么配合包装用,我在导播切换台的键控功能实战那篇里写过完整设置流程,键控通道和包装图层其实是两套资源,用好了能把负载分摊开。
第四刀:谁在跟你抢资源
解剖到最后一层,我们发现这台机器同时还在跑:本地录制两路、推流三个平台、外接一台监看输出、外加一个实时字幕引擎。
实时字幕这一路我们之前专门写过,直播画面里的字幕条谁在实时打里讲了它的算力来源。当天字幕引擎跟包装抢的是同一块显卡,谁也不让谁。
直播包装图层的性能问题,很多时候根本不是包装的问题,是整机资源规划的问题。 摄行科技现在的做法是把包装、录制、推流做物理隔离:包装和切换在主机,编码推流用独立的编码器,录制走单独的录机。三条路各走各的,互不干扰,成本增加大概两万出头,但主机的可用余量从不到10%回到了45%以上。
改造后的实测
武汉那场结束后,我们花了三天给客户的包装做重构:
- 全屏渐变蒙版改成上下两条局部渐变,覆盖面积从100%降到22%
- 所有素材重新导出为1920×1080,与输出严格一致
- 粒子背景改为预渲染的Hap Alpha循环视频,不再实时生成
- 数据榜刷新频率从50Hz降到2Hz
- 编码推流迁移到独立编码器
改完之后同样的包装内容,GPU占用从100%降到52%,输出帧率稳定49.98到50.02,连续跑六小时没有一次丢帧。视觉效果客户方看了三遍,说"没觉得有什么不一样"。
云导播这两年也在做类似的取舍,云端渲染和本地渲染各有边界,云导播台和硬件切换台差在哪里我们做过成本和性能的双向对照。
一份可以照着做的检查清单
给包装设计师和技术团队共用的:
- 每一层的Alpha覆盖面积占画面百分之多少,超过40%的必须给理由
- 素材分辨率是否与输出严格一致,不一致的退回重导
- 有没有实时渲染的元素,能预渲染的全部预渲染
- 每层的刷新频率是多少,非必要不超过5Hz
- 主机上除了包装还跑了什么,能挪走的挪走
- 满配包装下连续跑一小时,帧率波动是否小于0.5%
这份直播包装图层检查清单,摄行科技已经贴在导播车的柜门上了,每次装台前对一遍,比出了事再抢救划算得多。
相关的图形合成与色彩规范可以参考W3C公开的合成与混合模式文档,广播级输出的技术指标在国家广播电视总局官网也有对应的规范文件可查。
客户侧常见的三个误解
做包装性能评审这两年,有三个误解出现频率特别高。
一是"多加几层图层而已,机器这么贵还扛不住?"。设备价格和合成能力不是线性关系,一台二十万的切换台和一台八万的,在纯切换上差别不大,差的是特效通道数量和上游的DVE资源,跟"贵不贵"没有直接关系。
二是"设计做完直接扔给技术就行"。包装的性能账必须在设计阶段就算,等工程文件都导出了再改,返工成本是前期沟通的十倍。摄行科技现在要求包装设计稿评审时技术必须在场,就是为了堵这个口子。
三是"彩排能跑通就没问题"。带直播包装图层的彩排通常不带录制和推流,负载只有正式的六成左右。所以我们的规矩是彩排必须满配跑,录制、推流、监看、字幕引擎全开,跑满二十分钟看帧率曲线,这样才有参考价值。
收尾
直播包装图层做得漂亮是加分项,但它不该以稳定性为代价。观众记不住你那层粒子有多炫,但一定记得住画面卡了。
如果你手上的项目包装比较重,又不确定现有设备扛不扛得住,可以把包装工程文件和设备清单发给摄行科技,我们能免费跑一遍性能评估,出一份改造建议和帧率预测。
#摄行科技