慢下来才能更快
– Marshall Liu

【置顶】2026
记录跟踪2026年要做的事情和正在做的事情。 目标 健康生活 体重减到60kg 探索可能 英语能力,熟练3篇演讲短文 独立开发,目标完成4个独立项目 –> 进度2/4 公众号输出,目标输出文章10篇 –> 进度12/10 ...

读《褚时健传》:不闲着,把每一天过实
读完褚时健的起落,最触动我的不是“逆袭”,而是他到晚年仍愿意在慢事情上认真投入。家庭的缺憾、企业的盈利,以及对可控之事的专注,也让我重新想了想什么叫不虚度。
WebRTC 多路音频混音:从接收流到求和与限幅
两个人同时说话,扬声器最终只能收到一路播放数据。最直观的做法是把两个波形逐样本相加;问题是相加后的峰值可能超过 16 位 PCM 的表示范围。直接截断会失真,简单地除以人数又可能让只说话的那个人变小声。 WebRTC 的默认选择是:接收端逐路取出 10 ms 音频,统一格式后用浮点数求和,再用 Limiter 控制合成音频的峰值。 本文以本地源码提交 c8bca1867e(2026-10-22)为基线,先看播放链路,再比较三种混音方法。 ...
WebRTC 音频丢包恢复:NetEQ、Opus FEC、NACK 与 PLC 如何协作
视频丢一帧,画面可能短暂卡住;语音丢掉一个承载 20 ms 音频的包,则可能吞掉一个关键的辅音片段。接收端还必须按时向扬声器交付 PCM:原包即使最终到了,错过播放时刻也无法补回已经听到的声音。 所以讨论音频丢包恢复,先要问:缺失的音频在播放截止时间前,究竟还有没有机会拿到? 有机会,就争取拿到编码数据;没有机会,就生成一段连续的替代声音。本文以本地 WebRTC 源码提交 c8bca1867efcbc5f52adf58ad4463088ed257aa0(2026-10-22)为基线,说明这些选择如何落到 WebRTC 的音频链路中。 ...

WebRTC 音频设备管理:从双向数据流到跨平台实现
麦克风把声音变成 PCM,扬声器把 PCM 变回声音。对一个实时通话系统来说,这两句话之间还有很多事情:选择设备、协商格式、启动音频流、适应设备回调的节奏,以及在耳机拔出、来电中断后恢复工作。 WebRTC 把这些工作集中在 Audio Device Module,简称 ADM。理解它,最好先建立整体位置,再沿着音频数据走一遍,最后进入代码和平台实现。否则很容易把“设备缓冲”“网络抖动缓冲”和“回声消除”混成一件事。 本文以本地 webrtc_src 的提交 3dec7d05377fb690e84f503db865edde982ab2a5 为源码基线,提交日期为 2026-10-23。正文主要讨论使用内置设备模块的 native 音频路径;浏览器或业务方可以注入自己的 ADM,复用这里的接口而采用不同的数据通路。文中的源码链接固定到该提交,代码片段会标明是否经过简化。 ...