自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(85)
  • 收藏
  • 关注

原创 我眼中的webrtc

写这篇文章的初衷,是因为这段时间面试,不少面试官一开头就直接问:webrtc是干嘛的?然后就是稀稀拉拉的问一堆问题,相关性都不太大。自己回答也就东一块 西一块,缺乏对webrtc完整的理解。刚好自己趁这个时间整理下,也算个总结 webrtc是什么概念呢?我认为就一句话:标准化了rtc的通信流程和协议。自从2017年webrtc提交1.0版后,从2018年开始特别是去年,它本身一句成为实时通...

2020-03-26 12:46:45 842 1

原创 rtc中需要哪种拥塞算法

拥塞控制是网络传输的核心,基本定义就是确定带宽大小。关于带宽的计算,我觉得下面一张图描述的比较准确这幅图的意思是这样的1)带宽(BDP)=rtt*btlbwbtlbw 表示在网络中的瓶颈带宽,就是最小带宽2)inflight data表示正在传输的数数据 btlbuffsize 表示网络中所有路由器缓存大小总和3)数据传输消耗的带宽可以分为三个阶段inflight d...

2020-03-19 16:39:03 492

原创 这段时间打算写的博客

疫情呆在家刚好总结下这一年的经验教训,打算写完下面几篇文章 列个提供先督促一下自己1)MCU的设计方案2) SFU的设计方案3)网络拥塞的几种方案对比4)SDP内容咋子WEBRTC里的具体对应...

2020-02-11 18:58:32 252

原创 MCU设计方案

今天读到一篇关于音视频边缘计算的帖子音视频合成的云边缘计算实现文章里有两个要点1)边缘计算 具体功能有:流合成 录像 水印 送审等功能 这些多数设计到需要对媒体数据做处理2)作者再部署的部署方案是自己搭建IDC 这样会面临多线的问题 多线机房比单线机房要贵很多 ,所以核心就是吧计算节点放在单线机房 多线主机尽量只承担SFU的功能3)有个核心的问题:就是媒体数据怎么路由到MCU...

2020-02-06 12:24:38 1532

原创 某网校媒体后台实现猜测

疫情期间陪儿子上网课 顺道猜测了下后台的大概架构先上张网校截图,我标注了界面上大概的功能分区从界面分析,后台大概的数据分为以下几种1 主流 一般是代课老师的摄像头流2 辅助流 一般是带课老师电脑上课区的截屏 ,3 聊天区4 跨房价PK区5 其他富媒体 包括各种小游戏6 连麦 现在实现的连麦 只有音频连麦功能 完全能满足这种场景的需求7 答题网校...

2020-02-04 10:14:25 294

原创 licode中大小流方案

总体方案图如下大小流解决的核心是需要改造oneTomany,改造点如下publiser增加多个,并且要有角色之分,比如下Publiser m_BigPub;Publishe m_SmallPub;需要主要。在下面三个队列中,处于第一第二队列的一律用BIg的ssrc 赋值增加的subscreber要区分开,三个队列:大流 小流 大小流map<string,sub...

2019-07-26 17:39:27 787

原创 licode 的singlepc 模式是怎么回事?

最近在摸索webrtc 单机多流的情况,webrtc给出了标准planb的解决方法,在licode的forum中查找,已经明确表示不支持https://discourse.lynckia.com/t/typical-questions-for-licode/728第六条,表示在wip (work in progress)同时,licode提供了singlepc的模式,链接如下htt...

2019-05-10 15:32:07 890

转载 一个licode比较好的博客

licode博客

2019-02-15 17:40:30 1655

转载 Centos7升级gcc学习笔记

转载文章 Centos7升级gcc学习笔记

2019-02-14 16:51:59 1007

原创 centos 安装openssl的开发库命令

RedHat Fedora 平台 yum -y install openssl-devel Debian ,ubunu 平台 apt-get install libssl-dev  

2019-02-14 10:43:39 1794

转载 么理解p2p 打洞 stun ICE SDP rtp 协议之间的关系(四)

首先转载一篇文章webrtc在js层面的信令交互过程基本流程总结如下: 

2019-01-23 17:12:10 353

原创 怎么理解p2p 打洞 stun ICE SDP rtp 协议之间的关系(三)

放一张初步的Licode数据流图:这个只是数据从底层怎么流到上面的图,那么还有反方向的图在connection里有个有意思的函数:bool WebRtcConnection::createOffer(bool video_enabled, bool audioEnabled, bool bundle) { boost::mutex::scoped_lock lock(upda...

2019-01-17 17:04:14 618

原创 怎么理解p2p 打洞 stun ICE SDP rtp 协议之间的关系(二)

借用Licdoe的代码来分析下ICE的实现首先licode 用了两套ice库,不知道为啥,nicer 和Libnicer ,但感觉比较偏重于libnicer,所有着重以Libnice为主 二者分家的地方在 DtlsTransport类的构造函数中licode 的底层传输采用了dtls的协议,这块不着重分析,知道就可以了。下面开始第一个问题:ICE的线程模型ICE代码...

2019-01-16 17:39:09 1490

转载 怎么理解p2p 打洞 stun ICE SDP rtp 协议之间的关系

首先推几篇基础文章什么叫打洞打洞标准化协议-stun打洞应用标准化-ice信令服务-sip补充协议-turn总体来讲,ICE协议是个整合了各个以上各种协议的一个大集合,如果需要传输媒体数据,就是在数据阶段来封装对应的rtp流,具体如下1)ICE会收集备用的地址,包括三类host: 本地地址server reflect addreess: stun 服务器发出...

2019-01-11 15:34:48 2381

原创 licode(三):流媒体数据怎么转发

前端时间安装stun服务器,由于公司没有开外网的端口映射,所以没有搭建成功。但是单纯的stun服务器搭建成功了现在有两个问题:1)stun服务扮演什么角色?2)流媒体数据的传输方式3)erizo-controler的作用?首先回答问题2),上传一张wireshark的截图在这张图中,10.2.31.80是我搭建的Licode服务器,10.134.244.200是我本地的...

2018-11-28 14:07:45 2024 1

原创 licode(二):安装stun和turn服务器

webrtc本身需要搭建stun和turn服务器,经过挑选后选择stunman和coturn 两个服务器,安装步骤对应如下coturn服务器安装boost库安装STUN服务安装安装coturn服务的时候需要注意1)需要外网ip,如果没有外网ip ,我现在都无法安装成功,一直出现端口绑定错误,好像是和这个有关系,还没有最后确认2)conturn本身包括了stun 服务,如果不...

2018-11-08 17:03:31 1672

原创 licode(一)

调研了一个多月的webrtc 多人会议实现方式,最后选择Licode ,原因有二1)Licode的架构和我们视频通话的架构基本一致 nuve---controler----agent三级,中间通过mongodb来统一数据,实现分布式管理,和我们视频通话不同的是,它用了消息队列做微服务化,比我们现在的模型要先进。 2)licode相对是比较简单的,只有三次,mcu使用c++实现,这样就有可能...

2018-11-06 10:05:01 4537 1

原创 raknet 发送数据时

最近使用raknet 发送流媒体数据。发现在采用RELIABLE_ORDERED模式下,仍然有丢包发生,特别是在网络不好的情况下,测试了几天。猜测是由于底层拆包造成的。同事搜索这个问题,发现这个帖子http://blog.csdn.net/ycf8788/article/details/52817902果然是个坑。最简单的方法是上层拆小包发送。那么mtu选多大呢?raknet提

2017-07-29 12:01:49 1208

原创 tcpdump的两个抓包命令

总是忘记。记一下首先ifconfig获取网卡tcpdump -i eth0 host 127.0.0.1 and port 1935 -s 0 -w 1.captcudump udp port 19350

2017-07-19 08:54:39 1840

原创 storm学习(1)

准备在视频分享中引入storm实时分析数据。但是java从来没有学过。头大。记录下每一步。今天工作1)LINUX上折腾《storm分布式实时计算模式》里的第一个代码。不成功。主要原因是:代码太老了。用的是storm0.9.1版本,下载慢而且用的maven仓库,一脸黑。完全不知道怎么搞。头文件都找不到,也不知道怎么配置。放弃2)linux 上实在搞不懂。到window平台上配置ecpli

2017-05-10 17:03:30 274

原创 raw h264怎么判断是否有丢包?

这几天测试视频会议,比较卡,同事总觉的是服务器丢包,特意录了一个本地视频文件,通过目测后,觉得: 服务器丢包了。   程序员应该逻辑严谨。目测的方法不可靠。那么怎么能严谨的判断出是否有丢包呢?我们知道,1)通过时间戳。这个必须要通过一个外部封装格式。加上时间戳才可以。比如ts 或者flv2)对于裸的264数据,可以通过Elecard StreamEye Tools工具来分析。这个工具集

2017-02-22 18:59:41 2156 1

原创 对理解rtmp协议有用的几篇文章

点击打开链接  设置chunk size的作用。tranction id 的作用点击打开链接 比较完整的rtmp协议描述点击打开链接 理解不同逻辑连接的作用,包括chunk channel 。stream channel

2017-01-13 16:54:44 678

原创 rtmp 协议中对视频格式的封装

前面有一篇文章 http://blog.csdn.net/ddr77/article/details/52680120分析了对音频的封装。最近做项目,发现需要对视频做一些比较深的理解。这段数据代表了什么?04 表示0类型的chunk ,04表示音频或者视频数据。具体看下面000000 三个自己的时间戳00002f 数据长度,表示后面的msg长度,不包括这个头。09

2017-01-11 22:58:40 4686

原创 rtmp中数字的转换

在rtmp中,afm=0x00,表示的是数字,这个数字是用大端表示的,就是最重要的数放在了最低位上。wireshark截图如下00    表示数字4008000000000000  double类型的值,8个字节05 表示空符号null怎么翻译这个数为int类型呢?double的内存模型为最高位是0,表示正数。然后是11位的指数最后是52位的尾数。

2017-01-11 21:34:35 396

原创 rtmp 视频包中的大小端问题

最近在公司碰到一个问题。手机软编码上传,流可以正常播放。硬编就不行。tcpdump对比抓包,如下硬编 软编码一个字节一个字节对比。参考几片说rtmp对视频封装的文章点击打开链接发现在软编中。描述数据包产度的是00 17,换算成十字就是23个字节而硬编码中是 0e 00 ,换算过来是3584个字节。因为这是上传的第一个包,是传输sps和pps 的,通过

2016-12-10 11:46:30 763

转载 单机最大tcp连接数

原文链接 点击打开链接拷贝黏贴单机最大tcp连接数网络编程在tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三路握手后建立tcp连接。那么对单机,其最大并发tcp连接数是多少?如何标识一个TCP连接在确定最大连接数之前,先来看看系统如何标识一个tcp连接。系统用一个4四元组来唯一标识一个TCP连接:{local i

2016-12-03 09:09:47 348

转载 C++开源日志库选择

原文地址:点击打开链接拷贝念头每个系统都需要日志记录,通过日志方便排错调试,管理运行时的异常。而C++开源的日志库,待选的有 glog、log4cplus、log4cpp、log4cxx目前准备使用glog,使用方便,性能也不错,待进一步试验,如果有不能满足的功能就转用 log4cplus,功能很全面,不过稍复杂些。其它两个都是三年前就没更新,没

2016-11-28 17:20:58 5171

转载 NRedis-Proxy 高性能Redis 中间件服务

原文地址 :点击打开链接拷贝黏贴受飞凡电商技术负责人刘兵先生的独家授权,在csdn博客我原创发表《NRedis-Proxy 高性能Redis 中间件服务》的架构原理,以及项目开源介绍。一、 NRedis-Proxy 介绍NRedis-Proxy 是一个Redis中间件服务,第一个Java 版本开源Redis中间件,无须修改业务应用程序任何代码与配置,与业务解

2016-11-15 17:08:37 1283

转载 最权威的信用卡逾期是否可以修改的回答

这段时间要办贷款,查个人征信,突然发现自己有一条连续9个月超过90天的逾期。这绝对是进黑名单的。查看了账单,发现是因为银行利息原因造成的,于是给银行打电话要求修改,银行顺利同意了我的请求,网上唯一个比较权威的回答连接  点击打开链接拷贝粘贴在大家印象中,个人征信记录是没办法修改的,只能等还完款之后5年才会自动覆盖不良记录。但是我们又看到广告,有人说可以帮忙修改个人不

2016-11-11 11:26:59 2423

转载 linux下管道破裂的处理

管道破裂的原因解释如下点击打开链接拷贝黏贴我写了一个服务器程序,在Linux下测试,然后用C++写了客户端用千万级别数量的短链接进行压力测试.  但是服务器总是莫名退出,没有core文件.最后问题确定为, 对一个对端已经关闭的socket调用两次write, 第二次将会生成SIGPIPE信号, 该信号默认结束进程.具体的分析可以结合TCP

2016-11-11 10:29:28 6145

转载 ffmpeg处理RTMP流媒体的命令大全

原文链接 点击打开链接拷贝黏贴最近浏览国外网站时候发现,翻译不准确的敬请谅解。1、将文件当做直播送至live[plain] view plain copyffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName  

2016-11-10 15:41:56 479

原创 如何通过抓包抓出rtmp的完整留地址

1)首先t通过connect命令,抓到流id前面的部分。如图在connet命令里,tcurl就是前面的一部分。2)通过Play命令获取流id play的参数就是流id然后把这两个合起来就可以。

2016-11-10 15:12:24 20838

转载 srs 日志分析---spark

原文地址: 点击打开链接拷贝黏贴Spark分析SRS日志  本文描述了如何使用Spark分析SRS的日志,环境搭建参考HDFS和Spark,下载SRS实例日志。Cluster  HDFS和Spark的URI是hdfs://hdfs.winlin.cn:9000和spark://hdfs.winlin.cn:7077,集群的配置如下:S

2016-11-04 10:27:45 2218

原创 gdb 启动带参数的程序

怎么用gdb 启动带参数的程序?比如下面这样启东不行。答案是用set args如下就OK

2016-10-20 14:13:44 5311 1

转载 安卓弹幕实现

安卓的弹幕实现。很久以前用过的双缓存技术。纪念下我的mfc青葱岁月原文链接 点击打开链接拷贝黏贴大家好,感觉好像已经很久没更新博客了。前段时间主要是忙于新书的事情,时间比较紧张。而现在新书已经完稿,剩下的事情就都是出版社的工作了,那么我又可以抽出时间来写写博客了。记得之前有位朋友在我的公众号里问过我,像直播的那种弹幕功能该如何实现?如今直播行业确实是非常火爆啊,大大小

2016-10-20 09:32:02 711

原创 srs 如何集成rannet

编译的问题上一篇已经解决了。这篇主要解决如何在代码层面来整合。只是大概的框架。还没有完全成熟。1)增加属于udp的listener类代码为:struct IRakListenerHandler{ IRakListenerHandler(); ~IRakListenerHandler(); virtual int on_udp_connect(RakNetGUID guid

2016-10-19 15:19:06 899 1

原创 raknet的线程模型。

gdb运行一个最简单的raknet程序,断点以后,敲入 info threads,可以看到有三个线程在跑除了线程1的主线程外,还有其他两个线程,干什么的呢?由于只调用了一个startup函数,进入startup函数发现如下代码#if !defined(__native_client__) && !defined(WINDOWS_STORE_RT) for (i=0; i<sock

2016-10-18 16:12:29 822

原创 如何把raknet的库编译到srs里面

1)头文件的包括在需要的头文件里添加如下文件#include "RakPeerInterface.h"#include "RakPeerInterface.h"#include "RakNetTypes.h"#include "GetTime.h"#include "BitStream.h"修改./obj/Make文件,CORE_MODULE_INCS = -Isrc/co

2016-10-13 15:41:46 855

转载 raknet在Linux下的编译

原文地址点击打开链接 亲测有效拷贝黏贴1.编译成静态库。   g++ -c *.cpp   ar rc libraknet.a *.o   g++ -shared -O3 -fPIC -o libraknet.so.0.0.0 *.cpp2.将生成的库文件拷贝到系统库下  cp libraknet.so.0.0.0 libraknet.a /us

2016-10-13 10:31:56 958

原创 在网络不好的情况下如何通过rtmp命令自适应

主要考虑以下两种情况1)上传端网络波动比较大。2)收听端网络比较大。当主播网络波动到低点时,可以重新修改编解码参数到一个比较低的码率值,此时需要注意的是修改过对于的音视频数据的metadata,基头两-三个字节。但收听端网络不佳的时候,可以通知服务,只发关键帧或者干脆不发视频帧,只发音频帧,因为在视频会议中,音频的优先级别要大于视频的优先级别,不过。rtmp协议本身并不支持

2016-10-11 10:43:20 1402

空空如也

空空如也

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

TA关注的人

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