- 博客(228)
- 资源 (4)
- 收藏
- 关注
原创 RTX包webrtc处理
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+...
2019-10-22 10:57:22
1008
原创 webrtc中BBR算法源码分析
从哪里开始讲起呢?还是从收到transport feedback报文开始讲起吧。如下NetworkControlUpdate BbrNetworkController::OnTransportPacketsFeedback( TransportPacketsFeedback msg) { Timestamp feedback_recv_time = msg.feedback_t...
2019-10-20 21:51:11
2985
1
转载 webrtc中SDP解释
WebRTC SDP 的协议解释。全局描述o=- 4611731400430051336 2 IN IP4 127.0.0.1第一个数字4611731400430051336是会话唯一标志 第二个数字2是会话的版本,当会话有新的协商或者应答时,例如(例如保持,编解码器更改,添加删除媒体轨道)的时候 IN IP4 127.0.0.1这段描述的是创建SDP的网络IP和类型,与协商无...
2019-10-17 21:38:08
2825
转载 rtp头扩展audio level作用
// RTP允许扩展首部,这里表示采用了RFC6464定义的针对audio的扩展首部,用来调节音量,比如在大型会议中,有多个音频流,就可以用这个来调整音频混流的策略// 这里没有vad=1,表示不启用这个音量控制a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level...
2019-10-16 21:49:28
1935
原创 mediaSoup总体架构分析
先来张总体架构图吧,从官网拿的,根据这个图来分析下A worker represents a mediasoup C++ subprocess that runs in a single CPU core and handlesRouterinstances.可以看到每个worker相当于一个sfu,核心转发逻辑是router,下面我们来分析下这个routerA router ...
2019-10-16 15:59:54
3299
1
原创 mediaSoup源码分析-ICE流程
其实很简单,直接放源码吧inline void WebRtcTransport::OnStunDataReceived( RTC::TransportTuple* tuple, const uint8_t* data, size_t len){ MS_TRACE(); RTC::StunPacket* packet = RTC::StunPacket::Parse(dat...
2019-10-16 15:18:06
1735
原创 mediaSoup源码分析-dtls操作
dtls主要用来交换srtp的#在ICE完成后,开始dtls过程 void WebRtcTransport::MayRunDtlsTransport() { MS_TRACE(); // Do nothing if we have the same local DTLS role as the DTLS transport. // NOTE: local role in...
2019-10-16 12:38:48
1912
原创 mediaSoup 源码分析-srtp操作
srtp操作还是比较简单的#srtp sesssion创建 SrtpSession::SrtpSession(Type type, Profile profile, uint8_t* key, size_t keyLen) { MS_TRACE(); srtp_policy_t policy; // NOLINT(cppcoreguidelines-pro-type-mem...
2019-10-16 11:25:03
2040
1
原创 mediaSoup 源码分析-Stun packet处理
#对着协议看代码就已经很清晰了。#stun packet 包头// 0 1 2 3// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1// +-+-+-+-+-+-+-+-+-+-+...
2019-10-16 10:01:20
990
转载 flv aac 转成adts aac流
转自:https://blog.youkuaiyun.com/zz460833359/article/details/863049221.ADTS是个啥ADTS全称是(Audio Data Transport Stream),是AAC的一种十分常见的传输格式。记得第一次做demux的时候,把AAC音频的ES流从FLV封装格式中抽出来送给硬件解码器时,不能播;保存到本地用pc的播放器播时,我靠...
2019-10-11 14:46:09
905
原创 nginx 在mac下安装使用记录
1. 安装brew install nginx2.起停brew services start nginxbrew services stop nginxbrew services reload nginx3.配置文件位置/usr/local/etc/nginx
2019-10-10 13:54:50
162
转载 rtcp 关键帧请求总结
第一类:关键帧请求主要包括SLI/PLI/FIR,作用是在关键帧丢失无法解码时,请求发送方重新生成并发送一个关键帧。这本质是一种重传,但是跟传输层的重传的区别是,它重传是最新生成的帧。PLI 是Picture Loss Indication,SLI 是Slice Loss Indication。发送方接收到接收方反馈的PLI或SLI需要重新让编码器生成关键帧并发送给接收端。...
2019-10-10 10:23:06
4927
1
转载 janus 在mac 上安装
参考:https://blog.youkuaiyun.com/glw0223/article/details/86736505解决如下:./configure --prefix=/usr/local/janus --enable-post-processing PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig:/usr/local/opt/...
2019-10-07 19:20:32
846
翻译 opus rtp format 学习比较
#opus rtp timestamp不管编码时间是多少采样率。opus rtp时间戳统一 是4800增长。Opus supports 5 different audio bandwidths, which can be adjusted during a call. The RTP timestamp is incremented with a 48000 Hz cloc...
2019-10-06 16:10:56
1651
原创 ffmpeg avcodec_open2 内存泄漏问题
发现ffmpeg一个问题,欢迎大家讨论指正,也许改的不是很优美。问题描述:==4830== 40 bytes in 1 blocks are still reachable in loss record 1 of 1==4830== at 0x4C2FFC6: memalign (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.
2017-12-21 15:54:59
4043
1
原创 webrtc发送端带宽预测
当接收侧感知到2-10%丢包率,发送端的预测值不变。当实际丢包率超过预测值10%时,新的预测值可更新为As_hat(i)= As_hat(i-1)(1-0.5p),其中p为丢包率。当实际丢包率小于2%时预测时可更新为As_hat(i)= 1.08(As_hat(i-1))+0.5+1000,其中p为丢包率。其中p是rtcp里的丢包率void SendSideBandwidthEstimatio
2017-10-27 18:26:54
2716
翻译 quic的流控算法
前提quic提供流和连接维度的流控算法。一端发送WINDOW_UPDATE帧通知对端增加流控窗口大小,当有数据但是无法发送时发送BLOCKED帧通知对端。 一个很好的例子是,一个具有限制内存的server,它需要一种机制控制每个发送给它的客户端的数据量,从而控制内存使用。面向流的流控stream的流控算法简单的说就是,各端需要告诉对方在连接上我想收多少数据。 在quic里,流控就是通知我想收多少
2017-10-26 15:07:11
3571
翻译 QUIC FEC v1
QUIC FEC v1背景前向纠错算法(FEC)可以传输多余的数据,在网络丢包的情况下,为网络传输提供稳定性。quic是基于XOR实现FEC的,这种算法简单,快速,能提供N+1的稳定传输。
2017-10-25 10:49:41
2161
原创 webrtc 接收packt包后处理
逻辑上讲,webrtc收到rtp包以后,是组帧操作。也就是packet到frame。注意rtp包的封包形式,stapA FU-A,单一单元组合包。可以参考http://blog.youkuaiyun.com/jwybobo2007/article/details/7054140
2017-10-24 18:42:29
1051
原创 老版本quic如何做fec
fec在quic新版本中废弃了,据官方说法,在大部分情况下,作用不大。fec从本质上讲是基于冗余的,会浪费带宽。只能恢复随机丢包。大块丢包也无能为力。不过,quic实现还是代表了一种十分优美的方案,算法简单实用。quic fec 只能恢复fecgroup里一个包比如: 10个包+加上一个fec包接收端:fec包。fecqroup记录这个,初始化为第一个接受到的g
2017-10-24 10:16:33
2200
原创 quic如何做路径mtu探测的
路径mtu探测在基于udp的程序中很有用,如果大了,会引起ip层分片,导致容易丢包。小了,网络利用率不高。quic做mtu探测是根据,可以设置ip层包不分片来做的。如果超过了mtu大小会丢失。所有工作是在定时器里做的,封装为ping包while(condition){ send current_mtu_pkg_size //定时器做的 if(error)
2017-10-23 12:07:42
2594
原创 live555 singleStep 分析
最近看了看live555代码,看到这部分随手写下来做个记录1. live555是用的select模型2. 在处理函数里做了多种操作处理各个socket上事件,回调函数 处理延迟队列,和队列上的事件处理triggerEvent个人见解:感觉这个模型太累了,都是在一个线程里干,效率必定低void BasicTaskScheduler::Single
2017-07-01 17:56:02
1555
转载 cmake使用
CMake使用总结总结CMake的常用命令,并介绍有用的CMake资源。CMake意为cross-platform make,可用于管理c/c++工程。CMake解析配置文件CMakeLists.txt生成Makefile,相比直接用Makefile管理工程,CMake更灵活和简单。简单的例子一个完整的Demo可参考这里。假设当前目录的结构为
2016-04-23 21:08:23
599
转载 python 创建httpserver
from: http://www.lifeba.org/arch/python_http_simplehttpserver_basehttpserver_cgihttpserver.htmlPython的“Web服务器模块”有如下三种一、SimpleHTTPServer:包含执行GET和HEAD请求的SimpleHTTPRequestHandler类。通过下面命令我们创建了HT
2016-04-22 11:13:07
3005
转载 darwin Stream Server源码分析
摘要 所谓的流式媒体简单的讲就是指人们通过网络实时的收看多媒体信息:如音频流、视频流等。与流式媒体对应的传统工作方式是下载+播放模式,即用户首先下载多媒体文件,然后再在本地播放,这种方法的一个主要缺点是启动延迟较大,例如一个30分钟长的MPEG-I文件(相当于VCD质量),即使使用1.5Mbps的速率下载,也需要半个小时才能完成,这样一个漫长的等待时间实在是无法忍受。在窄带网络环境中,几乎所有基
2016-04-08 18:47:26
1397
转载 内存泄漏查找c++ new delete
#include #include struct MemIns{ void *pMem; int m_nSize; char m_szFileName[256]; int m_nLine; MemIns *pNext;};class MemManager{public: MemManager(); ~Mem
2016-04-05 18:52:54
1413
转载 linux backtrace追踪错误调用
一般察看函数运行时堆栈的方法是使用GDB(bt命令)之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序出错时打印出函数的调用堆栈是非常有用的。在glibc头文件"execinfo.h"中声明了三个函数用于获取当前线程的函数调用堆栈。int backtrace(void **buffer,int size) 该函数用于获取当前线程的调用堆栈
2016-04-05 17:45:00
1719
转载 elf文件格式说明
1.ELF文件格式概貌readelf -h查看elf文件头部信息可以看到Type值有三种:REL,EXEC,DYN。REL文件是只被编译没有被链接过的文件,其格式属于左边一种,elf header+section1,2,3...+section header table,每个section对应一个section header table entry,section header
2016-04-05 15:53:45
1653
转载 c++ new 重载
转自:#include #include void * operator new(size_t unSize){ printf("operator new called\n"); return malloc(unSize);}void * operator new[](size_t unSize){ printf("operator [] called
2016-03-15 20:47:02
1124
转载 new new[] 重载
内存管理运算符 new、new[]、delete 和 delete[] 也可以进行重载,其重载形式既可以是类的成员函数,也可以是全局函数。一般情况下,内建的内存管理运算符就够用了,只有在需要自己管理内存时才会重载。重载 new 有两种形式://以类的成员函数的形式进行重载void * 类名::operator new ( size_t size ){ //TODO:}和
2016-03-15 20:40:03
1061
转载 在应用程序中替换Linux中Glibc的malloc的四种方法
转自:http://www.xuebuyuan.com/2223733.html打算优化系统的内存分配,接管glibc提供的内存管理,但是整个工程的代码量很大,使用malloc、realloc、calloc和free的地方到处都是,如果自己写好的接口需要重命名所有的调用,先不说工作量,部分没有权限查看代码的.a文件就搞不定了。所以需要
2016-03-15 20:25:36
2145
转载 memcheck c/c++内存泄漏检测
系统编程中一个重要的方面就是有效地处理与内存相关的问题。你的工作越接近系统,你就需要面对越多的内存问题。有时这些问题非常琐碎,而更多时候它会演变成一个调试内存问题的恶梦。所以,在实践中会用到很多工具来调试内存问题。在本文中,我们将讨论最流行的开源内存管理框架 VALGRIND。摘自 Valgrind.org:Valgrind是用于构建动态分析工具的探测框架。它包括一个工具集
2016-03-15 20:08:40
1161
转载 使用ld的wrap选项替换已有库函数
使用ld的wrap选项替换已有库函数很多时候,可能需要替换已有库函数,或者对其库函数进行修改。为了避免对那些静态链接库或者动态链接库文件大动干戈,我们可以使用ld提供的–wrap选项。例如,想把所有的malloc函数都作修改,以便让malloc出的内存都是32字节对齐的。我们可以给ld传选项“wrap=malloc”, 告诉ld,我们将替换名称为malloc
2016-03-15 19:18:48
983
转载 rtp over tcp
转自:http://blog.youkuaiyun.com/evsqiezi/article/details/22881151Normally, RTSP provide streaming over UDP. By nature, UDP is a better choice as it provides robust streaming capability for media. However,
2016-03-13 12:17:24
1891
1
转载 并发服务器模型(收藏)
转自 http://blog.youkuaiyun.com/yusiguyuan/article/details/17591613一、3点基础知识1、一个主机的端口号为所有进程所共享,但普通用户进程绑定不了一些特殊端口号如20、80等。 2、每个进程都有自己的文件描述符(包括file fd, socket fd, timer fd, event fd, signal fd),一
2016-03-13 11:32:32
514
二叉树的创建 遍历 交换子树
2008-12-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人