- 博客(17)
- 收藏
- 关注
原创 webrtc的sdp中msid介绍
前面最近在写项目的时候遇到了一个webrtc中msid相关的概念,百度和Google都没有通俗易懂的解释。这个时候我就只能去翻翻ietf了,链接在这rfc8830,不想看英文的可以下面我总结的。名词解释MediaStreamTrack 代表一个媒体源,例如音频,视频。一个MediaStreamTrack可以被包含在0个,1个中或者多个MediaStream中。它并不是和一个ssrc划上等号,它还会由rid源创建。MediaStream MediaStream和MediaStreamTrack
2021-06-30 12:38:35
2085
原创 pion最简单webrtc例子
前言pion是一个纯用golang写的开源webrtc项目,目前github上大部分webrtc开源都是使用c++写的。本人认为pion对于一个webrtc入门者来说golang的语法相对简单,你这样可以更好的关注webrtc协议。如果业务场景不是特别高,业务上只做sfu转发服务器的话,可以尝试用golang来做。读这篇文章你需要稍微了解webrtc的协议。例子pion也有提供不少的例子,我这边写了一个我自认为最简单,只能接受一个流的例子。这个例子平铺直叙,走了一个完整的webrtc流程,需要配合前
2021-06-09 16:44:23
9096
原创 pion ice项目源码分析
前言git 地址https://github.com/pion/iceice 流程的介绍博客https://www.rongcloud.cn/blog/?p=4178整个源码分析会直接根据ice中的example来走,该博文是建立在你对ice流程有一定的了解后,对ice的实现的简介。创建Agent以下是比较重要的代码func NewAgent(config *AgentConfig) (*Agent, error) { ... startedCtx, startedFn := c
2021-05-25 22:11:20
2169
2
原创 leetcode-剑指Offer19正则表达式匹配
题目描述请实现一个函数用来匹配包含’. ‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但与"aa.a"和"ab*a"均不匹配。示例 1:输入:s = "aa"p = "a"输出: false解释: "a" 无法匹配 "aa" 整个字符串。示例 2:输入:s = "aa"p = "a*"输出: true解释: 因为
2020-10-07 15:15:21
120
翻译 nginx对quic和http3的支持
概述这篇文章前面是翻译nginx对quic和http3实验介绍的一篇英文文章,原文地址是Experimental QUIC support for nginx后面会有我对nginx对quic和http的实验介绍这是一个对nginx支持quic,http3特性的实验。这些代码是单独的‘quic’分支,在https://hg.nginx.org/nginx-quic可以找到。这些代码是基于 1.19.x. 版本的nginx开发,我们现在打算在下一个nginx发布版本中将这个分支合并进去。代码是BS
2020-09-20 21:38:42
1821
2
原创 srs拉流的流程
概述srs拉流的步骤前面几步和推流差不多,就不再赘述了。这边直接从playing函数调用开始开始讲起。srs推流的流程在connect和create stream完毕后调用palying用于开始拉流。值得一提的是,在集群模式下,如果源站没有流这边会去判断别的源站是否有流。在play的时候会开启新协程,SrsQueueRecvThread用于接受Message,处理对应的Message。旧协程会从consumer队列中消费推流协程生产的Message,将它发送给拉流端。开始play流程在pla
2020-09-18 23:24:28
1900
原创 srs推流的流程
简述在accept一个链接后,创建对应的SrsRtmpConn。SrsRtmpConn自身是一个协程的子类,运行后进行rtmp协议中的handshake、connect、create stream。并且判断是publish之后,创建SrsRecvThread来接受推流。但是有一点比较奇怪的写法就是,在handshake之后,connect之前就根据发的包内容来判断是一个publish还是play。这点和我认知的rtmp协议不同,在我的认知里面,rtmp协议在create stream会发play或者
2020-09-17 21:12:17
1652
原创 ngx_rtmp_module直播流程
我们介绍最简单的rtmp直播流程概括通过ngx_rtmp_module中的配置ngx_rtmp_block函数去建立对应的ngx_listening_t对象,并且将回调设置为ngx_rtmp_init_connection函数在ngx_rtmp_init_connection接受到回调后开始调用ngx_rtmp_handshake握手,更改连接读的回调:ngx_rtmp_handshake_recv,写回调:ngx_rtmp_handshake_send,开始进行rtmp握手协议。握手完毕后调用n
2020-08-20 15:26:15
396
原创 nginx各个模块的监听怎么建立
概括文章描述的前提是开启了SO_REUSEPORT特性在init_cycle会调用modlue的解析配置,各个moudle会在NGX_CORE_MODULE配置中将自己要监听的端口放入cycle->listening的数组中。master会在解析完配置后初始化各个module,按照需要启动worker的个数复制相同个数ngx_listening_t,给每个ngx_listening_t记录上对应的编号。对所有的ngx_listening_t开启监听。master调用fork()创建相对应个数
2020-08-19 19:32:33
385
原创 LeetCode Implement Trie (Prefix Tree)
class Trie { class Node{ Node() :next(26, nullptr), m_IsEnd(false){ } bool m_IsEnd; vector<Node*> next; };public: /** Initialize your data structure here. */ Trie() { } /** In...
2018-12-19 11:59:40
195
原创 C++多重继承下,函数指针的多态实现
最近在看《深度探索C++对象模型》在看到函数部分,遇到一个关于多重继承和函数指针如何实现多态的问题。如果你想看懂本篇内容,需要先理解c++中变量的内存模型,一点点的汇编基础。本篇博客是基于微软编译器0X00在单继承情况下函数指针多态实现类成员虚函数指针可以实现多态嘛?我们有一段单继承的代码,并且定义了一个函数指针,我们问题是:类成员虚函数指针在不同的对象调用情况下可不可以实现多态?c...
2018-11-01 12:55:31
831
原创 C++成员变量内存模型
0X00.成员变量的布局一个类中的成员变量是如何布局的?现在我们有一段代码,代码的如下。class A{public: int a; char a1; char a2; char a3;};在C++的标准中规定后出现的成员变量应该在内存的更高位地址(这边没有规定连续),所以A中的成员变量应该从低地址-&amp;amp;amp;amp;amp;amp;amp;gt;高地址顺序为:a-&amp;amp;amp;amp;amp;amp
2018-10-25 19:58:17
482
原创 C++内存对齐
0X00.变量偏移位置内存对齐简单的例子#include &amp;amp;amp;amp;amp;lt;iostream&amp;amp;amp;amp;amp;gt;using namespace std;class A{ char a;//1字节 int b;//4字节};int main() { A a; cout &amp;amp;amp;amp;amp;lt;&amp;amp;amp
2018-10-24 17:42:57
237
转载 C++虚继承,虚函数内存模型
转载自:http://blog.youkuaiyun.com/xiejingfa/article/details/48028491准备工作1、VS2012使用命令行选项查看对象的内存布局微软的Visual Studio提供给用户显示C++对象在内存中的布局的选项:/d1reportSingleClassLayout。使用方法很简单,直接在[工具(T)]选项下找到“Visual Studio命令提示(C...
2018-10-22 22:13:12
409
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人