Piasy

NEVER STOP

RTP:Audio and video for the Internet 中文版阅读笔记

之前发现连接 OWT Server 4.3.x 时,无法获取到 audio sending 相关的 stats,最终定位到是没有收到 Server 的音频 RTCP RR 报文,为了分析这个问题,我决定梳理一下 OWT Server 的 RTCP 流程,于是便有了 VSCode 远程调试 Docker 里的 OWT Server。不过在扎进代码之前,我决定先系统学习一下 RTP 协议,正好今...

WebRTC 只编译 DataChannel

上周一位朋友在知识星球里提问: 博主你好,我们是做 P2P 流媒体的,简单的说就是用 DataChannel 来传输数据,不需要用到音视频那些功能,但发布的 SDK 却不得不打包整个 WebRTC,太大了而且感觉没必要。请问有没有什么办法把 P2P 连接和 DataChannel 模块单独弄出来呢? 看到这个问题,我第一反应就是我曾在 WebRTC 代码库里看到过相关的 gn 选...

VSCode 远程调试 Docker 里的 OWT Server

不久前在群里听说了 VSCode 远程调试很厉害,但一直没试过,其实我认为,对于服务端程序,靠单步调试分析问题应该不是首选,主要还是得通过日志分析。不过如果是为了熟悉代码流程,那还是很有帮助的。之前我是通过静态看代码,再结合少量加日志,理清了音视频数据的完整转发、合成流程,但这次当我试图梳理 RTCP 流程时,代码看起来始终不得要领,于是想着干脆单步起来吧。直接上 gdb 命令行调试,肯定也...

2020 51 Hackathon

自从 HackWebRTC 书稿交给出版社编辑后,很多事情的推进都显得有些劲头不足,「给 AvConf 增加 Linux 平台支持并对服务器做压测」这件事,基本拖了整个四月,但还是没搞定。所以在 51 假期开始前,我就构思了一个 Hackathon,准备在这个出不了门的 51 一口气搞定一个事情。从待办事项列表中看来看去,最后确定了目标:给 AvConf 写一个日志自动处理工具。 这个事情...

OWT Server 集群部署和扩缩容

一转眼 OWT Server 快速入门已经快一年了,最近终于遇到了单台机器无法支撑用户规模的情况,原本我乐观地认为 OWT 自动扩缩容是一件很简单的事情,但实际上这事一点也不简单。 单台机器性能 扩缩容的第一步就是要测量单台机器的性能,为此我按照实际使用场景进行了测试:一个房间两台设备,纯 SFU 模式,视频推流参数为 1280x720 2.5Mbps。 第一次测试是在 AWS m4....

使用 KITE 进行 WebRTC 自动化测试

这两周在着手 OWT Server 的集群部署,为此必须先进行性能测试,原本我只根据一两个房间时的服务器负载情况推算单台机器能抗住多少房间,但忘篱大神一针见血: 一个房间占 6%,不代表三个房间占 18%,这里有个线性能力的问题,几百个线程的,要是能线性了,那也就真的奇迹再现。 但笔记本打开浏览器 tab 或多台手机测试,很容易就触发设备接入网带宽瓶颈,2.5Mbps 推流,实际...

WebRTC H.264 编码的 Profile 和 Level

今天这篇文章的起因是在整理 iOS 屏幕共享代码时,H.264 编码失败,日志里一直在报错 H264 encode failed with code: -12902,去 OSStatus.com 搜索发现这个错误是 kVTParameterErr,即参数错误。 对参数做了一番检查,以及对比了新老版本代码后发现,可能是分辨率的问题,把视频帧的分辨率变小后果然就没问题了。 原来是我测试时使用...

2019,太难了

2019 最大的遗憾,就是 Hack WebRTC 了,不过虽然延期了,但还在稳步进行中,2020 上半年一定要写完,争取能出版。 其他的,不想多说了,该做的还是得做,至于结果,we will see. 人的一生应该这样度过:当回忆往事时,他不会因为虚度年华而后悔,也不会因为碌碌无为而羞愧。 -《钢铁是怎样炼成的》 为了更好的自己,加油!

OWT Server 进阶(一):音视频数据转发和录制流程

今年上半年开始接触 OWT,当时用起来之后整理了 OWT Server 快速入门,其中初步涉及了音视频数据的转发流程。最近在考虑实现客户端的推收流录制,正好之前也遇见了 OWT 录制的一些问题,所以这次就先对 OWT 的音视频数据转发和录制流程探个究竟,一方面可以作为客户端实现的借鉴,另一方面也可以为向 OWT Server 提交 PR 做好准备。 注:本文分析的代码,是 OWT Serv...

基于 Kotlin multiplatform 的多平台 WebRTC SDK

将近两年前,我发布了移动客户端跨平台开发方案探索,初步探索了 Javascript, Dart, Java, C++ 这四种语言用作多平台开发的框架。这两年的时间里,Java (J2ObjC) 的方案比较好地满足了鼎点 Android/iOS/Windows SDK 的需求,痒点虽然有,但尚能忍受,这里列几个典型的痒点: iOS 如果客户想要静态库,那客户也就得准备 J2ObjC 的...