在 Go 中实现单 CPU 核心 8.8 Gbps 视频流量处理
Microsoft
Habr 上的一位开发者描述了用 Go 构建自定义 RTSP 到 HLS 流引擎 Ruseon Core 以应对惊群问题。该引擎使用带 sync.Pool 的零拷贝环形缓冲区来避免分配,在单核上实现 8.8 Gbps 吞吐量,内存和 CPU 占用极低,不像 FFmpeg 或 MediaMTX。
在一个共享链接导致服务器过载和内存溢出后,作者决定用Go语言构建一个自定义流媒体引擎,而不是租用更强大的硬件。这个引擎名为Ruseon Core,它接收RTSP流并输出HLS,不进行转码,只中继字节。关键特性是一个使用sync.Pool的零拷贝环形缓冲区:帧被写入一次到池中的缓冲区,并与所有订阅者共享,从而消除了内存分配和GC压力。基准测试显示13.9纳秒/操作和0字节/操作。在Ryzen 5600x上使用k6进行负载测试(1000个用户)达到了8.8 Gbps(70秒内传输81GB),实现了6万次成功的HTTP响应,没有失败。订阅者保护使用非阻塞通道发送,对慢客户端丢弃帧,并使用NeedsIFrame标志在下一个关键帧上重新同步。在内存中保留5个HLS段的滑动窗口;过期的段返回404,导致hls.js等播放器跳转到实时边缘。该系统为100个流使用250 MB内存,但操作系统套接字缓冲区增加了开销。作者提醒sync.Pool的陷阱,并建议对于非转码工作负载,避免使用FFmpeg,并通过零拷贝控制内存是有益的。
来源: Habr — хаб ИИ —
原文
