Piasy

NEVER STOP

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 做好准备。 音视频数据转发流程 Licode(OW...

基于 Kotlin multiplatform 的多平台 WebRTC SDK

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

再探 H.264:句法元素详解

两年多前,我发布了我需要知道:H.264 一文,限于篇幅,当时没有对具体的句法元素做任何总结。 原本我想把每一层的各个句法元素简略过一遍的(实际也这么做过),但奈何完全无法涵盖细节,而众多句法元素罗列一遍实在无法脱离堆砌之嫌,所以索性删了个干净。感兴趣的朋友强烈建议阅读原书,或者 H.264 SPEC,至于从事视频编解码相关工作的朋友,则一定要对句法和语义烂熟于胸了。 这次,为了...

OWT Server 快速入门

去年做了一个多平台的(Android/iOS/Windows)基于 WebRTC 的多人音视频通话的项目,客户端基于 WebRTC 最新的客户端代码封装业务逻辑,自己写信令对接 SFU,SFU 最初是对接的 Janus Gateway(所以我才会去给 Janus 提 PR),但 Janus 在中弱网下(ping 4% 丢包 100ms RTT)的表现非常差,一直处于卡死状态。 几经波折,前...

WebRTC Native 源码导读(十五):RTP H.264 封装与解封装

之前我在为 janus-pp-rec 增加视频旋正功能一文中简单介绍了一点 RTP 协议的内容,重点关注的是视频方向的 RTP header extension,这次我们更深入的了解一下 RTP 协议的内容,看看 H.264 视频数据是如何封装和解封装的。 其他视频编码格式的封装和解封装大体思路应该是一样的,大家可以举一反三;音频数据的封装和解封装,日后可能我会再整理一篇文章。 注:本文...

2018:颓废、救赎、落地、成家

我的 2018,大致可以划分为四个阶段,提炼为四个关键词:颓废、救赎、落地、成家。 颓废 说来实在惭愧,2018 年荒废了整整五个月,起因竟是农历新年期间充值了一个月的腾讯影视超级会员……当然这只是个玩笑,主要还是自己松了一口气,结果斗志一泻千里。 首先是年初回顾过去的生产力起伏现象,得出了一个现在我依然无法判断对错的结论: 永劳不逸不是长久之计,总会发生虚度光阴,对心理的负面...

WebRTC Native 源码导读(十四):API 概览

第一次看到 WebRTC 这个词是 15 年在一期 Android Weekly 中,但当时完全看不懂它在讲什么,也就没有深究。两年后,我开始搞起 WebRTC,并整理出了一套开箱即用的 WebRTC 开发环境,距今又过了一年多。 按常理,这篇文章要介绍的内容本应最先呈现,但我搞 WebRTC 的路线略微反常,由于没有实际使用的需求,所以我先是研究了不少模块的实现原理。但随着接触到更多内容...

为 janus-pp-rec 增加视频旋正功能

Janus Gateway 支持 server 端录制,保存的文件格式是对 RTP 报文的一种自定义封装格式(MJR),音视频数据单独存储,官方提供了一个 janus-pp-rec 的程序,可以把 MJR 格式的文件转换为其他封装格式的文件,然后我们可以利用 ffmpeg 把音视频文件合并为一个文件,命令如下(以 H.264 和 OPUS 编码为例): janus-pp-rec video...