
webrtc
文章平均质量分 80
epubcn
RTC Developer worked on Windows, macOS and Android. Aquarium and succulent plants hobbyist. Father, husband
展开
-
WebRTC 视频流发送统计报告
在每次视频推流或拉流结束后,WebRTC都会输出本次视频推拉流的统计报告。其中包含了关于评价本次推拉流质量相关的若干参数。本文的主要目的是介绍视频推流相关的统计指标含义。原创 2022-10-13 18:20:00 · 1098 阅读 · 1 评论 -
WebRTC 视频流接收统计报告
本文介绍了 WebRTC 视频流发送统计报告(ReceiveStatisticsProxy)中主要度量指标的含义。文章基于WebRTC M94 版本编写。原创 2022-09-17 16:52:05 · 1424 阅读 · 0 评论 -
WebRTC视频解码度量指标:帧间隔(InterframeDelay)计算原理
注:本文代码基于WebRTC 4472(对应Chromium 91),不保证适用于所有WebRTC版本。在Chrome的 webrtc-internals 里可以看到很多关于媒体流的度量指标。目前Chrome(我用的版本是94)保留了传统(legacy)和WebRTC标准(standard)两种体系的度量数据。其中legacy的数据已经不再更新,也许未来某个时间就会从Chrome中消失了。无论legacy还是standard,对我们日常分析客户端侧的音视频质量数据还是非常重要的。度量数据众多,本文只介绍原创 2021-10-15 18:34:24 · 4496 阅读 · 0 评论 -
在CEF中给 getDisplayMedia 增加区域捕获(Region Capture)功能
Chromium(以及CEF)以及Chrome并没有提供区域捕获功能(注:有一种消息表明Chrome M97可能会添加),但因为公司产品需要,所以就阅读了一下Chromium、WebRTC的源码,上个月花了几天时间,在Windows上为CEF添加了区域捕获功能,版本基于CEF 4472(Chromium 91)。用法也比较简单:const displayMediaOptions = { audio: true, video: true, regionShare: true};const原创 2021-10-13 21:51:28 · 1285 阅读 · 9 评论 -
WebRTC Android native SDK 支持 Simulcast 的代码改造
注:本文内容基于WebRTC M76分支,部分代码细节可能和后续WebRTC代码有差异。但笔者查看了4324(M88),基本上差异不大,同样适用,但再往后的版本就无法保证了。首先说一句,simulcast的支持,不仅仅是客户端修改就可以了,服务器端也需要修改。Licode、mediasoup都是支持simulcast的。这里只描述了客户端的修改,不涉及服务器端。如果你对simulcast所涉及的两种sdp格式不太熟悉,可以先看看这篇文章:Simulcast and Janus: what’s new?原创 2021-03-10 21:27:15 · 1420 阅读 · 1 评论 -
WebRTC Opus编码器的创建与参数细节分析( sdp -> native )
这几天在做一些WebRTC音频改进方面的调查工作,在阅读Chromium源码的过程中,就顺便记录下来,便于日后回顾。本文基于Chromium 85源码分析,由于Chromium的快速发展,很有可能不适合于跨度太大的Chromium版本。大家知道Opus内置了两种编码器:CELT和SILK,并且可以针对采样率、采样间隔、码率、通道数……等属性进行设置。创建的参数设置,是从sdp来的。本文的主要目的,是来看看sdp中的信息,是如何对应到native世界里的代码的。Native调用序列:上图中,我保留的起原创 2020-10-29 18:00:24 · 2743 阅读 · 0 评论 -
Chromium,WebRTC本地视频前处理
喔~ 突然发现已经快一年没写过博客了。主要是这一年实在是太忙了,一直没有时间好好整理和规划一些内容。今天打算把自己前段时间在我们公司产品中做的一个小功能的原理拿出来简单讲讲。(注:本文基于Chromium 4183(Chromium 85)源码)背景我们公司的桌面客户端产品是基于Chromium内核的CEF框架(理论上同源的Electron也是适用的),前一段时间和国内某知名计算机视觉和深度学习原创技术公司进行合作,将他们公司的技术应用到我们的桌面客户端产品中来。大家知道,Chromium及其内置的We原创 2020-10-26 16:11:32 · 1451 阅读 · 3 评论 -
从WebRTC SDP实现源码中寻找video codec的来源
这篇文章从WebRTC构造sdp字符串作为入口,一步步地寻找产生video codec的源头原创 2019-12-11 11:47:07 · 2193 阅读 · 0 评论 -
WebRTC 移动端的视频画面旋转问题
最近遇到一个比较有意思的问题,这里记录一下,免得日后忘记细节。事情的起因是因为我们的技术团队做了一个合流的功能,就是把来自各种设备的多个视频流进行解码、按照一定布局(可以简单理解为画中画)重新构造新的视频帧数据再编码,最后转推CDN。这个合流没什么可说的,是一种常见的处理多流的手段。那么遇到了什么问题呢?来自移动端设备视频画面的方向问题。大家知道,Android设备的取景器正向一般情况下是音量...原创 2019-09-26 20:27:00 · 7938 阅读 · 2 评论 -
为 CEF/Chromium 添加 x264 编码器
文章目录前言类关系改造可能遇到的问题Simulcast两个QP阈值的含义动态码率/帧率反馈每一帧的QP非常重要H264编码数据的排列格式要求前言众所周知,所有基于Chromium内核开发的“标准”浏览器架构的项目,如CEF、Electron甚至是Google Chrome,默认提供的H.264软编码器都是Cisco的OpenH264。那么,如果我们想使用其他H.264编码器,例如x264,甚至...原创 2019-09-24 09:22:25 · 2848 阅读 · 1 评论 -
Android : WebRTC中设置 Video Stabilization 遇到的一个兼容性问题
最近我们公司的产品,在一款Android平板上遇到一个奇怪的问题,现象是本地视频预览画面显示是黑屏,监听VideoFrame无输出。下面我来描述一下这个故事。在WebRTC Android SDK源码的Camera2Session.java这个文件里,有这样一段代码:private class CaptureSessionCallback extends CameraCaptureSessio...原创 2019-09-05 12:38:15 · 1238 阅读 · 0 评论 -
WebRTC Developer Tool Landscape
Tsahi Levent-Levi是testRTC的CEO,多年以来一直作为工程师、经理、市场以及CTO等角色活跃在实时通讯领域内。作为一名作者,他还撰写了大量与WebRTC和实时通讯有关的文章。他的网站是:https://bloggeek.me/。他在StackOverflow的主页是https://stackoverflow.com/users/15637/tsahi-levent-levi...转载 2019-07-11 14:48:51 · 210 阅读 · 0 评论 -
Windows下调试Chromium及WebRTC源码的一些心得
这里记录一些关于在Windows上调试CEF/Chromium/WebRTC源码的一些心得体会,也是怕时间久了就忘记了其中一些细节。因为经常有需要对CEF以及WebRTC的源码进行分析和修改,所以修改后如何调试就成了首要解决的问题。CEF,或者说Chromium与普通的小工程不同,他的庞大是众所周知的。所以为什么Google专门创造了GN和ninja。在编译了CEF以后,在out目录下会有...原创 2019-07-09 16:08:03 · 3620 阅读 · 1 评论 -
WebRTC视频帧渲染前处理——等比例填充显示窗口
在早期的WebRTC版本中,视频帧在渲染前会经过ViERenderer::DeliverFrame()这个函数(源码位于vie_renderer.cc),我们可以在这里对传递过来的视频帧数据进行调整。比如,一般我们采集到的视频帧大小为640x480(4:3)的话,但显示视图大小是一个16:9甚至一个没有固定宽高比的尺寸,那么我们就面临该如何显示的问题。当然,如何显示,这跟不同产品的需求有关。这里我介原创 2017-10-02 21:42:49 · 3090 阅读 · 0 评论 -
开启WebRTC的一些“试用特性” (FieldTrials)
在使用Android/iOS端的WebRTC SDK时,我们一定会创建和初始化PeerConnectionFactory。在Android上,PeerConnectionFactory提供了initialize方法,参数是InitializationOptions :public static void initialize(PeerConnectionFactory.Initializa...原创 2018-09-13 17:20:37 · 5091 阅读 · 0 评论 -
WebRTC编译小记
心血来潮,好久没有编译过WebRTC了,前几天同步了一份最新代码,今天先编译了一下Windows的。有功夫再编译一下其他平台的。这里记录一些编译过程中的关键内容。Windows编译日期:2018-11-16设置命令提示符科学上网代理:set https_proxy=http://127.0.0.1:1086set http_proxy=http://127.0.0.1:1086不要...原创 2018-11-16 19:22:26 · 701 阅读 · 0 评论 -
4K视频在WebRTC中的实时传输
人们对音视频体验的追求是不断在增长的,当1080P已经逐渐成为主流分辨率的情况下,追求更高品质的画面,将会是音视频工作者需要提前去研究的。最近对4K视频(分辨率 4096x2160 / 3840x2160)在WebRTC中的采/编/解/渲染进行了一次尝试,总的来说还不错。在描述我的实验之前,让我们来看一篇文章。(请容忍我的英文翻译水平,你可以直接跳过我的翻译看原文)以下是我对此文的翻译...原创 2018-11-23 15:11:09 · 4766 阅读 · 0 评论 -
解剖WebRTC SDP
这里有一个查询SDP的页面,鼠标覆盖在每一项上,右侧就会出现解释说明,类似一个字典一样,非常方便:Anatomy of a WebRTC SDPhttps://webrtchacks.com/sdp-anatomy/...转载 2018-11-27 18:20:52 · 450 阅读 · 0 评论 -
自己编译Android WebRTC源码后,如何发布aar?
WebRTC Android提供了官方编译好的库(https://bintray.com/google/webrtc/google-webrtc),在AS中直接使用implementation引用过来即可(implementation 'org.webrtc:google-webrtc:1.0.+')。但如果我们是修改了WebRTC的源码,之后想发布自己编译好的aar该怎么做呢?首先,请移步至...原创 2019-01-16 17:08:54 · 3568 阅读 · 5 评论 -
Android设备最大解码数量:getMaxSupportedInstances()
最近在适配一些Android盒子的时候,遇到一款Amlogic芯片的盒子(金属外观),在上面尝试硬解码第二路H.264视频流的时候发生崩溃。最后编写了一段测试代码,调用MediaCodecInfo.CodecCapabilities的getMaxSupportedInstances()方法才发现,这款盒子返回的数值只有1。而在其他盒子以及Android手机上,最少的6,最大的有32。看来是因为平台...原创 2019-02-26 11:40:14 · 2683 阅读 · 1 评论 -
Android上 PeerConnection 与 PeerConnectionFactory 的释放
我们在使用WebRTC Android native SDK进行开发的时候,PeerConnection与PeerConnectionFactory是两个再熟悉不过的类了。他们的源码分别位于:src\sdk\android\api\org\webrtc\PeerConnectionFactory.javasrc\sdk\android\api\org\webrtc\PeerConnecti...原创 2019-05-28 11:37:50 · 3656 阅读 · 2 评论 -
“奇怪的”WebRTC audio/video 丢包率
前一段时间在给公司产品的弱网提示功能提供数据支撑的时候,是根据WebRTC抛来上的StatsReport中的packetsLost、packetsSent/packetsReceived作为计算的数据来源进行的。采用的丢包率算法是:(单位时间内packetsLost差)÷(单位时间内packetsSent/packetsReceived差)= 单位时间内的丢包率期初,我们采取的单位时间...原创 2019-07-08 18:16:30 · 2676 阅读 · 2 评论 -
为CEF 3增加应用程序共享功能
以前如果想在Chrome中使用JS进行全屏幕/应用程序共享(navigator.getDisplayMedia 或 navigator.mediaDevices.getUserMedia),需要额外安装一个插件。好消息是从Chrome 70.0.3531.0开始,已经不再需要安装额外的插件就可以支持全屏幕/应用程序共享了。可以看这里:https://groups.google.com/forum...原创 2019-06-19 19:51:18 · 2724 阅读 · 23 评论 -
WebRTC视频帧渲染前处理——视频帧裁剪
十一假期写了一篇《WebRTC视频帧渲染前处理——等比例填充显示窗口》,介绍了按照显示窗口,不损失原视频帧内容的前提下,左右或上下补黑的方式来构造视频帧的方法。这篇文章再说一下另外一种处理方式,那就是按照显示窗口比例,将源视频帧进行裁剪,按照比例来获取其中一部分,放到窗口中显示的方法。这种方法适合任何矩形窗口比例(如1:1正方形、4:3、16:9、16:10或其他比例)。根据显示窗口宽高比不同,与等原创 2017-10-13 10:05:59 · 2568 阅读 · 1 评论