- 博客(47)
- 资源 (25)
- 收藏
- 关注

原创 CEF 3 Windows/macOS 带 ffmpeg (支持H.264, MP4, MP3等)下载地址大全
这里记录一下我编译的CEF 3 Windows/macOS 带ffmpeg支持的版本,为了省事,直接上传到了CSDN下载频道。其实我是想免积分提供的,但是上传页面的下载积分不能选0,最小也是1。注:2019年2月份开始,我发现上传资源不能选积分了,我上传的CEF默认都需要5分,这个估计是CSDN调整规则了,我也没办法。而且不知道为什么有些下载的积分会自己增加,所以有哪位朋友有知道可以免费提供下载的...
2018-09-13 16:47:46
13388
107
原创 百家云 BRTC:革新华为 HarmonyOS NEXT 系统的实时通信体验
近期,百家云 BRTC 实时音视频平台推出了针对华为 HarmonyOS NEXT 系统的原生 RTC SDK,进一步扩大和丰富了 BRTC 产品的产品矩阵,为广大需要 RTC 能力的个人、企业提供了更加丰富的选择,注入新的活力。
2024-09-03 10:22:35
1014
翻译 WebRTC录制的挑战和解决方案
本文就如何设计一个完善的音视频录制系统架构,需要考虑的各个方面进行了简单的阐述。尽可能将实时音视频录制系统在各种场景下,不同方案的优劣进行对比说明。相信通过本文的介绍,对您了解实时音视频录制系统会有一个全面的认知。
2024-03-19 20:33:59
510
原创 时隔 3 年,再次编译 Electron 源码,记录下各种花式错误
2020 年 11 月份我曾经发过一篇文章,当时纯粹只是为了体验一下编译过程,没什么实际用途。因为当时公司的产品还在使用 CEF,所以后续就没有继续跟进了。过去一两年的时间,公司的产品已经逐渐从 CEF 过渡开始使用 Electron 了,有些原来在 CEF 上的修改,有些场景可能还是有需要在 Electron 上来修改。所以,最近我又重新编译了一次 Electron。这次的编译比 3 年多那次遇到了更多的问题,这里尽可能逐一记录下来,以便后续参考。这次编译的版本是指定了v20.3.12。
2024-02-04 11:51:55
1805
1
原创 WebRTC 视频流发送统计报告
在每次视频推流或拉流结束后,WebRTC都会输出本次视频推拉流的统计报告。其中包含了关于评价本次推拉流质量相关的若干参数。本文的主要目的是介绍视频推流相关的统计指标含义。
2022-10-13 18:20:00
1120
原创 WebRTC 视频流接收统计报告
本文介绍了 WebRTC 视频流发送统计报告(ReceiveStatisticsProxy)中主要度量指标的含义。文章基于WebRTC M94 版本编写。
2022-09-17 16:52:05
1465
原创 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
4525
原创 在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
1308
9
原创 You must install the “Debugging Tools for Windows“ feature from the Windows 10 SDK
最近机器总是频繁地蓝屏,重装了Windows 10系统。一开始一度以为是硬件故障了,后来相继安装了21H1 (updated Jul 2021) (x64) 到 1909 (Updated April 2020) (x64) 等多个Win10版本,都是不同概率地发生蓝屏。最后找来2017年下半年的一个Win10版本,安装上,一切太平了,稳得一批。看来我这2018年初买的笔记本(小米笔记本Pro),不配使用最新版本的Win10系统,哈哈。重装系统以后,直接用 ninja 编译 WebRTC 源码,就提示了这
2021-08-23 18:08:53
560
原创 You set the variable “no_check_targets“ here and it was unused before it went out of scope.
很久没有编译CEF新版本了,最近看到Chrome提到在91版本上,提到有23%的性能提升,原文链接:https://blog.chromium.org/2021/05/chrome-is-faster-in-m91.html,是不是真有这么大改进?所以想试试看。然后理所当然地使用以前自己的编译脚本进行编译,结果又遇到个“奇葩”问题,这里简单记录一下。在使用automate-git.py编译CEF 4472(Chromium 91)的时候,在脚本执行完CEF patch apply以后,突然报错:Gene
2021-07-17 20:54:19
2411
原创 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
1429
1
原创 Chromium源码中 media::VideoFrame 的3个属性(coded_size, visible_rect, natual_size)的理解
前段时间处理过一例在Chrome中视频虚拟背景图显示范围不正确的问题,在阅读Chromium源码并结合一些试验后,这里简单记录一下media::VideoFrame这个类其中的与此次问题排查相关的三个属性的含义。media::VideoFrame的代码位于 media\base\video_frame.h(.cc),下面代码摘抄自其中(Chromium 85,branch 4183): // The full dimensions of the video frame data. const gf
2021-02-14 01:10:53
687
原创 我也来编译个Electron吧
最近心血来潮想编译一下和CEF同源的Electron源码。虽然已经有很多CEF的经验,但在编译Electron的时候还是遇到了一些小问题,这里简单记录一下。编译工具我是按照Electron提供的 Build Tools 来编译的。因为之前经常编译CEF,所以像 depot_tools、git 这些早就有。然后按照指导,额外安装了 yarn,并且更新了我机器上的 npm 和 node.js版本。编译过程在Electron Build Tools指导页面上,针对init / sync / build 做
2020-11-17 11:05:11
3308
2
原创 WebRTC Opus编码器的创建与参数细节分析( sdp -> native )
这几天在做一些WebRTC音频改进方面的调查工作,在阅读Chromium源码的过程中,就顺便记录下来,便于日后回顾。本文基于Chromium 85源码分析,由于Chromium的快速发展,很有可能不适合于跨度太大的Chromium版本。大家知道Opus内置了两种编码器:CELT和SILK,并且可以针对采样率、采样间隔、码率、通道数……等属性进行设置。创建的参数设置,是从sdp来的。本文的主要目的,是来看看sdp中的信息,是如何对应到native世界里的代码的。Native调用序列:上图中,我保留的起
2020-10-29 18:00:24
2775
原创 Chromium,WebRTC本地视频前处理
喔~ 突然发现已经快一年没写过博客了。主要是这一年实在是太忙了,一直没有时间好好整理和规划一些内容。今天打算把自己前段时间在我们公司产品中做的一个小功能的原理拿出来简单讲讲。(注:本文基于Chromium 4183(Chromium 85)源码)背景我们公司的桌面客户端产品是基于Chromium内核的CEF框架(理论上同源的Electron也是适用的),前一段时间和国内某知名计算机视觉和深度学习原创技术公司进行合作,将他们公司的技术应用到我们的桌面客户端产品中来。大家知道,Chromium及其内置的We
2020-10-26 16:11:32
1463
3
原创 从WebRTC SDP实现源码中寻找video codec的来源
这篇文章从WebRTC构造sdp字符串作为入口,一步步地寻找产生video codec的源头
2019-12-11 11:47:07
2206
原创 让CEF支持HEVC(H.265)视频播放
HEVC(H.265)有高昂的版权费用这个是众所周知的,所以现在绝大多数浏览器默认都不具备HEVC解码能力,这一点可以通过caniuse.com看到:可以看到,基本上只有Apple是HEVC的主要支持者。Google Chrome以及使用Chromium内核的浏览器全军覆没。但实际中确实有很多需求是要在非Apple系的浏览器播放HEVC,怎么办呢?我所知道的有两种方式:一种是在页面上采用Web...
2019-11-26 10:35:00
6845
1
原创 flv.js直播拉流场景下的技术优化
众所周知,Adobe Flash按照Google Chrome的计划(https://www.chromium.org/flash-roadmap),在已经release的Chrome 76开始默认禁用,在2020年12月将在Chrome 87中彻底移除。到那时,如果用户使用了最新版本的Chromium内核的浏览器,意味着将无法播放各种来自CDN推送的媒体流(rtmp、flv等)。当然也不排除人们...
2019-11-18 14:53:23
26591
47
原创 关于H.264 profile-level-id
我们在WebRTC开发中,如果采用的是H.264来作为视频流编码类型,就会面临一个问题,那就是编码端和解码端需要进行协商各自的编解码能力。例如,如果编码端使用了高级别的profile和level,或使用了解码器不支持的编码特性,那么对解码端来说就是个灾难了。大家知道,H.264的Profile以及Level有好多种,而并不是每一种编码器或者解码器都支持每一个Profile和Level。实际应用当...
2019-10-29 18:05:49
10793
1
原创 QNAP(威联通)每天自动通过邮件上报外网IP
写一篇和视频无关的文章。这个月初从京东购买了一台QNAP 威联通 TS-453Bmini NAS主机,同时配了希捷酷狼NAS硬盘。因为是第一次用NAS,买回来的周末没干别的,就鼓捣NAS了。功能上面倒是还好,最主要的问题是我家是北京联通200M光纤,没有固定的外网IP。打电话找客服、还安排了上门师傅,都没能解决我从外网直接访问NAS的问题。买NAS之前,我家里是光猫上只连接一个NETGEAR ...
2019-09-27 23:43:38
6950
1
原创 WebRTC 移动端的视频画面旋转问题
最近遇到一个比较有意思的问题,这里记录一下,免得日后忘记细节。事情的起因是因为我们的技术团队做了一个合流的功能,就是把来自各种设备的多个视频流进行解码、按照一定布局(可以简单理解为画中画)重新构造新的视频帧数据再编码,最后转推CDN。这个合流没什么可说的,是一种常见的处理多流的手段。那么遇到了什么问题呢?来自移动端设备视频画面的方向问题。大家知道,Android设备的取景器正向一般情况下是音量...
2019-09-26 20:27:00
7984
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
2871
1
原创 Android : WebRTC中设置 Video Stabilization 遇到的一个兼容性问题
最近我们公司的产品,在一款Android平板上遇到一个奇怪的问题,现象是本地视频预览画面显示是黑屏,监听VideoFrame无输出。下面我来描述一下这个故事。在WebRTC Android SDK源码的Camera2Session.java这个文件里,有这样一段代码:private class CaptureSessionCallback extends CameraCaptureSessio...
2019-09-05 12:38:15
1251
转载 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
228
原创 Windows下调试Chromium及WebRTC源码的一些心得
这里记录一些关于在Windows上调试CEF/Chromium/WebRTC源码的一些心得体会,也是怕时间久了就忘记了其中一些细节。因为经常有需要对CEF以及WebRTC的源码进行分析和修改,所以修改后如何调试就成了首要解决的问题。CEF,或者说Chromium与普通的小工程不同,他的庞大是众所周知的。所以为什么Google专门创造了GN和ninja。在编译了CEF以后,在out目录下会有...
2019-07-09 16:08:03
3638
1
原创 “奇怪的”WebRTC audio/video 丢包率
前一段时间在给公司产品的弱网提示功能提供数据支撑的时候,是根据WebRTC抛来上的StatsReport中的packetsLost、packetsSent/packetsReceived作为计算的数据来源进行的。采用的丢包率算法是:(单位时间内packetsLost差)÷(单位时间内packetsSent/packetsReceived差)= 单位时间内的丢包率期初,我们采取的单位时间...
2019-07-08 18:16:30
2697
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
2754
24
原创 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
3679
2
原创 视频分辨率的“别名”
作为一个音视频工作者,视频的分辨率经常会挂在嘴边,大多数人都喜欢直接使用具体的宽高来描述,比如640x480,320x240……也有的人喜欢说 480p、720p、1080p……等等。这其实是个人习惯,怎么叫顺嘴就行。其实,大多数视频分辨率都还对应着其各自的一个“别名”,我列举了一些常见的:160 x 120 QQVGA240 x 160 HQVGA320 x 240 QVGA...
2019-05-28 10:07:11
1030
原创 Android设备最大解码数量:getMaxSupportedInstances()
最近在适配一些Android盒子的时候,遇到一款Amlogic芯片的盒子(金属外观),在上面尝试硬解码第二路H.264视频流的时候发生崩溃。最后编写了一段测试代码,调用MediaCodecInfo.CodecCapabilities的getMaxSupportedInstances()方法才发现,这款盒子返回的数值只有1。而在其他盒子以及Android手机上,最少的6,最大的有32。看来是因为平台...
2019-02-26 11:40:14
2695
1
原创 自己编译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
3589
5
转载 解剖WebRTC SDP
这里有一个查询SDP的页面,鼠标覆盖在每一项上,右侧就会出现解释说明,类似一个字典一样,非常方便:Anatomy of a WebRTC SDPhttps://webrtchacks.com/sdp-anatomy/...
2018-11-27 18:20:52
455
原创 4K视频在WebRTC中的实时传输
人们对音视频体验的追求是不断在增长的,当1080P已经逐渐成为主流分辨率的情况下,追求更高品质的画面,将会是音视频工作者需要提前去研究的。最近对4K视频(分辨率 4096x2160 / 3840x2160)在WebRTC中的采/编/解/渲染进行了一次尝试,总的来说还不错。在描述我的实验之前,让我们来看一篇文章。(请容忍我的英文翻译水平,你可以直接跳过我的翻译看原文)以下是我对此文的翻译...
2018-11-23 15:11:09
4816
原创 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
711
原创 抓个包,一起来看看NACK是怎么回事?
写这篇博文不打算介绍RTP/RTCP的基础知识,以及NACK是什么含义。让我们从一个Wireshark抓包开始,一起来看看NACK是怎么一回事。抓个包我在Windows上用Wireshark(2.6.2)抓了一个基于RTP/RTCP协议的直播软件的包。这个软件启动后,会将本地音视频数据推流到服务器,它的抓包中,音视频数据部分长这样子:我们看到,Wireshark并没有自动帮我们将这些UD...
2018-11-07 19:46:14
2840
原创 开启WebRTC的一些“试用特性” (FieldTrials)
在使用Android/iOS端的WebRTC SDK时,我们一定会创建和初始化PeerConnectionFactory。在Android上,PeerConnectionFactory提供了initialize方法,参数是InitializationOptions :public static void initialize(PeerConnectionFactory.Initializa...
2018-09-13 17:20:37
5115
原创 video标签在Chrome/CEF上,在某些机器上的一个渲染效率问题
近期在公司的一款基于纯WebRTC的产品上遇到一个video标签渲染视频的效率问题,如下图:当快速地在摄像头前挥动手,会发现video标签渲染的本地视频画面会产生错层及刷新不及时的方块。后来发现一篇帖子:https://www.tonymacx86.com/threads/fix-chrome-graphics-issues-but-without-turning-off-graphi...
2018-08-27 16:38:30
1790
原创 编译带 ffmpeg(支持MP3/MP4等) 的CEF(Windows x86 + macOS x64)遇到的一些问题记录
注:本文记录的是 CEF 3396(2018年4月份的官方Release版本)的编译记录。网上比较多介绍的都是Windows版本的CEF编译说明,macOS版本的比较少。Windows版本的CEF我基本上比较顺利就编译过了,带ffmpeg支持(H.264/MP3/MP4等)。下面是我使用的编译命令:set CEF_USE_GN=1set GN_DEFINES=is_official_bu...
2018-07-18 11:06:21
5077
4
原创 WebRTC视频帧渲染前处理——视频帧裁剪
十一假期写了一篇《WebRTC视频帧渲染前处理——等比例填充显示窗口》,介绍了按照显示窗口,不损失原视频帧内容的前提下,左右或上下补黑的方式来构造视频帧的方法。这篇文章再说一下另外一种处理方式,那就是按照显示窗口比例,将源视频帧进行裁剪,按照比例来获取其中一部分,放到窗口中显示的方法。这种方法适合任何矩形窗口比例(如1:1正方形、4:3、16:9、16:10或其他比例)。根据显示窗口宽高比不同,与等
2017-10-13 10:05:59
2581
1
原创 WebRTC视频帧渲染前处理——等比例填充显示窗口
在早期的WebRTC版本中,视频帧在渲染前会经过ViERenderer::DeliverFrame()这个函数(源码位于vie_renderer.cc),我们可以在这里对传递过来的视频帧数据进行调整。比如,一般我们采集到的视频帧大小为640x480(4:3)的话,但显示视图大小是一个16:9甚至一个没有固定宽高比的尺寸,那么我们就面临该如何显示的问题。当然,如何显示,这跟不同产品的需求有关。这里我介
2017-10-02 21:42:49
3118
cef_binary_91.1.24+gb245dd0+chromium-91.0.4472.124_windows32.tar.bz2
2021-07-21
cef_binary_85.0.0-4183_g44bd7ac+chromium-85.0.4183.102_windows32
2020-09-26
cef_binary_84.0.0-4147+g3c12b9d+chromium-84.0.4147.105_macosx64.tar.bz2
2020-09-02
cef_binary_78.3.9+gc7345f2+chromium-78.0.3904.108_windows64.tar.bz2
2020-03-25
cef_binary_78.3.9+gc7345f2+chromium-78.0.3904.108_windows32支持H.264编解码+H.265解码
2019-12-18
libx265 3.2.1+1-b5c86a64bbbe 编译好的x265库(x86,含4种编译类型)
2019-12-05
cef_binary_76.1.13+gf19c584+chromium-76.0.3809.132_macosx64.tar.bz2
2019-10-24
cef_binary_76.1.13+gf19c584+chromium-76.0.3809.132_windows32.tar.bz2
2019-09-09
cef_binary_75.1.4+g4210896+chromium-75.0.3770.100_windows32.tar.bz2
2019-07-23
CEF3.3729.157 (Chromium74) macOS x64(支持h.264/aac/mp3/mp4, 应用程序共享)
2019-06-20
cef_binary_74.1.19+gb62bacf+chromium-74.0.3729.157_windows32.tar.bz2
2019-06-18
cef_binary_73.1.11+ge6986dc+chromium-73.0.3683.75_windows32.tar.bz2
2019-05-28
CEF 3.3626.1894 windows64 带ffmpeg(支持H.264/MP3/MP4)
2019-02-28
CEF 3.3626.1892 windows32 带ffmpeg(支持H.264/MP3/MP4)
2019-02-27
[getUserMedia()修复版本] CEF 3.3578.1860 macosx64 带ffmpeg(支持H.264/MP3/MP4)
2019-01-23
CEF 3.3578.1860 macosx64 带ffmpeg(支持H.264/MP3/MP4)
2019-01-04
CEF 3.3578.1860 windows64 带ffmpeg(支持H.264/MP3/MP4)
2018-12-28
CEF 3.3578.1860 windows32 带ffmpeg(支持H.264/MP3/MP4)
2018-12-27
CEF 3.3538.1852 Windows x64 带ffmpeg(支持H.264/MP3/MP4)
2018-12-03
CEF 3.3538.1846 x86带ffmpeg(支持H.264/MP3/MP4),增加支持无插件使用全屏幕/应用程序共享
2018-11-08
CEF 3.3538.1838 macOS x64 带ffmpeg(支持H.264/MP3/MP4)
2018-09-29
CEF 3.3538.1829.g8f5df40 x86带ffmpeg(支持H.264/MP3/MP4)
2018-09-14
CEF 3.3396.1782 x86带ffmpeg(支持H.264/MP3/MP4)
2018-09-13
CEF 3.3396.1785 macOS 64位 带ffmpeg(支持H.264/MP3/MP4)
2018-09-13
CEF 3.3497.1817 x86带ffmpeg(支持H.264/MP3/AAC等)
2018-07-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人