自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

云上听风的博客

以前c++为主,现在喜欢golang。 简书同步更新:https://www.jianshu.com/u/563117ad2863

  • 博客(60)
  • 收藏
  • 关注

原创 WebRTC offer - answer交换sdp流程分析

被WebRTC自带oc版本的例子恶心到了,不做笔记还真不行。两端开启音视频通讯时,一方做为offer主动发出邀请,另一方做为answer被动等待offer的邀请做出反应。 代码中的流程:Offer:1. offerForConstraints,得到sdp后回调 <第1.1步>。 1.1. didCreateSessionDescription,如果有错直接返回...

2018-05-16 19:08:57 6748 1

原创 开源MQTT broker服务器gomq开发进度

前几天因为研究开源NATS服务器gnatsd和开源半成品MQTT服务器surgemq以及对mosquitto的不满诞生了自己编写golang版开源MQTT broker服务器的想法,但是工作很忙所以只能搁浅计划,不过还是忍不住花了一天时间把surgemq的mqtt协议合并进gnatsd,新开源项目暂时起名gomq。目前gomq对qos0/qos1/qos2都支持,不支持数据持久化,去掉了sur...

2018-05-08 20:57:39 3698 1

原创 MQTT标准文档QOS等级容易理解错和surgemq QOS等级的BUG

MQTT SUBSCRIBE 英文原版: 3.8 SUBSCRIBE - Subscribe to topics 3.8.4 Response When the Server receives a SUBSCRIBE Packet from a Client, the Server MUST respond with a SUBACK Packet [MQTT...

2018-05-08 15:05:11 2500

原创 WebRTC源码分析之RTP/RTCP(二)

WebRTC中RTP和RTCP共用一个UDP端口WebRTC中的RTP和RTCP都使用udp传输,并且RTP和RTCP混合使用同一个udp端口,因为打通NAT本来就不是一件容易的事,如果还分开两个端口的话更增加程序复杂度和NAT打洞成功的难度。WebRTC怎么区分RTP/RTCP包webrtc/call/call.cc:PacketReceiver::Deliver...

2018-05-08 12:58:20 1586

原创 WebRTC源码分析之RTP/RTCP(一)

首先学习一下RTP/RTCP的基础知识。RTP/RTCP协议RTP报头当没有CSRC时RTP报头一共12个字节。 报头格式如下: 版本号(V):2比特,用来标志使用的RTP版本,当前协议版本号为2。 填充位(P):1比特,如果P=1,则在该报文的尾部填充一个或多个额外的八位组,它们不是有效载荷的一部分。 扩展位(X):1比特,如果X=1,RTP固定头部后面就跟有一个...

2018-05-08 12:57:41 1236

转载 RFC3550 RTP 中文版(转载)

原文地址:RFC3550 RTP 中文版英文版原文:RFC3550英文版 - RTP: A Transport Protocol for Real-Time Applications字符描述的表格不对齐懒得换成截图,所以还是请参看英文原版表格。转载过来后修改了一部分错别字。这个翻译的中文版不全。RTP:实时应用程序传输协议 摘要 本文描述RTP(real-time tran...

2018-05-08 12:57:08 1349

原创 WebRTC源码分析之IOS Audio Unit

本来没想要写这篇,毕竟不是什么关键技术,但是实在是因为苹果的文档和API实在太烂了,网上关于Audio Unit的文章也太少,写下来就算当个笔记。WebRTC与声音设备有关的代码在modules/audio_device目录下面,包括各个平台的录音采集和播放声音的代码。 其中windows上的使用了Core Audio API。 Core Audio API 应该是Vista之后才支持的A...

2018-05-07 22:09:17 2097 1

原创 gnatsd集群原理分析

看了一天gnatsd集群相关的源码差点没把我给绕晕,总算是搞个大体明白了,最近功力暴涨,哈哈哈。集群连接集群中的每个服务器之间都是互相通过route连接。 server1启动一个route进行tcp监听等待远程route连接。 收到server2的route client连接以后,server1调用sendInfo发送本服务器的一堆信息。 server2也开启route server监听等待别

2018-05-06 09:56:06 1227

原创 MQTT QOS等级订阅和发布的关系

发布publish和订阅subscribe都可以指定qos等级。 pub时指定的qos是跟服务器有关系的,比如qos2时,是保证服务器只收到一次,而不是最终的订阅者。 订阅者在sub时虽然指定了qos,但是收到的消息不一定就是指定qos等级的消息,而可能是降级的了。 为响应订阅而发出的消息的有效载荷的QoS必须是原始发布消息的QoS和服务端授予的QoS两者中的最小值。 比如sub qos2,

2018-05-06 09:54:47 5927 1

原创 golang的bufio源码分析

原本只想用用bufio,但是网上文章没有一个写清楚bufio到底怎么用,每个方法具体干了什么,搞不明白原理就不敢乱用,还好有源码,自己来分析最清楚。Reader分析func NewReaderSize(rd io.Reader, size int) *Reader { // Is it already a Reader? b, ok := rd.(*Reader) if ok

2018-05-06 09:54:00 475

转载 golang TCP Socket的一篇好文章

Go语言TCP Socket编程

2018-05-06 09:53:21 2394

原创 MQTT的消息重发与消息排序

因为对surgemq的研究发现qos>0没有重发功能,然后去看了MQTT协议文档,在qos>0的情况下,服务端确实也需要实现重发,而且还必须保证顺序。 虽然tcp一般情况下保证不丢包,但是服务端在超时时间内没有收到客户端的publish ack时也需要重发publish消息。 4.4 消息分发重试 Message delivery retry 客户端设置清理会话(Cle...

2018-05-06 09:51:24 7828

原创 surgemq主流程及优缺点

主流程Server Listen tcp端口for循环AcceptAccept后go handleConnection(conn)handleConnection创建srv service,srv相当于client在service中又go了3个goroutine:processor(),receiver(),sender()service中创建了in buffer和out bu...

2018-05-06 09:50:09 1127

原创 有种写个开源mqtt服务器的冲动

近来对于mqtt服务器mosquitto和nats服务器gnatsd稍有研究(三四天时间),gnastd性能很不错,但输在于没有持久化和非标准协议导致客户端支持处于弱势,mosquitto性能太差,代码极度缺少优化,但因为胜在mqtt标准,客户端有优势。 不想直接改mosquitto,c语言虽然很快,但是写起来效率太低,而且没有协程,想要写出支持多核cpu高并发高性能程序也是很不容易,虽然有模拟...

2018-05-06 09:47:47 5190 1

原创 gnatsd的Subject数据结构及优于mosquitto的原因

主题名(Subject Name)主题名是大小写敏感的,必须是非空字符串,不能包含空格,使用“.”符号来分层,mqtt中使用“/”分层。 星号“*”匹配一层,跟mqtt中的“+”一样。 大于号“>”匹配后面所有层,跟mqtt中的“#”一样。源码分析代码都在sublist.go。 先列出数据结构:// A Sublist stores and effic...

2018-05-06 03:02:57 333

原创 暂时放弃nats - gnatsd

放弃的原因都下决心用gnatsd了,最终放弃的原因是ios平台居然没有好的客户端。 官方推荐的swift客户端: travelish/Swift*Nats* 最后更新是2016年,而且代码太简陋了,很多功能都没实现。另外一个开源raykrow/swifty-nats看上去不错,可惜用了swifty-nio,不支持ios平台。自己写又实在是没时间没精力。算了,先暂时放弃gnatsd...

2018-05-06 03:02:24 654

原创 gnatsd修改防止一个帐号重复登录

golang就是爽,代码简单易懂。稍微看了一下gnatsd的源码,应该这样改就可以:首先要自定义鉴权系统,每个用户都需要使用不同的用户名进行鉴权登录。修改server.users新增一个clientid字段,记录登录成功的用户id,当然要记得写入时上server的锁。client增加一个kicked变量做为标志。鉴权成功在server.users中查看是否已经有clientid,如...

2018-05-06 03:01:51 277

原创 消息系统nats(gnatsd)的自定义鉴权扩展

因为对mqtt服务器mosquitto的源码简单研究感觉其性能在多处都有瓶颈比如网络层没有使用epoll,topic使用树(在大量topic时岂不是要遍历到死)还有很多……,所以又去网上搜索其他消息系统的资料,然后发现gnatsd的性能很牛逼,虽然功能上比mqtt弱,但是在某种程度上可能也可以契合我的项目。 首先我想了解一下gnatsd的鉴权系统,一开始发现都是写在配置文件里,这样对于少量的用户...

2018-05-06 03:01:06 867

原创 coTurn配置(主要是客户端登录验证)及验证原理分析

想支持WebRTC服务器coTurn必须开启long-term credentials mechanism,也就是加上-a选项。一、最简单不使用数据库直接设置密码./turnserver -a --no-tls --no-dtls --no-stun -u testuser:testpwd -r myrealm -v./turnutils_peer -v./tu...

2018-05-06 02:59:51 4761

原创 coTurn的附加程序命令行测试

turnadmin看了代码以后发现turnadmin和turnserver其实是一个程序,代码中判断了第一个命令行参数是否”turnadmin”来区别。 trunadmin的入口为:mainrealy.c的adminmain函数 1) For the long-term credentials there must be keys “turn/realm//user//k...

2018-05-06 02:59:23 971

原创 golang 日志相关

先收集,以后再弄: Golang 优化之路——自己造一个日志轮子 日志切割:lumberjack 开源日志:zap,速度快,切割配合使用楼上的 开源日志最多start:logrus...

2018-05-06 02:58:52 501

原创 修改mosquitto-auth-plug的Redis支持模块

修改mosquitto-auth-plug支持Redis数据库,但是没有mysql模块支持的功能全面。 README.md里说如果使用Redis数据库,将不支持superusers和acl权限控制功能不支持(+/#)通配符,这真的太愚蠢了。如果一个用户属于superusers,表示这个用户是超级用户,不受acl权限模块控制,这个功能挺有用。而且看mysql的数据库表结构,其实只是多了...

2018-05-06 02:58:25 808

原创 mosquitto鉴权插件mosquitto-auth-plug的加密算法

mosquitto-auth-plugPBKDF2加密PBKDF2其实就是选择一种哈希算法,把密码加盐后经过多次迭代计算进行加密。当然肯定是不可逆的,可以防止碰撞破解,迭代次数越多越安全。mosquitto-auth-plug使用了PBKDF2加密,编译后得到的np可执行程序可以进行加密:(下面假设密码为admin)./np -p admin得到加密密码:PBKD...

2018-05-06 02:57:49 1614

原创 golang的redis和mysql客户端

redis客户端github.com/gomodule/redigo/redismysql客户端github.com/go-sql-driver/mysql 必须配合go自带的database/sql使用,里面坑好像有点多,需要小心。参考文章: 记golang数据库查询封装的坑 关于Golang中database/sql包的学习笔记...

2018-05-06 02:56:14 887

原创 paho.mqtt.golang有bug而且mosquitto需要优化

paho.mqtt.golang这个渣渣有bug:连接mosquitto成功以后,把mosquitto强制关闭过一会重新启动,此时Client断开但是IsConnected永远为True,导致无法重连,而这破东东居然还在背后自动重连可永远连不上。 这破东东发展这么久了居然还有这么弱智的bug,shit! 没时间去修改,还是换个mqtt客户端吧,找到这个github.com/yosssi...

2018-05-05 00:47:46 2782 2

原创 swift moya和ObjectMapper

Moya使用moya主要是因为网上说这是一个比较推荐的swift开源项目,当一开始学习时看见使用说明就有点扭头要走的冲动,本来一个简单的客户端http request代码分成了好多小块来处理,不过看在有名气的份上还是选择用它。稍试用了一下发现这其实就像一个web服务器框架,按它的规则往里面填空就可以了,只不过我们平常很少在http客户端使用类似的框架。另外吐槽一下rxswift,这是因...

2018-05-05 00:47:13 2600

原创 WebRTC之STUN、TURN和ICE研究

准备查看WebRTC源码对应以下这些文章中的协议格式深入研究一下ICE。这三篇文章是目前我看过的最好的ICE文章: P2P通信标准协议(一)之STUN P2P通信标准协议(二)之TURN P2P通信标准协议(三)之ICE这个可以做为补充: P2P技术详解(三):P2P技术之STUN、TURN、ICE详解先学习上面文章的基础知识,然后开始分析WebRTC创建PeerConne...

2018-05-05 00:46:34 2478

原创 W3C WebRTC 1.0: Real-time Communication Between Browsers

WebRTC 1.0: Real-time Communication Between BrowsersWTF:截止目前WebRTC并未完全实现以上所有标准,比如TURN的oauth验证。也就是说这个只是草案。

2018-05-05 00:45:53 407

原创 GPUImage2 swift版本使用pod安装

来源: https://github.com/BradLarson/GPUImage2/issues/1 支持swift4For Swift 4, here’s an update to @m1entus’s local podspec:# based on https://github.com/BradLarson/GPUImage2/issues/1#issueco...

2018-05-05 00:45:24 701

原创 WebRTC RTCConfiguration中的sdp_semantics

// Configure the SDP semantics used by this PeerConnection. Note that the // WebRTC 1.0 specification requires kUnifiedPlan semantics. The // RtpTransceiver API is only available with kUnifi...

2018-05-05 00:44:49 1674

原创 WebRTC加深理解 - 会话流程

基于ios native api自己写客户端得出的大概流程,WebRTC的API接口和例子都是oc版本,因为我最讨厌最恶心的语言就是oc,所以我使用swift来编写客户端。我本身不是搞ios开发的,以前稍微用过oc,至于swift前段时间看过一点,现学现卖,就是转换oc的过程实在是折磨死我了。音视频客户端会话的整体流程WebRTC主要是客户端技术,尽量使用p2p点对点流媒体传输。...

2018-05-05 00:44:18 367

原创 mac下安装turn服务器coturn

安装从https://github.com/coturn/coturn下载代码 直接./config 会发现找不到libssl-dev,其实mac系统里已经内置openssl了,但是应该不是dev版本。为了不跟系统的openssl冲突,选择自己安装openssl到指定目录。git clone https://github.com/openssl/openssl.git进入opens...

2018-05-05 00:43:48 1319 1

原创 IM 协议选择 - MQTT(mosquitto)

以前大多数im都使用私有协议, 后来发展出开放的xmpp, 使用xml通讯, 不用说消耗网络资源太大了。 我本来想使用protobuf自定义一套私有协议,但想到工作量还是太大,然后发现现在mqtt协议很热门,特别是物联网使用比较多,不过也可以用来做im消息推送服务器。MQTT开源项目上github搜索golang的mqtt服务器,找到最多star的surgemq,不过一看居然三年...

2018-05-05 00:43:09 1964

原创 WebRTC中的FEC

ULPFEC在WebRTC中的实现

2018-05-05 00:41:46 1134

原创 webrtc 视频软硬编码

ios编码RTCDefaultVideoEncoderFactory根据设置创建h264,vp8,vp9编码。 RTCVideoEncoderH264是硬编码,支持强制请求编码i帧和实时动态修改码率。软编码采用openh264+ffmpeg。至于怎么选择软编码和硬编码的代码还没看。

2018-05-04 21:20:53 2115

原创 WebRTC编译

居然能访问 https://src.chromium.org/, 不过里面文件好像太老了网上关于编译下载的文章乱七八糟的, 官方的这个https://webrtc.org/native-code/development/应该没有问题吧 (自己备份了一下这个页面,以免被墙上不去: WebRTC官方下载编译说明)MD, 需要的硬盘空间吓尿: Linux: 6.4 GB. Linux (with A

2018-05-04 21:20:20 358

转载 收集的一些流媒体文章

游戏实时语音解决方案是怎么炼成的WebRTC-Android 源码导读(三):视频硬编码实现分析 WebRTC手记之框架与接口 编译AppRTCMobile ios相关 WebRTC iOS下的AppRTCMobile Webrtc编译篇 webrtc 编译完成,安装时错误 Webrtc笔记-编译5.

2018-05-04 21:19:35 198

原创 WebRTC的apprtc和collider源码分析

apprtc和collider是WebRTC的官方例子, 源码在https://github.com/webrtc/apprtc 其中apprtc是房间服务器, collider是信令服务器. 想搞清楚到底是怎么回事还是自己看源码最清楚. apprtc是基于 Google App Engine SDK for Python编写的, 而且还需要Node.js和 Grunt, 实在不想折腾这个环境

2018-05-04 21:17:50 647

原创 NAT打洞

对称型NAT相互之间也可能打洞成功使用端口预测还有生日攻击算法: https://github.com/jflyup/nat_traversal https://blog.csdn.net/bytxl/article/details/34812293 http://blog.51cto.com/wangbojing/1968118 https://www.zhihu.com/question

2018-05-04 21:16:44 869

原创 WebRTC初步学习

看网上文章后随手写的, 只做为简单笔记, 还没时间真正研究WebRTC, 说实话一直觉得WebRTC太臃肿, 要不是现在要成为标准那代码除了jitterbuffer、fec、qos和音频信号处理外真心懒得看. WebRTC流媒体通信基于RTP和RTCP. RTP用于流媒体数据传输,RTCP负责可靠传输、流量控制和拥塞控制等服务质量保证. WebRTC支持p2p, 其实只是单点对单点, 客户端节点

2018-05-04 21:14:11 852 1

空空如也

空空如也

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

TA关注的人

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