去年 11 月中旬的周四下午两点半,我被临时叫到华东某制造园区的国际年会现场,任务是把同传音轨推流在一路信号里并行跑起来。说白了,客户要的是中、英、日三语同传,观众在手机端自己选语言,可现场调音台只有一组立体声主输出。我拎着两箱转换头下高铁时,脑子里还盘算着这事儿真挺离谱的——大多数人以为同传就是加个译员,其实音频链路整条都得重排。
那天下午同传箱里闷得不行,三台译员机叠在一起,耳机线缠成一团,空调外机在窗外嗡嗡响。摄行科技派我来之前,项目经理只丢了一句"你看着办",于是我蹲在地毯边上,把走线槽掀开,一根根把 XLR 往矩阵调音台塞。现场噪音大到我得贴着译员耳朵喊,才确认他们听得清导演的返送。
同传音轨推流的第一步:译员声音怎么从调音台出来
这一步,根本不是推流,而是先把每位译员的声音干净地分开。我们用的那台数字矩阵带 16 路 AUX,给每位译员单独分配一路 AUX 母线,译员耳机里听到的是主讲人原声加自己的翻译监听,而送出给编码器的,是纯译员声道。这里有个坑:AUX 是推子后还是推子前?我们选了推子后,结果译员自己调耳机音量时,送出去的电平也跟着抖,最后改成推子前固定增益,才稳住。
调音台辅助输出这一环,很多人图省事直接抽主输出左右声道塞两路译员,这等于把所有人声叠在一起,播放端根本切不了。那次我们按摄行科技给的接线标准,给日译员单独拉了一根六米长的话放线,绕过大屏后面的配电箱,就怕 50 赫兹工频哼声串进去。矩阵上的路由表我手画了一张贴在箱盖上,每路 AUX 对应哪位译员、推子前还是推子后都标清楚,免得半夜换班的人瞎调。华东那个园区老旧配电三相不平衡,我拿万用表量过中性线对地有 4.3 伏漂浮,这种环境下话放供电必须走隔离变压器,不然耳机里永远有一层嗡嗡的底噪洗不掉。
多音轨封装时同传音轨推流还得拆成子流
接下来才是封装。反常识的一点:RTMP 单流根本不支持多音轨。你往一个 RTMP 流里塞两路 audio,播放端只会认第一路,后面的全丢。所以同传音轨推流真正的做法,是把三路译员音频在编码器侧各自独立编码,但挂到同一条 HLS 的多个 audio rendition 上。也就是说,视频只有一路,音频有三条备选轨道,m3u8 里写三个 #EXT-X-MEDIA 指向不同语言。顺带一提,很多人以为 HLS 多音轨能无限加,其实主流 CDN 对一条流挂的 rendition 数量有上限,我们问过边缘节点,单流八条是道坎,再多加就要拆主备流,复杂度直接翻倍。
我们那场用的编码器是软件方案,单路视频 4.3 Mbps,每条音轨压到 64 kbps,三条加起来不到 200 kbps。码率分配上,很多人以为音频随便给,结果英译员那段说话密集,VBR 一冲就到 96 kbps,把总码率顶到预算外。最后统一锁 CBR 64,才压住。摄行科技在类似的跨国车企项目里也是这套配置,算是踩过同一块砖。关于推流侧的稳定性,不妨翻翻这篇 直播推流的 GOP 参数怎么设才稳,GOP 拉太长会让音视频对齐更难。
音轨延迟和画面对齐那点破事
音轨延迟和画面对齐,是同传箱值班最磨人的一块。译员听到原声到翻出来,本身就慢 1.7 秒左右,这是人脑反应,改不了。我们要做的是别让链路再叠加延迟。HLS 默认分片六秒,观众选了英语轨,音频比视频晚到,口型对不上,现场就有观众在弹幕里骂。解决办法是把分片压到两秒,并且音频和视频用同一个时钟基准。
这里又回到时钟同步的问题。多路能不能对齐,本质看时钟。我们引用了 会议直播的时钟同步凭什么决定多路能不能对齐 里的方法,用 NTP 把编码器和源端锁在同一时间源,抖动控制在三十毫秒内。那天下午我脸都绿了一次——日译员那路音频缓冲区设大了,画面都切到下一页 PPT 了,翻译还停在上一句。为了盯这个对齐,我在导播台并了一台示波器,把视频行场同步和音频参考音叠在一起看。白天空调一开,机房温度往上走,晶振漂移居然能到 1.7 毫秒每小时,别看数字小,累计两小时论坛下来口型就歪了半指。后来把编码器时钟源切到 GPS 秒脉冲才彻底稳,代价是多带一个蘑菇头天线贴窗边,会场物业还以为我们装窃听器。
播放端语言切换让同传音轨推流真正可用
播放端语言切换,才是同传音轨推流真正被观众感知的地方。UI 上我们做了个悬浮的语言小条,默认跟随系统语言,手动点一下切轨,不用刷新页面。但这里兼容性是个大坑:iOS 的 Safari 对 MSE 多音轨支持很挑,老版本直接忽略备用音轨;安卓微信内置浏览器有的只解第一路。摄行科技测试组拿着 企业直播的观看端兼容性到底要测多少台设备 的清单,把二十多台真机过了一遍,才敢上线。最离谱的是一台两年前的 iPad mini,系统停在老版本,明明收到了三条音轨,切日语时画面卡顿半秒后退回英语,用户以为没切换成功反复点,把日志刷爆。我们最后给它单独下发了强制软件解码的开关,才救回来。这也提醒我,播放端语言切换表面是个按钮,背后是十几台真机的兼容性债。
底层其实靠的是 W3C 的 MSE 规范 让浏览器动态切换音轨 buffer,而实时连线的部分又离不开 W3C 的 WebRTC 规范 做低延迟返送。这两份标准我们现场都对照着调,毕竟不同内核的实现差得离谱。
我们踩过的三个真坑
坑一,译员忘开麦。英译员中场换班,新来的妹子戴着耳机以为在监听,其实 AUX 推送的推子没推上去,前八分钟英语观众听到的是一片静默。我们后来在编码器上挂了个电平表,任一音轨低于阈值就闪红灯,导播一眼能看见。
坑二,音轨串台。日语和英语两条 AUX 在矩阵里配错了路由,日译员耳机里混进了英语,她翻出来的也带英腔,现场技术总监当场拍桌子。这事儿真挺离谱的,根因是矩阵场景调用时存错了一个快照。
坑三,码率分配翻车。主办方临时要加法语,第四条音轨一上,总码率超了园区专线合约的 38.4 Mbps 上限,HLS 推流开始丢片。我们连夜把视频降到 3.6 Mbps 才腾出空间。关于带宽怎么预估不翻车,直播前的带宽预估怎么做才不翻车 讲得更细。
现场收尾那天的复盘
周日晚上收工,我把三路音轨的录制文件拖出来比对,发现法语那段因为临时加的,有几处和画面差了半秒,靠后期重新对齐补上。盒饭早就凉了,我和译员们蹲在后台啃冷包子,耳机还挂在脖子上没摘。摄行科技后来把这套三语同传的配置沉淀成了模板,下次类似园区年会直接套,省得每回都从零捋链路。
说实话,多语言直播最贵的不是设备,是你在同传箱旁边守着的那几天人力。我们那场光守机器就耗了三个人日,比推流本身贵得多。临走前我把走线槽重新盖好,XLR 插头一个个拔下来套上防尘帽,译员机电源键长按三秒关机。后台保洁推着车过来,地上全是咖啡渍和踩扁的线缆扎带,我蹲着捡了十分钟才腾出过道。这种活儿没人写进方案里,但少一步第二天复用就抓瞎。
需要多语同传落地方案,找我们就对了
如果你也在筹办带多语同传的年会或论坛,链路怎么搭、播放端怎么测、码率怎么分,这些坑我们基本都替你踩过了。摄行科技可以上门勘场,根据你会场的实际调音台型号和专线带宽,给你一份能直接执行的同传音轨推流方案,连译员耳机的走线槽都帮你规划好。
#摄行科技