自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(226)
  • 资源 (4)
  • 收藏
  • 关注

原创 udp epoll服务器的设计

在做udp服务器的时候,如何处理来自多个连接的udp请求呢?本文介绍udp+epoll服务器的网络框架设计方法

2022-11-20 21:55:52 908 1

原创 ffmpeg编程-音量调节

ffmpeg编程,实现音量调节功能

2022-05-29 19:35:52 2002

原创 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 944

原创 webrtc中BBR算法源码分析

从哪里开始讲起呢?还是从收到transport feedback报文开始讲起吧。如下NetworkControlUpdate BbrNetworkController::OnTransportPacketsFeedback( TransportPacketsFeedback msg) { Timestamp feedback_recv_time = msg.feedback_t...

2019-10-20 21:51:11 2844 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 1533

转载 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 1831

原创 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 3206 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 1618

原创 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 1793

原创 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 1872 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 760

转载 flv aac 转成adts aac流

转自:https://blog.csdn.net/zz460833359/article/details/863049221.ADTS是个啥ADTS全称是(Audio Data Transport Stream),是AAC的一种十分常见的传输格式。记得第一次做demux的时候,把AAC音频的ES流从FLV封装格式中抽出来送给硬件解码器时,不能播;保存到本地用pc的播放器播时,我靠...

2019-10-11 14:46:09 809

转载 mediasoup 安装配置

参考https://www.twblogs.net/a/5cd1f489bd9eee67a77ee67d

2019-10-10 14:33:02 1291

原创 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 129

转载 rtcp 关键帧请求总结

第一类:关键帧请求主要包括SLI/PLI/FIR,作用是在关键帧丢失无法解码时,请求发送方重新生成并发送一个关键帧。这本质是一种重传,但是跟传输层的重传的区别是,它重传是最新生成的帧。PLI 是Picture Loss Indication,SLI 是Slice Loss Indication。发送方接收到接收方反馈的PLI或SLI需要重新让编码器生成关键帧并发送给接收端。...

2019-10-10 10:23:06 4644 1

转载 janus 在mac 上安装

参考:https://blog.csdn.net/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 717

翻译 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 1511

原创 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 3676 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 2641

翻译 quic的流控算法

前提quic提供流和连接维度的流控算法。一端发送WINDOW_UPDATE帧通知对端增加流控窗口大小,当有数据但是无法发送时发送BLOCKED帧通知对端。 一个很好的例子是,一个具有限制内存的server,它需要一种机制控制每个发送给它的客户端的数据量,从而控制内存使用。面向流的流控stream的流控算法简单的说就是,各端需要告诉对方在连接上我想收多少数据。 在quic里,流控就是通知我想收多少

2017-10-26 15:07:11 3380

翻译 QUIC FEC v1

QUIC FEC v1背景前向纠错算法(FEC)可以传输多余的数据,在网络丢包的情况下,为网络传输提供稳定性。quic是基于XOR实现FEC的,这种算法简单,快速,能提供N+1的稳定传输。

2017-10-25 10:49:41 1988

原创 webrtc 接收packt包后处理

逻辑上讲,webrtc收到rtp包以后,是组帧操作。也就是packet到frame。注意rtp包的封包形式,stapA FU-A,单一单元组合包。可以参考http://blog.csdn.net/jwybobo2007/article/details/7054140

2017-10-24 18:42:29 978 1

原创 老版本quic如何做fec

fec在quic新版本中废弃了,据官方说法,在大部分情况下,作用不大。fec从本质上讲是基于冗余的,会浪费带宽。只能恢复随机丢包。大块丢包也无能为力。不过,quic实现还是代表了一种十分优美的方案,算法简单实用。quic fec 只能恢复fecgroup里一个包比如: 10个包+加上一个fec包接收端:fec包。fecqroup记录这个,初始化为第一个接受到的g

2017-10-24 10:16:33 2075 1

原创 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 2420

原创 live555 singleStep 分析

最近看了看live555代码,看到这部分随手写下来做个记录1. live555是用的select模型2. 在处理函数里做了多种操作处理各个socket上事件,回调函数        处理延迟队列,和队列上的事件处理triggerEvent个人见解:感觉这个模型太累了,都是在一个线程里干,效率必定低void BasicTaskScheduler::Single

2017-07-01 17:56:02 1456

转载 cmake使用

CMake使用总结总结CMake的常用命令,并介绍有用的CMake资源。CMake意为cross-platform make,可用于管理c/c++工程。CMake解析配置文件CMakeLists.txt生成Makefile,相比直接用Makefile管理工程,CMake更灵活和简单。简单的例子一个完整的Demo可参考这里。假设当前目录的结构为

2016-04-23 21:08:23 575

转载 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 2941

转载 darwin Stream Server源码分析

摘要 ​所谓的流式媒体简单的讲就是指人们通过网络实时的收看多媒体信息:如音频流、视频流等。与流式媒体对应的传统工作方式是下载+播放模式,即用户首先下载多媒体文件,然后再在本地播放,这种方法的一个主要缺点是启动延迟较大,例如一个30分钟长的MPEG-I文件(相当于VCD质量),即使使用1.5Mbps的速率下载,也需要半个小时才能完成,这样一个漫长的等待时间实在是无法忍受。在窄带网络环境中,几乎所有基

2016-04-08 18:47:26 1354

转载 内存泄漏查找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 1364

转载 linux backtrace追踪错误调用

一般察看函数运行时堆栈的方法是使用GDB(bt命令)之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序出错时打印出函数的调用堆栈是非常有用的。在glibc头文件"execinfo.h"中声明了三个函数用于获取当前线程的函数调用堆栈。int backtrace(void **buffer,int size) 该函数用于获取当前线程的调用堆栈

2016-04-05 17:45:00 1676

转载 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 1397

转载 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 1076

转载 new new[] 重载

内存管理运算符 new、new[]、delete 和 delete[] 也可以进行重载,其重载形式既可以是类的成员函数,也可以是全局函数。一般情况下,内建的内存管理运算符就够用了,只有在需要自己管理内存时才会重载。重载 new 有两种形式://以类的成员函数的形式进行重载void * 类名::operator new ( size_t size ){ //TODO:}和

2016-03-15 20:40:03 997

转载 在应用程序中替换Linux中Glibc的malloc的四种方法

转自:http://www.xuebuyuan.com/2223733.html打算优化系统的内存分配,接管glibc提供的内存管理,但是整个工程的代码量很大,使用malloc、realloc、calloc和free的地方到处都是,如果自己写好的接口需要重命名所有的调用,先不说工作量,部分没有权限查看代码的.a文件就搞不定了。所以需要

2016-03-15 20:25:36 2055

转载 memcheck c/c++内存泄漏检测

系统编程中一个重要的方面就是有效地处理与内存相关的问题。你的工作越接近系统,你就需要面对越多的内存问题。有时这些问题非常琐碎,而更多时候它会演变成一个调试内存问题的恶梦。所以,在实践中会用到很多工具来调试内存问题。在本文中,我们将讨论最流行的开源内存管理框架 VALGRIND。摘自 Valgrind.org:Valgrind是用于构建动态分析工具的探测框架。它包括一个工具集

2016-03-15 20:08:40 1104

转载 使用ld的wrap选项替换已有库函数

使用ld的wrap选项替换已有库函数很多时候,可能需要替换已有库函数,或者对其库函数进行修改。为了避免对那些静态链接库或者动态链接库文件大动干戈,我们可以使用ld提供的–wrap选项。例如,想把所有的malloc函数都作修改,以便让malloc出的内存都是32字节对齐的。我们可以给ld传选项“­­wrap=malloc”, 告诉ld,我们将替换名称为malloc

2016-03-15 19:18:48 925

转载 rtp over tcp

转自:http://blog.csdn.net/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 1822 1

转载 并发服务器模型(收藏)

转自 http://blog.csdn.net/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 479

转载 TCP TimeWait状态详解(比较全)

转载自:http://blog.chinaunix.net/uid-20384806-id-1954363.htmlTIME_WAIT状态 TCP要保证在所有可能的情况下使得所有的数据都能够正确被投递。当关闭一个 socket 连接时,主动关闭一端的 socket 将进入TIME_WAIT状态,而被动关闭一方则转入CLOSED状态。见图解。 当一个socket关

2016-02-23 20:52:44 4102

转载 B*树介绍

B树       即二叉搜索树:       1.所有非叶子结点至多拥有两个儿子(Left和Right);       2.所有结点存储一个关键字;       3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;       如:              B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,

2016-02-21 21:40:28 449

rtmp协议抓包分析

rtmp协议抓包分析

2015-01-17

若干qt相关论文集,QT程序

对QT的同学很有帮助,可以参考一下 qt是c++界面库,开源,跨平台

2010-05-06

流媒体服务器提供流媒体服务

好用的流媒体服务器好用的流媒体服务器好用的流媒体服务器好用的流媒体服务器好用的流媒体服务器好用的流媒体服务器好用的流媒体服务器

2010-01-27

二叉树的创建 遍历 交换子树

编写采用二叉链表形式存储的二叉树的创建、先序、中序、后序和按层遍历的算法。 2 编写将一棵二叉树的所有左右子树进行交换的算法。 提示:验证是否交换可以调用二叉树的遍历算法,比较输出结点序列。 3 编写一个主函数,将上面函数连在一起,构成一个完整的程序。 4 调试并运行实验源程序。

2008-12-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除