![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
webrtc
老衲不出家
寨都码农一枚,平常喜欢关注音视频技术,从事音视频行业小几年,主要是音视频编解码,语音处理,移动端音视频开发,博客是一个自我记录的地方,如果不妥之处,请高人不吝赐教,如有侵权,请联系我删除。tanningzhong@126.com
展开
-
WebRTC 基础技术 | RTP 包序列号的回绕处理
原文链接:这里 导读 序列号回绕 ForwardWrap BackwardWrap 源码分析 IsNewer 函数 Unwrap 函数 测试用例 测试 1 测试 2 总结 导读在诸多的网络通信协议中,都会有序列号字段sequence numb...原创 2020-05-08 16:41:48 · 2426 阅读 · 1 评论 -
完整SIP/SDP媒体协商概论-ICE初始offer发送详解
原文地址:https://mp.weixin.qq.com/s/plQi0lK2kxwYWv7WpVzGDA在前面的章节中,我们主要讨论了ICE概览,介绍了ICE的基本处理流程和候选地址配对的算法概论和轻量级ICE部署(Lite Implementations)的讨论。和前面介绍中讨论的SIP中offer的处理一样,在此文章中,笔者也将首先介绍ICE处理过程中初始offer的发送处理。因...原创 2020-04-10 16:43:19 · 1962 阅读 · 1 评论 -
浅谈 WebRTC NetEQ
WebRTC Native 代码里面有很多值得学习的宝藏,其中一个就是 WebRTC 的 NetEQ 模块。根据 WebRTC 术语表 对 NetEQ 的解释:A dynamic jitter buffer and error concealment algorithm used for concealing the negative effects of network jitter an...转载 2020-02-17 16:39:17 · 1219 阅读 · 1 评论 -
在HTML5上开发音视频应用的五种思路
问题背景:无论是实时视频监控还是直播点播等应用场景,最起码的一个操作就是播放视频。其中最基本的思路就是利用OS的API在PC开发桌面应用、在移动端开发Native App,目前这种技术已经成熟,大厂小厂都是这么做的,但是缺点也很明显:开发比较费时费力,需要IOS开发一遍再去Android开发一遍。特别对于一些非刚性需求比如用户家里有一两个监控摄像头,一个礼拜也不会打开看几次,你却要他下载和安装...原创 2019-10-28 09:44:52 · 1183 阅读 · 0 评论 -
iOS下 WebRTC 视频渲染
前言今天为大家介绍一下 iOS 下 WebRTC是如何渲染视频的。在iOS中有两种加速渲染视频的方法。一种是使用OpenGL;另一种是使用 Metal。OpenGL的好处是跨平台,推出时间比较长,因此比较稳定。兼容性也比较好。而Metal是iOS最近才推出的技术,理论上来说比OpenGL ES效率更高。WebRTC中这两种渲染方式都支持。转载 2017-10-27 10:40:44 · 1250 阅读 · 0 评论 -
开箱即用的 WebRTC 开发环境【转】
适逢我也正在倒腾一些 WebRTC 的东西,万事开头难,搞事情最怕的就是开始的拦路虎,编译环境、demo 工程、Server 如何部署,这三个问题(尤其是最后一个)想必会浇灭很多朋友的热情之火。经过近两周的不懈奋斗,我总算把这几头拦路虎一一解决,今天我就在这里把这一套开箱即用的 WebRTC 开发环境分享给大家。注意:这里我假设大家具备 Docker 的基本使用能力,如不具备,请自行搜索相关教程。...转载 2018-05-31 08:58:04 · 1543 阅读 · 0 评论 -
webrtc 视频编码之 h264 自动调节分辨率一
webrtc 内部支持 vp8,vp9,h264 视频编码,由于业务需要和出于通用性考虑,我选择了 h264 编码,webrtc集成了openh264,ffmpeg用于h264的编解码。当然在移动平台也集成了硬件编解码,但是测试发现在ios上硬件编码还算可以,android上表现不稳定,差异很大,主要问题出在码率控制,视频质量控制上。动态调整码率可是保证视频流畅的重要技术,但android的med...转载 2018-06-01 11:35:30 · 9284 阅读 · 1 评论 -
webrtc 视频编码之 h264 自动调节分辨率二
上次说到 openh264 的编码分辨率是通过 QualityScaler 计算得来的,继续看看代码实现初始化接口void QualityScaler::Init(int low_qp_threshold, int high_qp_threshold, int initial_bitrate_kbp...转载 2018-06-01 11:37:09 · 4541 阅读 · 0 评论 -
webrtc branch 63版本 ios硬编H264与android和pc不能互通解决
问题描述ios硬编H264不能与android和pc版本互通,android和pc解码时候crash解决方案修改modules/video_coding/codecs/h264/h264_decoder_impl.cc文件,匹配ios硬编AV_PIX_FMT_YUVJ420P格式。修改如下:@@ -32,7 +32,8 @@ namespace {-cons...原创 2018-07-31 14:13:31 · 1301 阅读 · 0 评论 -
WebRTC基于TransportCC和Trendline Filter的发送端码率估计(Sendside-BWE)
1引言众所周知,WebRTC的拥塞控制和码率估计算法采用GCC算法[1]。该算法充分考虑了网络丢包和网络延迟对码率估计的不同影响,分别基于丢包率和网络延迟进行码率估计,最后综合这另种码率得出最优值。在算法实现上,基于丢包率的码率估计在发送端进行,基于网络延迟的码率估计在接收端进行。最后在发送端计算出最优值,作用于Codec和PacedSender模块。GCC算法能够较好地基于网络实时状况估计网...转载 2018-08-29 17:05:42 · 2245 阅读 · 0 评论 -
macOS 下单步调试 WebRTC Android & iOS
选择语言▼本文是 Piasy 原创,发表于 https://blog.piasy.com,请阅读原文支持原创 https://blog.piasy.com/2018/08/14/build-webrtc/上一篇文章里有位读者朋友咨询我,如何调试 WebRTC iOS demo。显然这个小问题不值一篇文章,所以这周我就花了大量的精力,解决了长久以来困扰广大 WebRTC 安卓开发者的难题:如...转载 2018-09-06 09:39:47 · 963 阅读 · 0 评论 -
WebRTC -- 官方apprtc示例搭建
系统环境Ubuntu 16.04在搭建之前建议关闭系统防火墙,参考:Ubuntu使用Ufw管理防火墙一. 房间服务器搭建1.1 安装依赖程序apt-get install git unzip lrzsz nodejs npm automake autoconf libtool nodejs-legacy python-webtest golang –y11.2 安装jdk81.2.1 下载jd...转载 2018-05-31 08:46:51 · 3984 阅读 · 0 评论 -
在windows上vs2017 编译webrtc
1.下载、安装depot_toolsdepot_tools是包含下载、编译的相关工具,我们要先下载并安装它,才能继续后面的操作。下载地址:点这里将depot_tools.zip解压,并将解压后的depot_tools目录路径加入到系统环境变量中的path里面去。将DEPOT_TOOLS_WIN_TOOLCHAIN作为一个变量,也加入到环境变量中,它的值设置为0,这是为了告诉脚本,在编译的时候使用我...原创 2018-05-24 14:13:05 · 8346 阅读 · 4 评论 -
WebRTC Native 源码导读:iOS 相机采集实现分析
WebRTC-iOS 的相机采集主要涉及到以下几个类:AVCaptureSession, RTCCameraVideoCapturer, RTCVideoFrame。AVCaptureSession 是 iOS 和 macOS 系统提供的采集管理类,位于 AVFoundation.framework 中,在 RTCCameraVideoCapturer 中完成了对 AVCaptureSession...原创 2018-05-16 16:26:42 · 1540 阅读 · 2 评论 -
webrtc 编译--终极版
需要翻墙下载代码1、depot_tools:https://chromium.googlesource.com/chromium/tools/depot_tools.git环境变量配置: depot_tools、【python 2.7.6】 注意环境变量a、把depot_tools目录加入PATH:export PATH=`pwd`/depot_tools:"$PATH"b、安装”Vi转载 2017-10-27 15:38:27 · 2968 阅读 · 0 评论 -
WebRTC-Android 源码导读(三):视频硬编码实现分析
前两篇我们分析了 WebRTC 的相机采集和预览,接下来的环节就是编码和传输了。目前我对传输还不熟悉,本篇只关注编码相关的内容,同样也是聚焦于三个问题:数据怎么送进编码器?怎么从编码器取数据?如何做流控?在开始之前,我们先了解一下 MediaCodec 的基本知识。MediaCodec 基础Developer 官网 上的描述已经很清楚了,下面简要总结一下。首转载 2017-11-30 09:52:40 · 4655 阅读 · 4 评论 -
WebRTC-Android 源码导读(一):相机采集实现分析
前面分享了一套开箱即用的 WebRTC 开发环境,希望能给对 WebRTC 感兴趣的朋友带来帮助。不过有了开发环境只是迈出了万里长征第一步,后面的事情还得仔细研读源码才行,所以这里给大家先带来 WebRTC 的安卓 demo 工程—— AppRTC-Android 的源码导读系列。(十个月前说好的拆 Dagger2 看来又要等等了,海涵海涵…)WebRTC 的代码量不小,一次性看明白不转载 2017-11-30 09:54:06 · 2379 阅读 · 0 评论 -
WebRTC-Android 源码导读(二):预览实现分析
在本系列第一篇中,我们分析了 WebRTC-Android 相机采集的实现,本文中我们将分析预览的实现。有过一定相机开发经验的朋友可能会疑惑,预览还有什么好分析的,不是直接 camera.setPreviewDisplay 或者 camera.setPreviewTexture 就能在 SurfaceView/TextureView 上预览了吗?实际上预览还有更高级的玩法,尤其是需要加上图转载 2017-11-30 09:54:52 · 715 阅读 · 3 评论 -
WebRTC-Android 源码导读(四):VideoCRE 与内存抖动优化
前面三篇中,我们依次分析了 WebRTC Android 的视频采集、视频渲染和视频硬编码,Live Streaming 视频的前段就已经全了。WebRTC 是个宝,初窥这部分代码时就被它的 Capturer 类的设计惊艳到了,仔细品鉴后越发佩服起来,里面简直填了太多坑了,如此宝贝,如不能为我所用,岂非一大憾事!而前三篇的解读,正是为了今天能将其剥离出来所做的铺垫,现在就有请我们今天的主角——转载 2017-11-30 09:55:36 · 1220 阅读 · 0 评论 -
120行代码实现 浏览器WebRTC视频聊天
本例子是参考webrtc-tutorial-simple-video-chat做的。这个教程应该主要是去宣传ScaleDrone的sdk, 他们的服务是收费的,但是免费的也可以用,就是有些次数限制。本栗子的地址本栗子的pages地址1 准备使用最新版谷歌浏览器(62版)视频聊天中 一个是windows, 一个是macstun服务器使用谷歌的,trun使用Scal转载 2017-11-16 09:41:38 · 15049 阅读 · 11 评论 -
webrtc 中的 fec
基于IP网络的多媒体通信系统(比如WebRTC)中,网络丢包对多媒体通信质量有非常严重的影响:例如造成视频的马赛克、图像模糊、帧率下降等问题,造成音频的声音失真、噪声干扰、音频中断等问题。这都会严重影响系统的通信质量,造成非常差的用户体验。 WebRTC主要采取两种手段对抗网络丢包:丢包重传(NACK)和前向纠错(FEC)。FEC是一种前向纠错技术,发送端将负载数据加上一定的冗余纠错码一...转载 2018-05-10 11:19:07 · 2145 阅读 · 2 评论 -
WebRTC中丢包重传机制的实现
当网络质量突然变的很差并开始丢包时,声音听起来音质会变差,画面帧速会下降,甚至会完全卡住。我们可能需要某种机制来应对这种情况。在WebRTC中,主要有两种机制来应该网络变差的情况:前向纠错:在每个数据包中,您将添加一些关于前一个信息的信息,以防丢失,您需要重新构建它们(flexfec是WebRTC [1]中的新格式)。重传:当接收方检测到有丢包时,它会发送NACK类型的RTCP转载 2018-05-08 10:37:35 · 997 阅读 · 0 评论 -
webrtc windows 代码下载编译终极版(基于M68)
1. 准备工作1.1 需要工具1. 科学上网工具。2. 谷歌depot_tools下载并设置环境变量 git clone https://chromium.googlesource.com/chromium/tools/depot_tools1.2 下载前配置1.2.1 gitvim ~/.gitconfig 文件添加如下,后面端口配置成自己工具端口即可[ht...原创 2018-09-12 13:53:21 · 1313 阅读 · 0 评论 -
windows使用webrtc.lib库,提示“文件损坏或无效,无法读取”
解决办法 这个问题 在用vs调用webrtc.lib时出现,在gn时 增加 is_clang=false 可以解决掉原创 2018-09-12 13:57:09 · 1958 阅读 · 1 评论 -
webrtc之Android视频质量提升:保帧率降码率
前言:我们的产品是在一款跑着Android系统的特定芯片上使用webrtc开发的一个视频通话业务,当前的情况是在网络正常的情况下帧率也比较低,弱网环境下适应能力较差。基于此,我了解了webrtc Android平台的视频采集编码流程,并编写了相应的文章《webrtc之Android视频采集编码》。在深入细节之后,定位问题所在,并做了相应优化,在此记录相关过程,以后日后复习,以及和大家共同学习。...转载 2018-09-25 14:50:36 · 3640 阅读 · 0 评论 -
webrtc QOS方法一(NACK实现)
一、概念与NACK对应的是ACK,ACK是到达通知技术。以TCP为例,他可靠因为接收方在收到数据后会给发送方返回一个“已收到数据”的消息(ACK),告诉发送方“我已经收到了”,确保消息的可靠。NACK也是一种通知技术,只是触发通知的条件刚好的ACK相反,在未收到消息时,通知发送方“我未收到消息”,即通知未达。在rfc4585协议中定义可重传未到达数据的类型有二种:1)RTPFB:rt...转载 2019-02-14 15:50:28 · 2682 阅读 · 0 评论 -
Ubuntu 18.04 编译安装Janus
Ubuntu 18.04 编译安装Janus找了全网没看到有关18.04安装Janus的文档,特此记录,当然最好的文档是官方的编译文档,目录在Janus的Git官网的README.md文件。下文主要记录一下准备环境过程中的坑,有些坑已经避免,所以直接贴出了采坑后的解决方案了。准备环境安装基础必备软件包sudo aptitude install libmicrohttpd-dev lib...原创 2019-03-04 19:25:15 · 2228 阅读 · 0 评论 -
语音质量评价方法-【音频质量专题】
主要内容:1.信噪比(Signal-to-NoiseRatio,SNR)2.分段信噪比(Segment Signal-to-Noise Ratio,SegSNR)3.PESQ(PerceptualEvaluationofSpeechQuality)4.对数似然比测度(LogLikelihoodRatioMeasure,LLR)5.对数谱距离(logspect...转载 2019-03-19 15:41:39 · 5042 阅读 · 0 评论 -
Janus配置文件详解
General基本配置,配置和插件的路径,日志输出方式,运行方式等配置.变量说明示例configs_folder配置文件目录路径configs_folder=/opt/janus/etc/janusplugins_folder插件目录路径plugins_folder=/opt/janus/lib/janus/pluginstransports_fold...原创 2019-04-19 10:08:55 · 5361 阅读 · 1 评论 -
iOS利用FFmpeg实现Video硬解码
需求将编码的视频流解码为原始视频数据,编码视频流可以来自网络流或文件,解码后即可渲染到屏幕.实现原理正如我们所知,编码数据仅用于传输,无法直接渲染到屏幕上,所以这里利用FFmpeg解析文件中的编码的视频流,并将压缩视频数据(h264/h265)解码为指定格式(yuv,RGB)的视频原始数据,以渲染到屏幕上.注意: 本例主要为解码,需要借助FFmpeg搭建模块,视频解析模块,渲染模块...转载 2019-06-20 16:38:47 · 4415 阅读 · 1 评论 -
18个实时音视频开发中会用到开源项目
实时音视频的开发学习有很多可以参考的开源项目。一个实时音视频应用共包括几个环节:采集、编码、前后处理、传输、解码、缓冲、渲染等很多环节。每一个细分环节,还有更细分的技术模块。比如,前后处理环节有美颜、滤镜、回声消除、噪声抑制等,采集有麦克风阵列等,编解码有VP8、VP9、H.264、H.265等。我们今天汇总了一些能帮助到正在学习或进行音视频开发的实时音视频开发者们的开源项目与几个也在为开源...原创 2019-06-27 15:48:19 · 1516 阅读 · 0 评论 -
webrtc源码之nack&&rtx详解
1、nack协商m=video 9 RTP/AVPF 96 97 98 99 100 101127 122 108 109 123a=rtpmap:96 H264/90000a=rtcp-fb:96 goog-remba=rtcp-fb:96 transport-cca=rtcp-fb:96 ccm fira=rtcp-fb:96 nacka=rtcp-fb:96 na...原创 2019-09-24 14:25:07 · 1722 阅读 · 0 评论 -
webrtc QOS方法(汇总篇)
看到一组很有价值分析QOS的文章,特意转载过来 原文:https://blog.csdn.net/CrystalShaw/article/details/80432267 感谢楼主 目前总结出webrtc用于提升QOS的方法有:NACK、FEC、SVC、JitterBuffer、IDR Request、PACER、Sender Side BWE、VFR(动态帧率调整策略)。这几种方...转载 2019-02-14 15:42:10 · 2220 阅读 · 1 评论 -
webrtc QOS方法六(花屏问题解决方法)
做过视频会议都清楚,当网络出现丢包异常后,经常会导致视频出现长时间花屏问题。严重降低用户体验。测试webrtc发现,视频无论在什么环境,都没有出现花屏现象。若出现丢包,通过掉帧方式解决该问题。最坏的情况就是视频出现卡顿,但是也不会出现花屏。我们都知道视频解码器只管数据解码,不会判断是否是花屏,这个丢包导致花屏问题,只能在调度侧解决,解码器是不处理该异常的。webrtc在收包送到解码器这块流程,...转载 2019-02-14 16:17:50 · 2164 阅读 · 0 评论 -
webrtc QOS方法二(FEC实现(待续))
一、概述webrtc冗余打包方式有三种:Red(rfc2198)、Ulpfec(rfc5109)、Flexfec(草案)。其中Red和Ulpfec要成对使用。二、RedFEC简单将old报文打包到新包上。三、UlpFEC将old报文异或新包后,打包新包上。四、FlexFEC将old报文异或新包后,打包新包上。五、使能FECwebrtc默认使能Red+Ulp的FEC。Fle...转载 2019-02-14 15:56:37 · 1286 阅读 · 0 评论 -
Safari上使用WebRTC指南
自Apple首次向Safari添加WebRTC支持以来,已有一年多的时间了。鉴于WebRTC的差异和局限性,如何最好地开发Safari的WebRTC应用程序仍然存在许多问题。Chad是长期开源人员,也是FreeSWITCH产品的贡献者。他自2015年以来一直参与WebRTC的开发工作。他最近推出了MoxieMeet,一个在线体验活动的视频会议平台,在那里他担任首席技术官,并为这篇文章将展示他许多见...转载 2018-10-30 10:28:55 · 6174 阅读 · 0 评论 -
Kurento Media Server源码编译
Module dependency listKurento模块依赖关系并不是严格的线性关系,所以编译顺序可以有多种组合,以下是其中一种可能的编译顺序:Externals:gstreamerlibsrtpopenh264usrsctpjsoncppgst-plugins-basegst-plugins-goodgst-plugins-uglygst-plugins-badgs...原创 2018-11-16 09:27:16 · 1453 阅读 · 0 评论 -
基于WebRTC、Kurento的一种低延迟架构实现
前言在音视频领域,低延迟交互一直是一个非常重要的需求。而直播大多基于RTMP协议,其存在1到3秒左右的延迟,基本无法胜任低延迟交互的需求;另外在游戏领域、语音聊天、教育领域,低延迟也是一个非常重要的议题。下面以直播的连麦架构的设计来简单介绍下整个架构设计的演进流程。一、最朴素的连麦架构(基于RTMP)架构设计基于RTMP的连麦设计架构解析 连麦端A/B存在多平台特...转载 2018-11-30 15:03:09 · 702 阅读 · 0 评论 -
WebRTC Native 源码导读(十五):RTP H.264 封装与解封装
选择语言▼本文是 Piasy 原创,发表于 https://blog.piasy.com,请阅读原文支持原创 https://blog.piasy.com/2019/01/01/WebRTC-RTP-Mux-Demux/之前我在为 janus-pp-rec 增加视频旋正功能一文中简单介绍了一点 RTP 协议的内容,重点关注的是视频方向的 RTP header extension,这次我们更...转载 2019-01-14 15:01:39 · 1761 阅读 · 0 评论 -
webrtc QOS方法三(SVC实现)
一、概念SVC(可适性视频编码或可分级视频编码)是传统H.264/MPEG-4 AVC编码的延伸,可提升更大的编码弹性,并具有时间可适性(Temporal Scalability)、空间可适性(Spatial Scalability)及质量可适性(SNR/Quality/Fidelity scalability)三大特性,使视频传输更能适应在异质的网络带宽。二、概述SVC以AVC视频编解码...转载 2019-02-14 16:01:25 · 11602 阅读 · 1 评论