- 博客(53)
- 收藏
- 关注
原创 webrtc m76 simulcast代码片段
simucast同一个视频使用不同码率,帧率,宽高发送多个视频流,接收方可以根据选择接受那一个视频sdp表现: //simucast 直播多个流,可以使用不同码率,宽度高度帧率等参数,webrtc内部有一固定算法进行转化a=ssrc-group:SIM 2267484833 2714558033 2714558034如何设置:planb模式下: RTCOfferAnswe...
2019-09-28 17:52:03
1595
原创 sup-panb-unifiedplan
webrtc支持多流方式,分为planb(早期版本), unified plan支持2个视频流。1234,5678planb mid对应值video/audio。,所有的视频流应用一样的设置(在一个m下面)m=videoa=mid:video//多个ssrc区分多个流a=ssrc:1234 msid:xxxa=ssrc:5678 msid:xxxunified plan. mi...
2019-09-28 17:22:57
692
原创 webrtc(m76) video sender总结
一. class VideoSendStreamVideo模块 (video_send_stream.h,video_send_stream.cc)1.创建VideoStreamEncoderInterface. 用于对source进行编码。 2.创建VideoSendStreamImpl. 用于接收VideoStreamEncoderInterface编码后的视频数据。 ...
2019-09-21 19:06:39
2778
原创 webrtc视频设置最大码率
m76版本:webrtc_video_engine.cc 1. sdp b=AS:1234 sdp中设置的最大码率 int stream_max_bitrate = parameters_.max_bitrate_bps; 2. RtpSenderInternal设置的最大码率 RtpSenderInternal->setParamet...
2019-09-19 19:00:11
5208
原创 webrtc(m76) tracing学习
webrtc中的日志存在RTC_LOG系列,还存在tracing系列,今天分析tracing日志功能类,他附加的会打印出, 时间,线程id,进程id。默认情况下不会开启的,只有通过主动开启,才会生效。c++用法:#include “rtc_base/event_tracer.h”// 启动tracer模块,只有执行以后才会进行的打印rtc::tracing::SetupInternalT...
2019-09-17 10:59:06
1169
原创 webrtc twcc接收端代码分析(webrtc-m76)
接收端twcc主要功能就是通过fb通知发送端每一个rtp的接收时间。基本逻辑:当接收端接收到每一个rtp包的时候,记录当前的接受时间和包序号,然后按一定策略定时的发送到发送端,然后发送端可以根据的发送,接收时间统计延迟,为后续估算提供数据点。代码分析 remote_estimator_proxy.cc文件webrtc::RemoteEstimatorProxy类主要作用,保存窗口期的rtp包...
2019-09-01 17:21:10
3380
原创 webrtc-neteq音频抖动处理
音频包每个的打包间隔一样,假设打包间隔为20ms, 则1s产生50个包 (1000/20 )假设8k采样率,每个包就有160采样点 (80000/ 50 = 160)一. 网络延迟计算方式:计算最近延迟每次从队列中获取数据后,增加采样点计数,bufferQueue.pop(){mSampleNUm += 160;}每次向队列写数据的时候计算延迟,并清空mSampleNUm=0...
2019-05-08 11:53:33
1080
原创 ulpfec,flexFec,Pro-MPEG cop3协议对比
webrtc和FFmpeg中几种fec保护机制,几个通用的字段snbase: 保护的rtp包的开始seq.P|X|CC|M| :保护的rtp包第一字节n多个标志 xorpt recovery: 保护的rtp包的payloadtype xor值TS recovery: 保护的rtp包的timestamp xor值length recovery :保护的rtp包长度 xor 1. ULP...
2019-05-07 16:53:36
1894
原创 ulp-fec,flex-fec mask表解读
1. fec参数定义 struct FecProtectionParams { //fec冗余度 ,(fec_rate/255 * n) n个媒体包生成的fec包数量 int fec_rate; //支持的最大帧数量,当达到这么多数据帧的情况下必须生成一个fec包 ,这个参数可以不用考虑就是一个优化项 int max_fec_frames; //...
2019-05-05 12:59:27
3022
1
原创 webrtc音视频抖动缓冲区伪代码
webrtc jitterbufferrtp包几个时间值: 接收时间 ,发送时间,网络传输时间,网络延迟时间(网络排队)rtp包的接收时间 = sendtime + transferTimertp包的接收时间 = sendtime + transferTime + netdelayTime抖动缓冲区目的就是为了消除网络延迟对音视频的平滑播放造成的影响,如果没有抖动缓冲区,就可能播放的...
2019-04-08 11:01:25
9934
原创 webrtc-CongestionController
CongestionController网络拥塞控制主模块,综合了基于丢包估算和基于网络延迟估算方式进行的内部成员实例 // rtprtcp模块包装,适配到节拍器中 PacketRouter* const packet_router_; //发送节拍器 const std::unique_ptr<PacedSender> pacer_; //控制估...
2019-04-01 18:08:28
893
原创 webrtc-TransportFeedbackAdapter
TransportFeedbackAdapter发送端,用于处理接收端来的rtcp-transportCC信息,用于发送端计算基于延迟的估算码率 TransportFeedbackAdapter(RtcEventLog* event_log, Clock* clock, BitrateContro...
2019-04-01 18:08:02
1023
原创 webrtc-RemoteBitrateEstimatorSingleStream
CongestionController::WrappingBitrateEstimatorRemoteBitrateEstimatorSingleStream兼容以前老的基于延迟码率估算方式,接收端使用RemoteBitrateEstimatorSingleStream估算码率的,然后通过REMB反馈给发送端的估算方式,跟发送端估算方式是一致的 这结构体,保存的基于延迟的码率估算的相关结...
2019-04-01 18:07:37
743
原创 webrtc-RemoteEstimatorProxy
RemoteEstimatorProxy接收端使用RemoteEstimatorProxy,统计接收的报信息,然后进行feedback包的构建,并且触发发送。 继承于Module,有Process处理循环数据输入部分 void RemoteEstimatorProxy::IncomingPacket(int64_t arrival_time_ms, ...
2019-04-01 18:07:07
901
1
原创 webrtc-DelayBasedBwe
DelayBasedBwe基于接收端网络延迟,估算出的码率主要用的的成员: //计算帧间间隔 std::unique_ptr<InterArrival> inter_arrival_; //估算延迟的3中方法,卡尔曼滤波,基于斜率最小二乘,基于斜率的中值 std::unique_ptr<OveruseEstimator> kalman_estimator...
2019-04-01 10:35:57
1049
原创 webrtc-AimdRateControl
AimdRateControl 控制码率如何增减,及其数值根据网络状态,过载,欠载状态 更新内部码率控制状态机 增加码率,减少码率,保持码率根据实际接受码率的变化波动情况,计算码率的如何进行增加,减少,及其改变的量增加码率 : 前提假设码率正常变化符合正态分布,(1.) 如何变化在3西格玛内,进行加性增加(2.) 如何变化在3西格玛内,进行乘性增加减少码率 : 基本上就是当...
2019-03-29 18:37:07
1134
原创 webrtc-BitrateControllerImpl
bitrate_controller_impl1.主要是包装了 SendSideBandwidthEstimation2.适配了rtcp接收模块,把部分的rr,remb包信息输出到 SendSideBandwidthEstimation中3.基于延迟估算的带宽通过 OnDelayBasedBweResult设置进来4.加进去一个保留带宽,SendSideBandwidthEstimatio...
2019-03-29 10:04:01
609
原创 webrtc-SendSideBandwidthEstimation
SendSideBandwidthEstimation基于RTCP-RR包的,丢包进行码率估算综合基于延迟的码率,估算出目标码率这个是估算码率的最终输出类一. 基于延迟模块估算码率后调用此函数 ,用于(四.)的计算void UpdateDelayBasedEstimate(int64_t now_ms, uint32_t bitrate_bps);二. 接收端通过 rtcp...
2019-03-29 09:47:11
1398
2
原创 webrtc-PacedSender
PacedSender发送节拍器,控制发送的节奏,大概5ms一次,发送比较均匀使用的内部类PacedSender::IntervalBudget根据设置的码率,计算这个时间间隔(IncreaseBudget(delta_time_ms) 最大kWindowMs = 500)可以发送的字节数,随着时间流逝剩余可以发送的字节数也会变得越来越小 (1.)设置码率 voi...
2019-03-28 18:20:14
775
原创 webrtc-AlrDetector
网络受限探测器,探测最近一段时间的发送码率跟预测的码率关系<%60 开始设置受限标志,开始时间值%60 -%70 保持不变>%70 清除受限标志1.设置预测码率void SetEstimatedBitrate(int bitrate_bps)用于更新统计码率,比较 void OnBytesSent(size_t bytes_sent, int64_t now_m...
2019-03-28 18:00:18
1072
原创 webrtc-PacketRouter
PacketRouter这个比较简单就是数据发送的出口吧组合了一组RtpRtcp模块,进行数据的发送控制AddRtpModule() ;RemoveRtpModule()控制发送rtp 有效包TimeToSendPacket();控制发送rtp pad包,填充垃圾数据,用于达到一定码率TimeToSendPadding();发送rtcp.fb包 tracportC...
2019-03-28 17:59:41
504
原创 webrtc-RateStatistics
计算窗口期的码率, 通过update累加count,然后除以采样的窗口期时间 , (accumulated_count_/window_size_ms) * scale创建对象 //window_size_ms: 统计窗口大小 //scale : 计算结果,缩放因子 RateStatistics(int64_t window_size_ms, float scale)更新采样点...
2019-03-28 10:50:56
367
原创 webrtc-InterArrival
为了计算2帧/组数据之间的传输时间延迟(发送端时间戳差,接收端接收时间差),传输字节大小差可能网络设备会把多个包聚合到一起进行发送的问题构造 // timestamp_group_length_ticks:时间戳间隔少于这个值,表示是一组数据 // timestamp_to_ms_coeff: 时间戳到ms的转化系数 // enable_burst_grouping: 是否根据接收时...
2019-03-27 18:13:05
699
原创 webrtc-OveruseDetector
网络状态探测器,用于探测网络当前状态一. 探测网络状态过载了 网络负荷比较大,需要减少流量正常状态欠载 网络负荷比较小,可以加大流量–// ts_delta:2帧发送的相对延迟// num_of_deltas: 计算offset的点的个数// now_ms:当前时间点BandwidthUsage Detect(double offset,double t...
2019-03-27 15:33:18
748
原创 webrtc-MedianSlopeEstimator
webrtc中网络排队,基于趋势中值算法(MedianSlopeEstimator),用于推测网络的延迟趋势,延迟值。用于计算直线 y=ax+b创建对象// window_size:窗口大小,最多这多点// threshold_gain:MedianSlopeEstimator(size_t window_size, double threshold_gain):median_f...
2019-03-27 10:03:11
384
原创 webrtc-TrendlineEstimator
webrtc网络排队趋势推测器(TrendlineEstimator),用于推测网络的延迟趋势,延迟值。用于计算直线 y=ax+b创建// window_size: 窗口大小,数据点数组的大小,如果数据过多则删除老的数据// smoothing_coef :平滑输入y的因子 , (使用滑动平滑算法,相当把 1/smoothing_coef 个数据点进行 行平均 )// t...
2019-03-26 20:01:09
1216
原创 webrtc PercentileFilter类
排序数列,并获取指定百分比位置的数值这个类没有限制的数列的最大大小,需要注意不时的Erase,防止数列爆了template< typename T>class PercentileFilter { // percentile: GetPercentileValue函数返回这个位置的值 **PercentileFilter(float percentile);** /...
2019-03-20 14:10:10
523
原创 c语言##连接符号使用
1. ## 连接2个符号组成一个新的符号#define A "hello "#define B “world”#define C(a,b) a##b//testStr=“hello world”const char testStr= C(A,B);2. # 转字符串#define TOSTRING(a) #a#define A hello#define B...
2019-02-07 08:35:33
9832
原创 mac加载路径@rpath
1.xcode设置dylib的安装目录a.dylib 设置Build Settings/Installation Directory 模块的安装目录命令行 otool -L a.dylib 可以查看2.xcode设置app rpatha.APP Build Settings/ Runpath Search Paths3. 更改路径命令行install_name_path @...
2019-01-25 14:08:32
6564
原创 使用jsoncpp写中文乱码的坑
1. 问题描述当使用老版本jsoncpp写中文,使用新版本的读取,就会乱码。2. jsoncpp 源码地址:https://github.com/open-source-parsers/jsoncpp.git3. 字节流类型string-escape 对二进制的字节流,unicode-escape unicode码点值流4. GitHub上的提交记录Revision: 42a...
2019-01-11 13:58:10
6143
原创 获取可执行文件路径
mac:#include <mach-o/dyld.h>_NSGetExecutablePathwindow:GetModuleFileName(NULL, )
2018-08-28 18:35:48
975
原创 adb常用指令
1. adb通过网络连接远程的android adb connect 192.168.1.1002.显示已经连接的设备adb devices3. 关闭本地的adb-server(所有连接上的device连接关闭 tcp)adb kill-server4.安装apk, 切换到apk目录下adb install -r xxx.apk5. 启动apk ,主目录下的MainAct...
2018-08-27 14:41:30
154
原创 ndk编译native代码参数pie
今天用 ndk-build编译native代码出现莫名其妙的错误android-ndk-r14b: 重点内容 编译静态库: LOCAL_CFLAGS += -pie -fPIE LOCAL_LDFLAGS += -pie -fPIE 重点内容依赖上面静态库的动态库: LOCAL_CFLAGS += -pie
2018-04-11 19:56:53
1248
原创 如何查看模块依赖
假设可执行文件 test 假设动态库 sharedwindow: depends.exe (老版本vs带此工具) macox: 查看依赖的动态库 otool -L test 可以查看 @rpath路径 LC_RPATH , 用这个路径替换动态库的@rpath otool -l test linux: ldd -v test rea
2018-04-10 19:52:47
1314
原创 breakpad库编译
breakpad下载编译1. breakpad是什么,能干什么google开源的一整套的进程crash处理方案, 包括crash采集,符号的提取,dump的上传服务器,dump 的分析。2. breakpad如何下载下载chromium工具集 depot_tools,google的好多源码的下载编译都用它的。git地址 https://chromium.googlesource.com/chrom
2018-04-08 07:37:10
2204
原创 git-server安装
ubuntu16 安装git server安装git sudo git apt-get install git创建用户git sudo adduser git创建免密证书登陆(不是必须的) /home/git/.ssh/authorized_keys 创建.ssh目录,和authorized_keys文件。 authorized_keys文件保存需要免密登陆的客户端的公钥 id_rs
2017-12-17 19:36:14
524
原创 android __gnu_mcount_nc问题解决
android __gnu_mcount_nc问题解决问题: 假设下面的gcc指向 android工具链的gcc , sysroot指向对应平台版本的库,头文件路径gcc -pg main.c –sysroot=’android-platform…’undefined reference to ‘__gnu_mcount_nc’我没有调用这个 _gnu_mcount_nc函数 ,赠么会提示__
2017-12-08 15:04:29
1242
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人