00:00
就是有些有些朋友可能是做客户端的,或者做测试,也经常问当老师,就是我要不要就是了解一下服务器的开发原理,那实际上各位朋友就是如果你是做流媒体相关的,就即使你做客户端SDK,我也是建议大家可以去了解下,就服务器就是这个流媒体服务器,它是原理是怎么样的,是怎么去运作,那这样子对大家在处理这些协议,或者你处理一些延迟问题的时候,那就能够多有一点点抵押,什么意思呢?就因为我们比如你要做一个推流,然要拉流的一个项目,就是如果延迟比较大,怎么去排查一个延迟问题,会不会是服务器导致哦,那如果大家对服务器能够有点理解,那就会比较容易解决,对对应这些问题啊,那好了,各位好,讲这个流媒体服务器开发之前,我还有一个,哎,有一个应用要给他去分享一下吧,就是我们。
01:00
曾有个朋友昨天问了我的一个技术问题,就是比如大家可以看到我给他看看一下,就是他问我这边这个叉幺幺国家的,就是这个叉幺,就是这个U班图,就抓屏幕,他为什么这个分辨率一直抓取出来是640,从480,是不是还有哪一些参数去设置,然后呢,他也把这个截图发给我,就是他这边截出来就是640乘480的,然后呢,他这个电脑分辨率是1366乘768了,但是为什么抓出来屏幕是这样子的,各位朋友就是我是建议大家就是如果使用F遇到类似一些参数问题,应该怎么去看,我朋友我是建议大家可以去,诶把源码发到搜赛里面去,可以去找到对应的就是源码去看,比如可能很多朋友讲,那老师你为什么知道这边要打开这个叉CB这样一个啊,点C文件,那我怎么去知道打开呢?因为我们刚才这个O。
02:00
的时候啊,就是他是需要打开这个叉,就是要打开这个关键字啊,那我这边我就搜一把,大家可以看到这边通收拾赛我去搜一把。好,我一搜的时候,你看我要打开这样一个设备,然后纸搜出来就是我们对应的就是XB。这个点C文件以后,我们这边找到这个office,大家理解了没有,你这边你就可以找到对应的这边参数设置,然后呢,我这边就可以看到这边有一个video size,也就说我们这边就是抓这个帧的时候,我到底这个分辨是是多少,它默认它这边是就是600乘480的拐跑。就默认它就是这样的一个啊,这边是VG嘛,就640乘4480,所以它这边默认出来就640乘480这样一个情况啊,还这边实际上还有一些参数,比如我抓手,我能否从某个位置开始抓,但是默认他开始是零的了,大家就是可以多去看看啊,这边我抓这个屏幕,这个帧力,还有我要不要绘制一个鼠标等等那些参数都在这里,所以各位朋友理解了没有,就是学配的时候,我之前我一直给他去强调的是你这边你命令好要学。
03:21
就是I就是命令行,然后到这个API,然后到到就是看一部分源码啊。我为什么说是开一部分源码的,你不可能所有的源码都看了,比如刚才我讲的这个命令行,你就可以看一看,好,那这个是我们给他去分享一个怎么去解决实际问题啊,那接下来我就要回到我们今晚的正题里面来,就给家去讲零媒体相关的。假媒体相关的我们一点点来讲,我们先来看这张图,大家可以看到这这里有一张图啊,这边是来源于SS的作者就是这个看服器,凭什么SS做到淘宝一,我这边主要是给大去介绍一下这张图大家可以看到,就是对于我们整个音用视频开源技触站,或者是对于我们音视频的一些应用场景,大家从这张图都可以看得到,就是在上面这这里啊,这一列里面的这一行,比如我们一些秀场,就是这些女主播啊,还面打游戏,还有一些电商直播,教育培训,企业协作,还有我们腾讯会议等等,还这边还有一些物联网,还有安防,就是我们讲一些业务场景,就业务场景,那对于这些业务场景呢,就是我们再往下面看,这个通信这边就分为这个直播跟时通信,这个直播就是可以大致理解啊,像比如RTPTMPTP这一类,你可以大致认为是这个直播,但是对RTC这一块,就是我们来回的实时的一个交。
04:51
客户他比如你这边音视频通话,还有音视频会议,这种就是属于RTC,就是这个实时通信。然后这边我们再往下面看,再往下面看到这一块呢,这边音视频pass一个平台,那像这里什么意思啊,这一块呢,那比如我们这边就可以看到很多是有一些开源的库,看库,比如这边从从新个inco的,像我们I配可以用来做编码啊,叉六是op,还有OS,就是这些开源项目都是特别特别火的,大家理解了吧,就是我讲这样张图的目的也是给他去分享一下,就是我们如果要学音视频,像有哪一些开源项目,我们是可以值得关注的,我这边我给他去画一些重点吧,像F没有。
05:38
还有OBS,那这块肯定是需要重点去关注啊,还有我们叉6426还是oppos,要看你具体,如果你是搞RTC的,那你这个OPPO肯定会用到,如果你是搞这个直播A肯定也会用到,所以这两个也是比较关键这两种啊,这边我们看看,还有这边就是sor的,就是属于这个服务器端的开源项目,那服务器开源项目像SS肯定是特别重要了啊,这边还有我们J也是比较老牌的这种,哎,Y8是相关的这个这个我们也讲啊,这我们VIP也有讲。
06:14
他这边像NRP现在来讲没那么流行,因为作者已经。不支持啊,大家有没有去看过,就个批啊,就作者已经没有去更新了,就现在有一些啊,我们国内就是这种爱好者,就拉了一些分支出来,还去维护,但是原作作者是不是已经不光心啊,所以我不是太建议大家去看皮所,就好好看一下SS这一类就好了,好了,这边我还要补一个,还是再补一个,这边在国内还有一个比较好的,就是也是加了media k这边这个看项目也是非常好了。好,很多朋友也问大老师啊,就是像外BRTC也有很多开源S,比如还有还有还有等等,那这些我到底看哪一个,我这里可以百分百告诉大家,就是不管你用哪一个,那你在实际开发的时候,你用开源项目一定会涉及到二次开发的一个操。
07:22
大家理解了没有,就是你用开源项目基本上都会涉及到一个二次开发,所以基本上来讲就是你选定一个看框架后,那你肯定是要多花一些时间去研究一下,就是遇到一些问题,或者如果就不能满足你的业务需求,那你是要去对他做二次开发的,大家理解了没有?就这对这开开项目来讲,你不能说我拿过来直接就用,出了问题就直接就找开市去给你解,哪有那么好的事情啊,人家也很忙了,就是只能说有一些公共的一些比较比较公共的bug是可以解,但是你那些定制性化的一些业务,那开源社区肯定没有时间来帮你搞的。
08:10
好。那这边我们再往下面看,这边还有一些play的,像VC还姆,就是这个国览器啊,这边还有I j k play等等,那这边我是建议大家这边像I j play,还有我们讲了一个ipad play。那这些也是重点,需要去掌握,像VC还可以。像Y8TC的话,那里跟刚才是一样了,跟刚才是Y8TC这一块是已经就是跟是通话是在一起的。好,这边还有一个是这个。XO。就是就是谷歌在安卓里面的。好了过好,就这边是涉及到去开库,像有一些不那么重点,我还是没有勾出来了,那就是如果你看开库,你就看我这边,我勾选出来就可以了。
09:01
好,没有一些学员问我这个老师,请问就是用CPP的吗?就是开源项目就有CC加加的。也有C的。我这边比如大家举举个例子啊,像SS它这边是C加加的,一般服务器啊,都是用C加加用的比较多这个。加了media也是C加加的,像这个加它是C人啊这边阿,那这边它是C啊,这边OBS是C加加。好,就大致给他去讲一讲,就OS它哦,有C加加也有C。好,也就是说就是如果你是要做流媒体音视频的话,那你这边还是要去学一下C加加才行,就是你不懂C加加的话,那你这边怎么说呢?就是特别是连媒体服务器这一块,那没法做,只能去做嵌式的音音视频。
10:09
好吧,那我这边再继续往下面看了,看有没有些朋友还有问题。向SS推流附带均衡是否有相关经验,那这个是可以去搭建这个均衡了,这个没有问题。有朋友讲,就是我是基于Linux开发,我对音视频流媒体感兴趣。这个可以啊,就是你在工作里面用音视频的话,特别是这种刚毕业的朋友,就是学我们的课程,就对后期的发展肯定是非常有帮助,就是如果你工作个十几年,你用了十几年音视频,你说要来学我们课程,我也会给你评估一下看看目前就是如果你薪资都有60多万一年的话,那我就不太建议学的是不是,但是你刚毕业的话,还是非常推荐学的,好了,那这边我们要赶紧再往这边看吧。
11:00
好,这边像我们怎么去学这个SS连媒体服务器啊,我这边我就不一点点去念了,大家有需要可以去加上我们其他老师了解一下,等一下我在具体讲到代码的时候,就涉及到一些代码逻辑的时候,再重点给他去讲,就怎么去学这个媒体框架。这边我就稍微截个图出来,先让大家能够大致了解一下,就是这边需要重点强调是就是你比如你看SS也好,或者接了media也好,就是一定要多去看官方的V,就不要提一些太小的问题。好,这边我们再往下看这个公众号,大家可以去关注一下吧。好外,那这边我们再继续啊,像这边这张图是来自SS官方的一个文档,我这边我就截取出来,大家就讲一讲,先讲一讲这个粗略的先啊,等一下我们再讲这个细细节细节的。
12:04
好,那比如我这边看这张图,能不能看出一点玄机来呢?那比如刚才我们讲到外RTC,你看到没有,这边是讲的是外,把TC这边就说标一些红色的出来。好,这边我们把外把这标出来,比如说这边推流拉流都是有支持,外把什么意思啊,这是我们可以看到这边这个箭头啊。看到没有,这个箭头就推流,推到流媒体服务器里面去,然后这边拉流,就是往后端就是箭头就是拉流这么一个情况,然后这边我们再来看左边是不是右边呢?你看这边像阿尔法OBS这边的,也就说我们是可以使用阿尔法那个或者使用OBS来推流。这边OBS还有配推流,一般来讲它主要是R推流,现在就是OBS也有第三方去支持外把TC推流,不知道大家有没有去了解过。
13:08
但现在主流分支版本还没有支持。第三方这个插件是支持88TC推流的。为什么这些开项目这么重要了,我不知道大家有没有去关注啊,就比如我们讲IPA,比如讲这个IPA,不管你是腾讯也好,或者自己跳动还是百度还是阿里,他内部百分百会用到PA分配个然来这边对于OBS来讲,大家有没有关注,就前段时间就是这个字节,字节他是不是推推到他们一个引擎啊,就是他们一个推流端,那就是使用了OBS的一些元宝,但是好像是没有没有声明吧,就没有说明说他已经使用了,但是呢,后面被OBS这个开发者啊,就是去反向解析这个字节的这个代码就是解析,反正就是发现啪啪出来就扒出来是有使用了OBS一些东西啊,所以各位朋友就是不管是国内种大公司也会使用这种开源项目,所以大家不用说,哎,问大老师,我学这些开源项目,大公司认不认可,那肯。
14:22
肯定认可啊,不认可你学来干嘛?好,那我这边我们再看就是这边文化的时候,因为以前啊,官方它是主要是支持阿P这样推,就是对还有OBS,然后这边再来看这边这个。在包装的时候,大家可以看到这边啊,就我们这边。你看这个流媒体这个集群,这整个集群的时候看,你可能会觉得会有一点点,哎不太理解他为什么是这样子的呢,那比如我这边我先给他去问一个问题啊,就之前有个朋友问我啊大老师。
15:01
就是。SS支不支持,呃,从边缘。节电。拉取HS过这支不支持从边缘节点拉取S哦,那怪票,那你看这一张图,那基本上你就可以看得出来啊,就比如我们这边写到你看这边这个啊,你看这边这个H这边就写了一个边缘的节点,也是我们推流是可以推到这个边缘里面也可以推在还是可以往这个原站里面推的,大家看到这边节点是可以往原站里面推,然后呢,就是我们这个原站也是可以把流拉到这个边节点里面去。但是就对于HS这种来讲啊,就是基本上来讲,作者是推荐大家就使用in再去搭一个这样一个CDN集群会更为合适,大家以后就是要注意就是如果你是拉是HS,就是尽量哎这搭这个innu去拉吧。
16:09
是这么一个情况。好,那这边我们就要再往这边看了,那就大致了解一下就好了,就是这一块重就是只需要你还是要去看官方V才行,像我这边我也赶快去打开一个吧,我看看能不能打开啊,因为GI他经常会有一些抽风。偶尔一段时间能开,一段时间不能开的。好,有大家可以看到,这个时候SS可以打开了,就是给他补可以打来这边这个V做的写的非常细,所以大家一定要好好的去看。大家可以都去看一下吧,我这边我就播一点点去写啊。大家可以都去看一下,这边还有一些文档啊什么的都非常多。
17:06
好,这边也有我们林生教育,好这边林生学院的,大家可以去看一下。这边会链接到我们一个课程,大家都是可以好好的去看看,现在我们这个免费的课程也会有支持SS要入门的,这边是从4.0开始去讲。啊,比如怎么去一些配置啊,还有我们今天课上讲了一些拉流转发一些原理,就是在我们这里的课程上讲会比大老师今天上课会讲的细一些,大家都可以多去看一下。好了,那这边我们再继续往下看。在继续往下面看之前呢,我还要再给他讲讲,就是这个media了,大家也想看到这边有一张图,这张图呢,就支持协议就非常多。啊,这个图有点大。
18:05
好,各位朋这边我们这边去看吧,还有很多朋友有问达老师,就是我到底是学SS还是。They are media kit。哎,对于初学者来讲,实际上我还是更为推荐SS,因为SS的这个C加加语法用了会相对来说就偏偏C。这SS它这个C加加偏这个C语言的用法。就是不会用太多,这个C11就是我们自己去bug去跟踪流程的时候,就bug代码还有。跟踪代码。这个阅读代码就是这个更为直观。就我们不去评价什么性能啊什么之类的,我只是说从就是我们初学者的一个角学习角度去看而已。
19:06
就是如果你是对C加11非常熟悉哦,那这个时候就是media,那他这边是用C加11的语法用的非非常多啊,如果你想通过一个开项目去学C加加语法,又想学音视频,那你可以去考虑一下这middle k也是没有关系啊,他这边还有一一个比较重大的一个区别,就是接了media k,它是一个多线程的。多生成的框架,然后对SS来讲,它是一个斜长的框架。当老师这里就不去评价说哪一种框架用的比较好,因为两个项目都是非常优秀,都是非常值得大家去学习的,大家理解了没有,就是都是非常值得去学习,我这里就稍微再引申一点点好,可能很多朋友也问会问当老师为什么上课经常会做一些隐身,因为对于我来讲,就上公开课,我们很多时候就讲知识一方面,第二还是要尽量引导大家努力的去工作,努力的去学习,努力的去进步,什么意思呢?这要这个写代码。
20:17
就是如果能的话,就是如果可以。这如果时间允许。大家也可以常去做一些开源项目。外跑就是真的尽量去做一些开源项目,那像SS也好,接也好,就是他们通过不断去迭代,像SS现在经迭代应该已经有十多年了,这个也迭代好几年了,就是我从一六年的时候看这个加当时也还不是特别善,那现在呢也是非常完善,也就说就是跟我们养小孩一样,就是养养养养养个小朋友样,就是不断去啊为就是怎么是就抚养他,让他长大成人,就对这开业项目也是一样,就是我们不断去投入,那最终他也是能够给我们带来一些回报的。
21:18
好了。那这边我们再继续。那接下来就要给他去开始讲一些更为实际些些的了。好,那这边我们就开始讲讲这个接受问题了。比如大家可以看到像。加K这边,它这边写了一个框架,那比如这边是左边是我们协议的接入,那右边是这个协议的输出,那也就是说我们对于流媒体服务器来讲呢,最主要是一个输入。还有这边是处理。然后再到输出的一个过程。
22:03
是不是就是简单来讲就是这样的一个过程。这是第一步了,那如我们再往下面去细分呢,再往下面去细分,比如我这边我输入是不是就我们这些输入还是一样的。那接下来就是如果我们要多个输出,那比如我这边我接了很多人。我这边输出,比如现在是秋香。是不是秋香,然后这边还有我们。微微老师。那还有我们,还有其他朋友的,像我们。或者我们黑某人做好。那我想问一下大家,就我们就是一个输入,就是一漏流,输入的时候我们怎么去输出多路路流,那这个时候是不是就应该考虑了,就是我们假是。
23:03
多输,多输入,多输出。一种是说我们就是同一路流。那第二个就他讲这个多输入多输出。就也是多输出啊,但是我们讲就是输入不同的协议。说出不同的协议。那这个时候那肯定会是要一个协议的转换,也就是说对于这个流媒体服务器来讲,最主要是负责就把这个数据来输进来后,那我们要转发给多人,第二个就是要做这个协议的转换,就主要是这两个目的,但是在处理这个协议转换之前,那我是不是还要,哎怎么把这个流收到这个数据。
24:00
这怎么?读取,这怎么处理?导入的数据。好了,那这边我们稍微来一点点去看了,这边我就结合SS来给他讲。好了,那各位朋友,我这边我给他去举个简单的例子先啊,像像比如我们这边要做一个阿推流,是不是现在我要推到流媒体服务器里面去,大家觉得这个流媒体服务器应该做什么,就说这边媒体服务器要做什么工作,大家觉得呢?那第一个我们是不是要去读取配置文件?读取配置文件里面有什么东西呢?那至少是我们R的端口。是不是就默认是1935,但是基本上来讲,我们还是从这个配置文件里面去去读啊,因为有时候就是我们要开多路,有不同的端口的时候,那也是是可以的。
25:05
好。那接下来就是我们读取完这个配置文件后,那我是不是至少我可能是去监听R端口。那这边是不是就会涉及到我们讲一个lesson的一个字段。是不是外跑,我可能要去listen这样一个接口。好再往下面看,那然后我这边我今天这个IP,比如193的端口后,那我是不是肯定是就是与我有新连接进来,那我肯定是不是就去呃接受新连接。那这边是不是要调奥塞塔高票就大致理解了吧,就是这么一个意思啊,就是说我讲这个目的是什么呢?就说我们123,那我至少呢,就是我可以去跟踪一些代码,看看SS他是怎么去处理这些逻辑的,那今天我们就先来看看。
26:16
我这边我要连到流媒体服务器里面去。好,这边我们进到SS。我用完C用这个三点啊,4.0.13的版本,看一下现在有没有在监听。我把它给关了先吧。12062。先把它给关掉,然后各位朋友,我这边我要去给他去做一些啊debug,或者先给他去讲讲就怎么去启动先吧,第一点就我们怎么去使用SS,那我们边编译完后。他这边在这个串口里面啊,就是有对应的这些源码什么的,执行文件是在OBS里面去,就是在OBS,然后对应配置文件是在我们。com目录有大家不了解,就是可以去加些老师这有基本的文档会给他去讲解怎么去搭建的,就避免大家就是花一些五位的时间,那比如我这边我先给他去启动一下。
27:16
SS,然后这个执行文件就是SS。然后通过这个杠C指定我们配置文件,比如这边我就指定RTP这样一个配置文件,这个时候这个媒体服务器就已经跑起来了,那这边我们可以去做一些推流操作,做一些推流操作的时候,那怎么去推呢?那各位朋友大家可以看到我这边是有准备了一些命令通过IPA去推的,就非常方便去做做测试。那各位朋友,我这边我直接在Windows里面去涂药。好,这边我就去推流,推流的时候这边我就把它启用起来了,这种方式怎么说呢?我们可以看到很多一些打印的,但这里我就想问大家一个问题啊,就是从就我们服务器我们搭起来后,就是如果我们要去看源码,那怎么去看,那我们是不是第一点啊,你这边至少你要先确定main函数。
28:19
入口在哪里是不是?你肯定要确定这一点了,相比我这边,我把这个源码已经导进来,导到SS里倒到。搜索银里面,我这边我选到。SS对应的这个版本。然后这边我给他去看看,往这边点一下。我这边我点。选到我们这边可以看函数,我一看我这个main函数有点多啊。没说有点多点进来的时候,那没说在哪里呢,是不是在有。这个SS妹NJLS啊,那肯定不是啊,那怎么办呢?所以朋友我刚才给他讲了,就是你要去学习看项目,就是一定要去做一些deb的工作,好,那这边我们就可以先。
29:08
给debug一下,就比如我这边先来看。先来看第一个就是这个读取配置文件,大家觉得应该会怎么去读这个配置文件呢?那这边我们来看。我们先简单的看。像我们刚才是。哈,看批好了,大家可以看到这边我们读这个配置文件的时候,比如我要去读这个这样一个端口啊,然读他。那这边我们也可以去搜索一下,就是读配置文件,读一个端口的时候,我是不是肯定要去查找一个字符串。比如这边怎么去查这数串呢,他肯定是这样子去搜啊。我搜一下这个lesson。这边大家就是可以稍微来看看,这边就会有很多S,看到没有S,那基本上来讲呢,我们看这个名字这类的命名很明显,他就去读取一个配置文件的,然后我们这边再往下面去看。
30:14
你可以稍微看一下这边这些接口,我们可以点点一个进来信号,然后这边我。搜的话,你可能你看这很难搜,这边我们可以在左侧窗口我们点一下,就是我们要读这个lesson的,我这边我再把这lesson说到这个字段里面去,哎,稍微去分析一下,就比如这边是get lessons,这边还有get lessons API lesson啊等等之类的,那我可以大概预估一下是应该在。Ss confi get lessons里面,那我就可以考虑,就是说我们在这一行里面去打个断点,看看它是怎么去读这个配置文件的,这是没有关系啊。然后所以我们这边就是要去做一些bug的工作,我都可以通过这个GDP启动。好,这个GDP又启动它,然后我们GP启动后要去设数的。
31:06
好,还有刚才我们讲我们要找没函数是不是会朋,这是我们看看项目的时候,如果你不知道没函数在哪里,最简单就是编译能够知bug,然后在内函数里面打个断点是最简单的,你看你在内函数里面打个断点,很明显就是在哪一个文件里面。比如这个SS没SO27是不是就在没对应的是这个main函数,还有刚才我们要打。打这个断点SS。现在你看的时候,这边还有点报错,这边是。没先确定一个端点,就是先等一下先,那一般来讲呢,我是建议大家可以先跑到main函数后再打端点。我们可以先把它跑一下,好,我这边可以跑起来,先跑面函数里面就对我们so做一些加载后,我这边我们再去打断点。
32:08
啊,这边打的端点可能不一定有用,这边有报错报一些问题。那这边还有一种方式,我们可以在只要在行号里面打断点。这边是在4188行。好这边在418行那怪跑我们这边再往这面看,刚才我给他讲啊,就是我们可以在lesson还有里面打端点,好这边我们再来看。好,就我们在里面打断点,等一下,就是我们要去监听,对要有三说,肯定报报出来。我们在里面也打了端点。好,现在我们就把它跑起来,我跑这时候我们把它跑起来后,你就可以看到,就是我们刚才设置一些断点就会跑进来,那你这边你也可以看看,就是大家去看一下他在哪里会掉到,我讲的一个目的是什么呢?就是为了让大家能够去在自己去看代码的时候,去看源码的时候,能够一步分去debug,然后去不断去看对应的一些源码,因为如果我们就是你是一个正向的去分析个代码。
33:22
比如刚刚我们讲这个main函数,可能你要找这个main函数,你都很难找啊。刚我知道是在这个没里面,然后你这个时候你一层一层去点看的时候,代码非常多,那这样子你就很难去抓住到底这个媒体框架重点在哪里。你看你怎么去看哦,你看哪个函数是是应该好去看的。那我们就打断了以后,比如像这边插个con,那很明显嘛,肯定就是为了检测,就是你这个配置文件对不对的。我们这边我们再把它跑起来,再跑起来,又跑进来了,这个时候你看这边还是去检测一些连接插了。
34:08
所以我们还要再跑一次,再跑一次的时候,大家就可以看到,这个时候就不太一样啊,各位朋友,就是这个时候你虽然还是一样掉的是get lessons,这是我们要读对应一个端口,这边默认是要有三五。就是阿批的,但是你看这个逻辑啊,比如我SS批,你从这个框架里面就可以看得出来,那像比如S里面我是不是不单只是PR,是不是还有可能有其他调用啊,这边做这手是不是又可以有这样一些疑问,就一点一点的带进来,大家理解了没有,就是讲这个目的就是为了让大家能够更快速去以后再去看代码,因为大老师我一个多小时,你说我把所有的知识都讲给你听,那不可能啊。
35:04
因为我们在我们VIP里面讲了40多个小时。我们可以看到,就是说如果我这边我确实我找到s so lesson的时候,你是不是就可以看到像你这个lesson的,还有我们还有一些htppi,还有一些htp string等等,都是有对应这边做这个监听的一个操作。还有就是对于我们这边来讲,我还这边还要起一个携程,只要大家看到有一个start start这样的一个关键字,会开了一个携程,等下我再给他去讲讲这个携程这个问题啊。啊,就是有时候截图截不出来啊,那没没关系,大家就是理解就可以了。好,这边我们就再往前看。下面看的时候,那我是不是跟他讲,就是先问我做监听,那等一下是不是肯定要accept是不是,所以我们就把它跑起来。
36:06
这个lesson我就不用再跑了,因为你这边可以看到我来的时候还有其他做这个监听的。一层一层往这边看,反正大家最终反正你都可以看到啊,这些级别里面就会这边还有对应的对的一个封装,还有T的啊等等啊,一乘一层,最终它就会掉到我们这个携程库里面。跟就一常常往这个协同库里面,比如do s里面。好吧,那我这边把它跑起来吧。好,这边可以看到,就是accept的时候,那里可以看到他是怎么去了,那这边就可以看到,这个逻辑下,我稍微给他去讲讲,先等一下会重点给他讲。这里这边这边有一个cycle,这是第一个TC的cycle,然后呢,调了SS这边还有ST,到底什么意思,反正最终反正肯定是调到我们XAPI来。
37:13
好,我们就把它跑卡先。好外好,就我个就可以把它跑起来了,下我就把它跑起来,然后呢,我这边就开始推流,刚刚我们讲了,就说我这边我要去推流,那肯定会创建一个RT米的链接是不是。那这边你肯定会有一个的获取到,肯定会停下来,那这边我们来推吧,好推流的时候你看这边这个。服务肯定马上就停下来了,然后我们这边再倒回来看啊,比如我这边我怎么去看这个逻辑呢。往这边直接来看,这边这么去看吧,告诉大家。这么去看,我能找到SS。
38:06
等一下这个笔记是可以发给大家了,大家可以去加下我们老师,就我们上课这个PPT什么的都是可以发给大家了。还有这边还有一些文档啊。就还有好几个文档,我这边我就先不去找了,就免得打打断大家的思路,大家可以看到,就是我们这边你倒回来看的时候,看看我们是不是看堆战这边有SST,那我们很明显啊,就是他这边它就是一个携程,因为我不知道大家大家有没有去了解过这个携程这一块内容啊,就是对于使用携程框架,那每个连接,就是每个监听等等都会开一个携程去处理的,也就说对于这个携程框架一般都是使用阻塞方式去处理事情。好,这边我们来看这边是这个。啊,Cycle就是携程。然后跟他讲,就说我们这个就做监听。
39:03
是不是你这边是监听,然后这边你可以看到SS这个not太也是说他永远不会超时啊,就是反正主塞这里,除非你退出代码,他才会退出来,然后这边往下面重点去看的是什么了,就是接下来啊,重点是看到我们这边有一个NT,也就说等一下,就是我们从这个三出来后,那我们等一下肯定会跑到287行这个代码里面。就我重点是往下面去这里去做分析,然后我这边我是可以去打断点啊。好票就是我们在287面。278还是2872?4287。我们打断点,然后我们再个按这个啊外跑,那我按这肯后,你可以看到是不是就回到我们这个协统里面来,他就是退出了我们奥的这个调战一场场就是会返回我们对应FD。
40:08
他这边就会返回一个新的FD,就是新的连接进来,那然后呢,关位朋友刚才我给他讲就是SS,它就是可能性性比较强,就是因为它这些回调函数,它不像CR10于那种帮顶那些机制会这调用站特别复杂,就是它这种调用的时候,它就直接就是对向指向这个这个这对象指向的这个接口,就是怎么说这个虚函数,就是直接等一下它就会跑到,就是你这个鸡啊,应该说子类个子对象他对应的安他会跑到跑进来,就你看掉站就会比CR10一会清晰明了很多。啊,我这边我忘了,忘记给他去搞一个C加11的这种堆栈,就是这种函数,反正看起来很绕。
41:02
好,我们这边按S进去啊,我我现在287行按S进去,就是进入我们安。我就把它跑进来,然后我们跑进来的时候,那你这边你就看有什么SS,我们再往下面看。这L看一下先,那你可看到他最终最终他这边会掉一个,So,我看很多朋友可能有点懵啊,这什么意思啊,为什么你这么去讲啊老师,那我再给他去看这个调用站的时候,那我要回过头来啊。我等一下,我们要跟监听的代码去做对比。你可以看到这边我们现在是最终回到SSO的一个处理,就是我这边处理新的连FD连接进来,然后我们这边看到这边是不是刚刚我们看的时候有SS,还有SST是不是。
42:04
也就说我们这一层堆在一层一层了,诶又是反过来了。我们把他拉到这里来。好。大家理解当老师讲的这个意思了没有,就是你这边我给他家去拉一条线了,你SSO。是不是看见了没有,就本身你监听进来的。现在呢,那你这边就是收到这个后是不是,那我这边我就就相当又回调到我们so里面来了,我们看的时候。所我们看要做一些操作。刚好反向过来的。所以各位朋友就说我们可以根据这样一个堆栈,就不断去反向去阅读我们代码,我看才我再次强调的是,就是不要就是哎正向去阅读代码,就尽量去通过B的方式,就不断去把整个调站把它给理清楚,然后再去看代码的一个实验细节。
43:23
啊,那这个时候我们很明显啊,我们这边就是要回到里面来就可以了。我这来看它到底是实现了什么东西。是不是我票这边我们就看这块就很方便了,那我这边我们再下面可以讲下啊,就讲之前我要再继续往下面去给他讲。刚才我们讲了一个123,那以后呢,我们这边讲就是我收到新连接调,那第四个,那我们要做什么,刚有没有去搞过服务器开发了,就是或者即使你是客户端,那你一个链接,那你肯定是要去创建一个对象,就有新的FD来。
44:06
要实力。画一个对象去绑定对应的FD。那我们很明显就说我是不是要去创建一个阿皮开的对象会票,是不是我去创建一个阿开对象,那然后呢,我们这边再来看这个代码的时候,那这边fd to s点这个。为什么点这里来了,为什么不点别的呢?因为这个函你看这些函数啊,就主要看了,就是从这命名上来讲,就主要是FT这一块,然后这边还要传了一个type,怪,这我们刚才是不是有看到,就是我们做的时候啊,就刚才调这个什么ss so的时候,有HP等等,还有H,还有这个的,他有说我们这边你看这个的时候,他这边就会有不同。
45:07
也就说我们这边呢,就是这个type啊,他在创建这个SS的时候,他也会绑定不同的,然后你回调的时候,你要创建RP相关资源,还是创建htppi相关资源,都是通过这type回调过来的,回调回来的。所以我们这边你看这个代码的时候,那你看这边是不是我们现在是R的连接,那你回调过来,这个台就是R的资源连接,所以大家理解了吧,这边是有S。然后我这边再点API进来的时候,那你是不是就很容易去看,很容易分析啊,那你往下的时候呢,重点是看下面这块,就是你创建连接是不是就非常非常简单明了了,我这边我就是来的是天皮,然后你这边呢,就是去创建一个RP连接,是不是很简单啊。
46:12
好,这边我就把它拷出来就好了。看一下我卡到。好,这个地方里面了啊,这边就是我们讲的是创建一个。FD的一个链接,大家理解了没有,这这里讲就是我们要绑定FD去实际化,然后我们接下来重点就是要给他讲,就是哎,第五步我们要做什么就不要做什么了,那你这边跟他讲,我这边我要有新的连接进来,那我现在我这个连接我也已经创建,就我new了一个SS,那我接下来我是不是要去读取数据。要读取RTP的推流数据。那怎么怎么读呢?像如果是嗯加了它是通过的机制哦,但是就是如果是SS,它是携程,那它是需要绑定一个携程。
47:08
就是说这个SSRP开始呢,它是需要绑定一个携程。就绑定了一个携程。去处理这个数据读取,但是大家需要注意的是,就是对于阿里匹卡来讲,它不单只是有个携程啊,他这边我要重点先给他讲,就是他又会处理两个协程,一个就是专门。专门用来。统治这个马流现实了。这边是写统一。还有两个携程,还有携程。专门用来负责读取数据,他这么去分开来的,这个具体啊,就是要看大家,就是这个设计啊,就是他只用一个协程去读数据以后加上统计也可以,但是呢,就是他为了这个耦合系,还有一个效率的问题,就是用了两个携程,什么意思啊,我们一点点来看,等下会重点给他讲啊。
48:22
好,那我接下来要重点给大家去讲了,就是这个就是连接跟携程绑定一个问题啊,大家可以看到就是说刚好我们代码在我们这边创建完这个应用返回后,我这边我给去打一些断点吧。之后我们这边你可以直接在SSRB开里面打端点了,就很方便去分析。好。然后这边我要给大家直接讲的是,你这边会有一个cycle,就是你绑定那个携程那里肯定会有一个cycle。那这边啊,就是S大家理解了没有,就是以后你看S嘛,只要看到,只要看到,那他肯定对应的这个对象,就这个类人对应实际化对象,他都有自己独立的绑定的一个携程。
49:16
好,这边是我们对应一个协程运行的一个循环,在这个cle里面会进来,还有就是我们准备去启动一个协程,在这边就可以找到我这边S。这个start看到了没有,这启动携程。在其携程的话,本质上来讲,他这边是调是这个的start,你可以看到就是如果要绑定一个写程,那你这边在这个类里面啊,那你是要包含一个S的。就是如果。某个类实例化后的对象需要协同。
50:04
那。一定要把该变了。放在类里面。大家理解了没有,就是我们讲就是你要把那个鞋厂,那你把它包进来啊。有跟他讲,就是他最终会调这个start,这边就会调到我们对应的这个协统库里面了,好了关就我们重点是关注这个start这块就可以了,然后这边你可以看到我这边我这个断点有没有打进来,哎,我们还没有打进来,那这边我就可以打断点进来,这边就是有这么几个断点啊。好,那这边我们要跑进来了。一层一层往里面开了,这样子才行啊好,那这边我们把它跑起来了,把它跑起来后,是不是像刚才大角这边你要去创建ssb,那这边你就可以看到这个调用站的时候,那是不是刚好我们里面进来的是不是啊。
51:02
然后这边再继续,再继续按这continue,这边就调这个start start是不是刚才老师讲就是在S里面。刚刚我们是不是已经看到它有第一个start,是不是这边就是做了一个抽象,你可以看点进来这个start的时候,它就相当于这个虚函数里面去。在这块里面绕。这个携程怎么说他不是用C加,是加本身自带的携程啊,就是这里我也给他讲一讲,就是C加加本身带的携程,我实际上他也是半吊子,而就是不太建议大家现在就去搞这个C加十这个啊,不是C加十药,C加应该是二零还是二一,但是不不建议大家去用啊。你还是用这种已经就是多年。有多年这个使用场景的这种协同库吧。
52:02
好,那我这边我们再往前面看了,大就理解这个逻辑就可以了,那我这边再往前面看,我们再不断去往前面看的时候,这边又有这个来,我这边就去把跑一下去,大家可以看到像这个S。大家就要关注啊,刚才我是不是有给大家讲过,就是我们这个链接啊。开始他肯,他要搞一个协同出来。那这个时候呢,我们就可以不断去往里面看这个协同具体是怎么去处理,那你这边比如你是协同,那你肯定是不是要读,而且平写一些数据做处理啊,像我们这链接就管联是推流拉流,都是进量,对进到这样一个筛口叫推流拉流,就是他这个链接它是没什么区分的。这连接连接的原理,连连接。它原理是一样的。我们唯一不一样是什么呢?就是阿协议里面他会去分这个是推流还是拉流。
53:11
是这么一个逻辑啊。好,那这边我们再往下面看,再往下面看的时候呢,怎么去看呢,怎么去看会容易些这些。很多朋友经常问大老师,那现在你我知道是在这个cyle里面咯,但是我点SS阿P开始CC口的时候,那你点进来看还是一头雾水,可能那个位朋友怎么看呢,我这边我就直接点单一点啊,大家可以点到这个多S里面,一般A人就是真正做事情呢,他是在这个多塞Le里面,就是对于这个C口呢,一般来讲他会调一个多塞口,调完一个多塞后,他会有一些就是处理一些资源释放的问题。就是我们重点还是关注这个带do塞克这样的一个函数,然后再往下面看的时候,你像刚才大老师讲,就是你像这种握手是不是RT皮握手,那这块叫推拉流都是一样了。
54:17
所以你就可以看到像阿皮读塞里面,它是有很多就是共用的后就不断往上面看,往前面看。共用后,那这边还有一个。Cycle它里面。再往下看的时候呢,他这边我们要稍微找一找啊,你看这边这个使劲杀一口一点一点往下面看,我稍微讲快一点啊。你看他这边有这个阿批,还有这publish,他怎么去分,怎么去分,到底是属于哪一种,那各位朋友你如果你不太理解,就是对这个鞋还不是特别熟的时候,那你大家可以看到是就我们这一个播放就只有一种,要对于这个推流这边有三种,到底是哪一种,那我们可以自己先打断点啊,就是比如你一个推流了,那我们就点这个。
55:13
Publishing。我就在这个就是推流这个函数里面打断点跟他讲,就我们这边是推流。要推这具体这个分了。是在这个publishing,还有这边拉流。是在我们培里面,那我们这边是不是要去考虑打断点了是不是。好。那这边还有pain。好,这边我就把它拷出来。
56:01
我这边还是直接把这块。好,把这个ss live source也打印出来吧。等一下也会给他讲s life so是什么意思?好大理解了没有,就是具体这个推拉流分流,就是在我们这个链接里面,他是在这里面去做的。好,这个时候我们就把它跑起来了,跑起来后那有什么用呢?那就可以看到,现在肯定我看还能不能动,因为是有可能是超时了,快跑现在。应该是已经超时了,就是我们打断联的时候呢,主要是理解这个逻辑流程,那现在已经超时了,那怎么办?那可以我们再推一下嘛,再推一次流,那这边我们推流后,就我们要正常跑跑起来。大家可能要稍微打快一点点,好,我们这边就可以进到帕这边,你可以再去看这个链接的时候,那你就可以看这样一个逻辑啊,就知道在哪里去分开了,就再去看这个细节吧。
57:12
我们再往下看。张先开的时候,刚才大老师已经给他讲,就是我们这个就是本身阿皮开始对推流来讲,他绑定这个携程了,他只是用来做一些统计信息及别人的一个码率啊等等之类的,他这边还需要去创建一个啊。专门用来接收流的这个协同,大家可以看到这边就有一个流专门创建了,大家看到没有。看到了没有,大家看到这边是推流,它还有另外独立这个携程啊,你可以看到这个有个地方很关键。这是我们看你这边是有把这个寿司就传到我们对应的这个,呃。
58:02
推流接收鞋从里面来,然后这边还有我们FD。就我烧FD啊。很明显吗?是不是当然了,他这边也把我们这个连接这个电直接也传进来,就是因为你后面还要调用到这里面的一些接口什么之类的,调到这个SSR皮开的,那这边你可以看到,就是把我们这个写解析一些R皮这里也传进来,加平免主要是做一些写解释相关的一些操作了。啊,大家理解了没有,就是这么一个逻辑啊。好,就讲这个S之前呢,我要给他去理类,就是这个这个问题啊。那这边是有一个source,就source一个问题啊好,先把这个。
59:01
先把这块先把它拷出来先。好,那这边我给他去理一理,这个S就在我们,比如这边来刚我们讲一个推流是不是推流,那你这边肯定是对路一路流会朋就是推一路流就对应一个S,不是应两个了,大家一定一定要理解哦,因为我们就是这个相当于是这个流圆,然后呢,这问题就来了,我就我拉流,就我们多人拉流。我多人拉流,那怎么去处理这个拉流的问题呢?那比如秋香是不是还有比如张老师也来拉流,还有K老师也来拉流。那这里就有一些问题,我想问大家,就是我其实要怎么拉流,当老师怎么拉流,看老师怎么去拉流,刚才我们讲了,就是我们段拉流的时候,第一点呢,你肯定是也要对应。
60:08
创建。这是一个。SS。这第一个就是也要开启一个携程。这个协程呢,就是协程负责从队列。夺取。读取,这个就是流媒体数据。然后。通过烧发送给这个接收端,大家理解吧,就是相当就是发送给,比如秋江大师,K老师是这么个情况,那然后问题就来了,刚才讲就是我们这边讲就是你开始一个协程,大家很容易理解,因为刚才我们讲就是跟推流一样,他要开一个协程,只是说推流它是有另外独立又开了一个鞋厂,专门用法接收数据,但是对于我们拉流,它就只有一个鞋厂。
61:06
也也只有一个协商。和这个推流是不一样了。那然后问题来了,就是我们这里讲这个协程,从数据读取这个流媒体的数据,那这里就会涉及到就是我们。讲到一个队列的问题啊,就比如其他老师他也要有一个队列啊,K当老师也要有一个队列,大家理解意思没有,那K老师他也有一个队列,队列这样的个目的是做什么呢?就是我们SS的时候,他是要去管理对的队列,就是你有多少个人来他这边要给你,就每个人都创建一个队列给你给哎,其他就从这个队里面拿,当然是从自己队列面拿,这样做一个目的是什么呢?我朋友就是我为什么我收到,就是我读到一个数据,我抽象出拉时候,我能不能直接遍利所有的这个拉流者,直接把数据发给拉流者。
62:03
可不可不可以这样子。这位好,可不可以这样子。这个问题啊,就是在我们之前面试的时候,就有个学员,他是做安卓的,在面试的时候就被问到过这样一个问题啊,就是当时他虽然说面试客户端,但是就是这个面试官,为了考察他对整个直播框架一个理解,大家觉得觉得怎么样?因为怎么说呢,就比如他问了一个,就面试官问了一个问题啊,就是如果你做这个客户端卡住了,就你拉流卡住了,那其他就是其他客户端在其他地方拉流,他会不会同样卡顿就同样卡,会不会这样子。然后当时我们学员还好,他听过丹老师的课,他就说赵老大老师这边去讲了,就是说就我们拉流,他是每个人都有自己独立的队列,也就说就我们某一个客户端卡住他不会影响到其他客户端,大家理解了没有,就比如其他老师他这边他这个队列,他网络卡了,他这个是队列没有及时拉走数据,然后比如你这边的我最大,我就给你分配五秒的空间。
63:14
就是如果你这边你五秒钟数据你都不拉走,那有新的数据来,那我就不断去覆盖旧的数据,大家理解了没有,就说我们提供这样一个队列啊,目的就是哎,各个队列拉流之间它不影响的,理解了没有?好,看样子大家都还是对这个还是比较熟悉啊,好,这边我们还需要给他去讲一些概念的,就我这边这样把这个先讲完吧。然后这边还有一个ss life的样概念,这边我把它给考写出来先。S life consumer里面呢,它含有这个队列。
64:03
大家可以看到这边它真正的就纯数据是存在我们S里面去。好,有朋有个问题问得好啊,就是如果我开队列,对一个内存是不是占的多。那队列要很多类型吧?看样子我们钢铁侠这位朋友啊,就是对这个零媒体服务器设计一些框架还是不太了解了,那我这边我给大家举个例子,就是我们每个队列都存五秒的数据,我这边啊,就是每个。队列就是人家说同一流。
65:02
每个队列存储我的数据,就是如果我们玛丽是三兆吧,我们就算算算三兆BPS。三加BP的话,折算下来就大概除以八。我们就写这就写啊,就512万。真美秒。这个最多就是0.5兆数据。那也就是说我们一个队列最多就是存2.5兆,这边只是。给他去讲了,就是大致的就2.5兆。这是质检了,刚刚我已经给他就删掉多已入流的哈。那我想问一下大家是如果我们有100或者1000个人拉流,他是需要到内存。
66:01
就同同个。马流,1000个人拉流。这需要多少?自己多少内存啊,摇跑甲就直接是2.5。再乘以1000,那这种呢,说明你对这个什么内存的一个使用啊,还是不太熟悉啊,那各位朋友就是我们这边内存管理它是你有没有了解过这个加加11的这种指针。大有去了解过,就有这种指针,或者还有阿那个八。这个这个AB。这个引用技术。有没有了解过了?
67:01
有没有了解过的呀?那基本上来讲了,就是它不会说不会做深拷贝的外,就是队列之间啊,他不会做岁月深拷贝,它是一种浅拷贝,就采用引接受方式做浅拷贝。什么意思呢?挂牌这什么意思啊,那打个比方啊,就是我们这边讲了,就是你这边有队列是不是,那你这边我们把这个队列稍微再画一下,就是换这样子一个情况,换这样一个情况。那比如我这个远这个受时的时候,我创建了一个数据,一帧数据,那这边现在是这个引用技术,我这边写这个if就等于一啊,大家致这么写吧,就我刚读出来这个数据,我引用技数是一是不是,那各位朋友就我要考到对应的队列里面来,那这个时候你引用技数就变成二,然后这边的引用技数就变成三。
68:06
然后这用技是变成四是这么一个情况,那然后怪跑这么边这个S,就我分发给所有的一个队列,就比如我这边三个队列,我分发完后,那我这边我要把它给释放自己的引用技术啊国票就是一定要注意,就是你自己用完,你要释放自己的引用技术,别人用完就自己去释放,比如这个时候我已用完了,那我这边我引入技术用减一,那就会变成三,大家理解了没有,就我这个SF25,我经遍历完所要队列后,那我要希望自己引用基数,现在因为你最后变成四,现在我要变成4.1变号三,那然后呢,就说对于我们这个队列来讲,我这边进的数据我进来,然后如果发给客户端后,就我发给客户端后,我这边我是不是再去做一个简一,那这个引用技术这个时候是不是就变成。二。这你这边啊,是不是等于二啊。
69:02
然后呢,再看。用完就变成二,然后到这个队列用完是不是变成一啊,然后再到最后一个队列就用完,它有技术是不是变成零,这个时候才是真正释放数据。大家理解了没有?这种引用技术的方式就是在就在这种只是说可读数据的情况下。适合。使用在呃队列里面的数据。只提供读读取。就不能不能写改呀,就是如果你那这些数据多队列能改的话,那你就不能使用这种语就说方式啊,大家理解了没有。好乖跑就是这块就是如果不理解的话,那真的是要好好去学一下这个X服务器开发了。
70:06
或者可以去看一下我们F课程,我们F课程就对这个引用技术就有进一步的去讲解好了,那这边我们再往下面看,再往下面看,刚刚我们已经给他讲就是这个ss publish s,他这边是用来收数据啊,他这边我们再往下面看,我再给他去把这个逻辑图给他去捋清楚。也就是说我们这边呢,这个协程他负责去读取数据,也要通过我们这边这个life这样一个对象去分发数据。就分发的时候,他会给到每一个不同。这个康就是在中间。然后通过这个队列里面去做处理,然后这边才是我们对应的C,我要给他去找一下这个。
71:16
好关好之后,我们这边你开找到这个里面,然后我们要找到这个do playing。可以看到就是过跑,就是你看SS代码的时候,就是如果看到有一个多配度前缀了,还有你后面可能还有一些函数,就只命名为后面这个play play后命其他的那你可以看到就带一个度字的,那才是真正就是处理实际问题。先处理的一个实际业务问题。那这边我们往下面看的是这边,我这边我就给他去找几个例子吧,这你这边可以看到在我们SS。
72:06
里面就我们要去通过它去读。阿皮数据。就从。队列读取20P媒体数据。就我读出来后,那我们这边就需是需要做什么呢?需要去发送。阿P3的这边尝试正确发送数据。这是我们客户端做的。好,我们点到这个单里面来,我们要打一些端点。好,我们点进来。然后我们这边也在send I message里面打断点吧。
73:01
因为这边是推给客户端的。但是它里面还有很深,那些战的只有我们先讲这一场,先。好怪朋友,我们看才看到就是我们要读数据,是不是就我们从队列面读数据,你肯定是不是想到,那怎么把这个数据放到我们这里面,这个队列里面去了,那他这边呢,是不是有一个in q这样一个操作跑,所以我们也要去这个in这接口里面打一些断点。好,这边我们来看,我把它给出来啊。就这边说我们在这个携程里面去掉了,好,就我们把这些断点打进来后,那这边我们在进一步就把代码跑起来好了,现在又已经超时了,我再强调一下,就是如果超时了,那很简单啊,就是再重新推一下流就可以了。好,我们就稍微跑快一点点。
74:06
我看看这边有没有超时。这边没有进那个断点吗?是不是有点奇怪,我们那个in q的断点我是不是没有打上。票稍微等一下这边这个ss life consumer in。我们看这个消失。好,我们再把跑起来。没理由不进来了。看一下,我就稍微等一下。
75:03
我们找到我们刚才配音里面的。这个代码它不可能不进来的。是不是出现了什么问题吗?看一下我直接SS里面Q里面打端点。哦,各位朋友,我知道为什么不进来了,大家知道为什么没进来了吗?因为我这边我没有人去拉数据,就我这边还没有去拉流,那他肯定就不会往我们这个队列里面去扔数据,是不是,那我们肯定是要去创建一个拉流,所以各位朋友就是一定要注意一下。你肯定要去拉流人家才发嘛。所以这边我们再开,再开一个窗口。好,这边我们通过play去播放啊,我们这边播放的时候,那这边也可以看到,就这个播放里面它也是一样的,就会有很多这个堆栈,就是创建连接的时候跟刚才。
76:05
腿都是僵了。好像就把它跑起来。你看这边就进到这个里面来了,然后大家可以看到这边就进到这个里面来了,然后我们这边在重点去看这个逻辑的时候啊。啊,这边这个in这块还是就还是这个交互相关的就。就是这个盆里面读什么东西啊。你看这边也有读的,我这边有读的是我们在里媒体服务器就缓存了一些麦,Data,还有PSPPS这一类的数据,这刚刚接进来的时候。The。而PSPPS这些缓存的数据。因为我们RTB推流,它不是一直的去发SPSPPS,它有可能只发一次,所以服务器要把它缓存在这里,所以第一次你看这个in的时候,它并不是在我们这个source,就是不是在。
77:14
Publishing。这个里面了,等下我做一个对比吧。我是要把跑跑起来。把跑快一点。或者来讲看这边还有GP catch这边有有有很多啊,所以我们这边还是先把这个端点先断掉,有点影响。救援先把跑跑正常了先。我先把它跑正常的先啊看这边这个disable,这是一个12也是一样,就跟刚大家讲,就是我们当数据,就从队列里面当MP数据,还有我们发送数据都是在IP都配里面去做的,把它跑起来。
78:07
我们打打一个下去看好这个in q到我这边跑起好外靠这个时候我们看这个in q这样一个操作,跟刚才我们刚进来的时候,缓存这个ma s SPS PPS,还有GP这个读取,那明显就不一样了。这边缓存数据变化包括G。有些朋友不知道什么叫交P,你可以去加下全老师啊,之前我专门讲过一节课,就是推流推拉流直播延迟一个问题,这个交P卡也会影响我们这些延迟的问题,影响这个秒开的问题,大家在面试的时候也经常有被问到,你不了解的话,那有可能就是面试官认为你根本就没有实际做过这直播的开发,就你对这这P卡啊概念不了解,那肯定面试会打折的。
79:09
好,这边我们就再来看看一看这边啊,大家都是in,但是in就是我们从哪里数据来不太一样。你看。就我们现在就是正常开始播的时候了,那这个数据他是从我们接收携程里面来的,大家看到没有S的。从这里来的了。还有我们这边刚才看。Oic collection。Went to Paris。好,我们这边再来看这个这个逻辑的时候。你看ss publish this side,就是他这边他自己,他不是说自己就是一个写程啊,那这边它也是绑定了一个SS就这个才是真正这个携程。
80:18
好,外炮就大致理解大致一个原理了,没有就是如果你还不是特别理解的话,那你可去打一些锻炼,去不断去做一些分析,我这里对这一堂课就做一些总结,那就好听,一定要听一下这些总结啊是我们刚才讲就是这个流媒体服务器。他这个协议就是你肯定要是要支持这个协议转换。就是协议转换,比如还有一些R转TC啊等等之类的,就是讲那个协议转换,还有刚才我们讲就是我一路流。多拉柳。
81:00
他这个逻辑框架是怎么样了,那就是对应到我们刚才讲了,你这边呢,就是你是需要就每个人都有自己独立的这个拉流队列,而且呢,它这个拉队列它是可以去设置最大缓存数据的时长,就是如果超过这个最大时长,它就会不断去把新的数据要覆盖旧的数据。并不会说,哎呀,我这个我放不进去了,以后我就直接丢掉,它不是这样子啊,它是不断去覆盖旧的数据,这点大家一定一定要理解的。就是使用这种各自的独立队列,就是为了避免就是我们拉流某个卡住了,不会影响到其他队列,还有还有一点就是我们就是不同的队列之间,因为它这个数据它都是只只读的,它不需要修改这个队列,那他就只需要通过有用技术的方式去来对这帧数据,这个技数加一说明就是有多少个人需要用这个数据,当这个引用技数减为零的时候,才会去释放这个数据,这跟C语言C啊,跟C加加的造指针它是类似的。
82:10
是这么一个情况。那还有刚才讲到就是对于一个连媒体框架,它肯定也会有一些读取配置文件,就就我们一开始就讲就读取配置文件,所以我是建议大家也可以去看一下,去查一下,就是他一个读取配置文件,它是怎么去读取,那这样子就是方便去跟踪代码,然后接下来跟他讲,就是只要是这种连问题服务器框架,特别是TP的基本上都会有这个。还有这个奥赛。还有这个是根据,就是实例化。一个对象绑定FD等等这样一个操作去把我们就是这个连接把给组织起来,刚像刚才讲就推流拉流,比如讲是SS。
83:07
天开心。是不是就是这样一个原理啊,所以大家一定要学会这些套路上的问题啊,千万刚刚就千万千万不要直接从main函数里面。画图画的以后重面函数,一个分支一个分支,就这样子直接去画图啊,那这样子呢,你就会发现这个代码太庞大,因为我们很多时候怎么说呢,不会说一下子就让你从头去实现一个零媒体扶起,所以就是我们呢,就是大多数时候就是根据现有的框架去做一些改进,做一些改动,二次开发,所以就是你主要来讲还是先把大体的这个服务器框架先理清楚,然后再去关注这个协议怎么去具体的去实现,是这样一个逻辑流程,千万不要本末倒置,看有些朋友啊,就是一上来就天天就看这个阿T皮克,天天就对这个协议的去看,就对这个整个框架大致逻辑都不太了解,像比如刚才大老师讲就是比如。
84:19
这个推流这这个队列要不要这样一个队列,哎觉得,哎这个不知道,那个跑那衣服太大了这样子。好了,各位朋友,就是如果是想进一步去了解我们视频课程,或者想往流媒体服务器发展,我是建议大家可以去。看看我们有没的一些视频课程。然后加上。我们扶持科统。因为你做了媒体服务器开发化,不了解。Linux服务器那是没办法去做好的。我们来看。
85:01
C不熟能买吗?就要看你不熟到什么一个程度啊,就是这个C,就是这个类,你总会懂吧,就怎么去创建一个对象,你总会懂懂吧。这个懂吧,这只要你有C加基础就可以了,因为怎么说呢,就是我们在学习的时候,肯定是要不断去学习新的东西啊,就像你现在你个C加加不太了解,不太熟,那你以后你还可以继续去学,是不是就你边做一些项目边去看看这个语法就是可以的,我最怕是大家就是啊,天天就怕抱着这个加我这个我是不要看半年,然后才开始去做项目。那肯定不会这样子啊,就是你C11就C不是特别熟,那你就不用那么复杂语法可不可以啊,那一样可以的嘛。好了,那这边我们再先看,这边大家可以去看一下我们的课程啊,可以点到我们的人生交易。
86:03
可以点一下我们这边看看我们一些视频课程。都是可以看得到,大家都可以多去看一下。也视频的一个课程,好像服务器的课程。这我们服务器的课程呢,我这边我来去看一下我们这块。你可以看到这边是点到这个后台开发里面,可以点到我们CR11点到。啊,这点下C加加这边可以看到,这边是有有三个C加加腾讯认证的一个课程,但是这边呢,唯一一家高级的就只有零床教育的,就你这边点一下高级,但只有我们一家而已,没有别的了。所以大家就是如果你想往连媒体服务器发展了,你可以关注一下我们的课程,就我们课程都是不断去迭代升级啊。这是都是不断迭代升级的,像比如我们央视频道。
87:10
像我我们最近。现新增了这个OBS,这边就是有些朋友讲这个OBS源码我想看一下,但是我发现那个编啊就有点麻烦,但所以是当老师,上个星期啊,我就录了一个OBS,就是怎么去编译的,这边也会后面也会再去做一些,就是做一些源码的分析啊,就会不断去迭迭代啊。就买我们的课程呢,就跟你买了一个就地铁房的样。就类似购买了一个地铁的房子。在这个地铁房子就可以不断去带来这个升值,是这么一回事啊。就是不断去迭代了,大家就不用担心这个课程的一个问题啊。
88:03
因为我们现在来讲,这个音视频也只有一个录播课,现在没有规划开新的这个音视频录播,也就是说最近新加一些内容都会不断在上面去叠加,就是,所以大家可以去了解一下我们现在现在一些视频课程。已经有200个小时了,大家可以去对比一下其他一些课程啊。其他课程可能就是新加一些内容,就会另外开一个课程去卖,那我们这边没有啊,就是我们有新的内容都会还是往里面去加。所以大家不用担心这个学习的问题,那至少来讲,这个这两三年都还会不断去更新一些新的知识,像今年。打算更新的就是也会这个SS5.0,就是这边会加上88RTC级联这一块,那我们后面就是等SS这一块就开发的差不多的时候,我们这边也会做进一步去更新的,大家都是可以去关注一下。
89:05
好,刚才大老师讲到这个media。啊,准备到年终的时候,这边也会做一些增加了,但这一块来讲,主要是讲RP这一块的,就是这is media,我们主要是讲P这块,就是年终价值去增加,然后SS这块呢,就主要是讲的是。我把阿PHS。HTPI表B。还有外八的斯。因为我们就是每个流媒体服务器,我们都会有侧重点去讲,不可能说哎呀我每个服务器我都讲一模一样的东西,那这没有必要啊,就是我们尽量是对就某一个模服务器,就某一模块尽量去讲清楚,讲清楚讲透彻一些,然后呢,就是你有了这个基础,你再去看别的服务,你就会发现这个原理也是一样的,大家理解了没有,就是学东西不能贪多。
90:06
这贪多嚼不烂。因为在面试的时候啊,特别是这种工作一两年了,很多时候。怎么呢,还是追求这个深度啊,而且面大厂来讲也是追求这个深度。这个跟小公司不一样,我不知道大家有没有去理解啊,就是大公司它也是追求的深度,小公司呢。有些是有些追求广度,但是这边只是讲有些啊,因为小公司也有一些比较厉害的。这是为什么会这样子啊,就是因为大公司他做的东西就是他会有很多人,就每个人就是做一两个模块就可以了,就做进自己的模块,就可以把这个产品做非常好,但是对于小公司,一个人可能做十个模块,他就是为了快速的去做产品,而且他也不太追求就什么性能什么的,不追求这个什么并发量,只要能满足业务就可以了,大家理解不就比如有些公司就给打比方啊,就给一个本,给一个线。
91:24
就给一个线做一个什么网站。你说需要什么呢?就是含量吗?就是一个线,他一个网站一天能有到个访问量,所以他招人的时候,那肯定是你能搞定业务就可以了,难追求什么百万并发什么的,他肯定不会了,但是呢,就是对大公司,如果你比如一个京东。还有天猫这种一个网站多少人去看,就同样是做网站。那这个技术要求很明显就不一样了,所以不乖就理解了没有。
92:05
就理解为什么就是大公司追求深度了没有啊,小公司为什么追求的广度了没有?好了,那讲了这么多,大家如果是需要进一步去了解我们课程,一定要去加上我们其他老师,我把其他老师QQ发给大家。C又不太熟,会有入门课程啊,我们有一个C项目实战了,你可以看到刚才有没有看到,就我们这个。初级这一块了,就是这是有七家讲解啊。你也可以去咨询一下钱老师,这边是打包是优惠非常大。你可以看看是能不能打包一个这个C加加入门实战的课程。
93:00
好,我票就是有什么问题可以加上其他老师去讨论一下,去了解一下,我们其他老师很专业的就对,就是我们学员需要学什么,他会推荐什么,我们就是我们这边啊,就不会说,哎呀,你们不适合学这个高级,我们就给你推高级,那不是这样子啊,就是你如果你目前适合学初级的话,那我们就可以给你推这个初级线。大家也可以去看一下,就是我们以前一些以往以往一些招聘啊,一些信息啊,都是可以看一看啊,还有我们学员,我这边我也给他讲讲,就是我们学员,就是我们不像可能有些机构像可能送外卖的也收,或者这个送快递也收,那我们不会这样子啊,就是怎么说呢,因为这个CC加加服务器开发这一块,或者音视频这一块,它是需要一定要知识积累,就是需要一定一定要计算机素养,大家理解了没有,就是比如你需要掌握一些网络基础啊,需要一些编程基础啊等等,那这样子就学了,对大家才有好处,如果是一个就是呃。
94:06
送外卖的,那真的搞C真的很难啊,我们真的不推荐学。好了,那今天我们就先讲到这里啊,感谢各位朋友。好,我们时空里后这位朋友,就是如果需要资料可以去加下其他老师,就是上课这个课件什么的是可以发给大家的。这个课件我后面还有一些别的一些都是可以发给大家,这边是讲他推拉流一些出刷模块,但我刚才没有讲。大家都是可以作为参考一下了。大家都可以参考一下吧,这边还有一些别的一些稍微干货一点的。送外卖真的真的挺难了,我朋就说刚好我并不是说送外卖就不能学,只是说我们不不会不会强推,大家理解意思不就是如果我们学员他愿意学,我会把这个事情给他讲清楚,他愿意去尝试,那我们尽量的去帮助他,因为怎么说呢,这个人啊,他如果有毅力,有意愿,他还是能够,就是往程序这条路发展也是有可能了,那我肯定不会去忽悠他,哎,你学这个C加加肯定能找工作,我肯定肯定不能这么去忽悠,是不是?
95:29
好,那感谢各位朋友。
我来说两句