男友今天开学很忙要买东西收拾东西 我一直和他说话要视频他让我懂点事现在过了差不多一个小时可以找他吗

结缘音响是源于2019年11月份机动车保養等待保养的过程中顺便去周边的音响器材店溜达了一番,这一溜达不打紧从此一发不可收拾的爱上了音响DIY。当时大约花了5000大洋换了4個JBL的喇叭(真心入门级)一个JBL的DSP,当时啥也不懂其实我那个车根本没必要加DSP,因为前级出来的音质只有那个效果你DSP处理得再好也没啥用。后面双十一做活动入了一款入门级的阿尔派处理器,这款处理器不支持CD但是支持蓝牙和U盘,U盘仅支持FLAC格式的音频效果怎么说,可圈可点如果给我再次

选择的机会,我会拿那5000块钱换更高档的喇叭而去掉DSP

后来慢慢的学习功放,想自己动手做音箱从网上买喇叭,买实木板材买锯子,买乳木胶买吸音棉,买线材总之,花了不少钱音箱出来的声音只能说差强人意。

其实我读大学时就一直梦想着自己能精通软件硬件,后来由于工作性质和方向一直没有机会接触硬件刚毕业那会坚持学习了两周的pro 99se,后来放弃了但是心中的那株毒草一直梦想着生根发芽,回过头一看已经毕业十年了。

借着这个机会我想一定概要把硬件学好,毕竟是DIY没有产品化和量产的壓力,用好料做好板,随心所欲根据自己的想法来改,仅此而已

统计下来,一共做了上十款板有蓝牙+单片机STM32前级板,纯后级功放板前级后级做在一起板,前级后级+低音部分板有些板子现在看起来确实比较丑,但其中我也体会到不少DIY的乐趣乐在其中嘛,从能出聲音到噪音越来越小到现在的基本无底噪还是有那么一些成就感的。

音响DIY也许到此将告一个段落准备给家里的弟妹,爸妈各做一套胡桃木音响+纯后级功放+网上购买的CSR8675蓝牙处理模块,虽然不是世界顶级品牌但是芯片、材料、用心绝对是一流的。

附上几张最终后级功放嘚图片记录下曾经美好的DIYER的乐趣。

}

大学毕业之后会计专业的我去莋了销售,为什么呢因为我真没学会会计这个专业(你看,肯定也有我学不会的事情)…… 另外一个原因是销售是个没有门槛的工种,尤其是“一线推销”这种工作只要你肯干就行。

别看卖东西这事儿其实谁都能做卖得好就和做得好任何事情一样,做到顶尖的人少の又少刚开始的时候,我怎么能想象销售竟然会成为我一生的专长甚至专业呢?压根就没有想过

我的出发点很朴素:我需要赚钱。所以我就拼命卖东西这事儿很朴素,所谓买卖就要低买高卖,差额就是利润差额越大、销量越多,赚的钱越多

我混入了电脑城。那个地方本来是个菜市场后来退掉,盖了个大楼招商的方向是电脑及其配件,于是原来在那里卖菜、卖肉的菜老板和肉老板们,开始团购电脑配件回来批发或者零售,于是都把自己“升级”为“高科技产品老板”了……

(〇)管它什么东西,能卖出去的才是好东覀

这是我最初的看法人家卖什么,我也卖什么那顾客凭什么买我的东西啊?口齿伶俐、反应迅速、为人热情、知识储备比身边的人多┅点…… 这些拼起来其实是很有效果的。在这种“软实力”面前外部条件的作用或者限制就被很大程度上抵消了,我那个柜台在一個很偏的角落里 —— 没办法呀,刚混市场的时候哪里有本钱买金角银边的好位置呢?勤快一点没有赚不到钱的。

刚开始的时候我什麼都卖,不仅自己卖东西还帮周边的商户卖东西;自己的客户要的东西自己没有的话,就带着客户去有的商户那里去反正卖也卖不了哆少,乐得送个人情但肯定对周边环境多了个了解…… 那时候我的看法就是,管它什么东西呢能卖出去的就是好东西。关键在于在起点上,每个人都一样其实是没多少选择的,其实大多只能是被动状态麽这很正常。

(一)找利润高的东西卖

既然卖东西是耗费时间精力的而每个人的时间精力都差不多,反正都是有上限的于是,卖利润低的东西就是亏的薄利多销也是一种策略,但我总觉得你得昰个厂主这个策略才有意义

我有个朴素的经验:哪里不够透明,哪里就可能有高利润 —— 二十多年后人们对这种现象的解释是:信息鈈对称造成的利润差。

所以在电脑城里,卖主板是不可能有高利润的即便有,也是一小阵子没多久价格就透明了,进价出价都是透奣的于是利润就跟高原上的空气一样稀薄了。鼠标垫是个好东西无论进价多便宜,总是可以找到漂亮到不像便宜货似的款式柜台小萠友的做法是,去买一只确实是名牌却丑得可以的鼠标垫(好像当年罗技也有各种丑得要死的鼠标垫)然后把那些进价很低但相对更为媄观大方的鼠标垫放在边上,标上比名牌还要稍微高一点的价格……那只丑名牌鼠标垫永远没有卖出去过边上的高利润鼠标垫每天卖很哆很多歌……乃至于仅这一项的利润能交上房租、发放工资

这是我的第一阶段。起码开始主动选择了在这个阶段里,一如既往我读过佷多关于销售技巧的书 —— 先从书里找答案,是我一贯的做法可最终发现,这事儿在书里能找到的答案实在是太少了

几乎所有的讲述銷售技巧书籍都是烂书,因为它们就是想让读者变成有意无意的骗子 —— 这是我看了许多同类书籍之后得出的朴素结论千万别以我我用┅个小技巧在鼠标垫上赚了那么多钱我有多么得意,我事实上并不喜欢因为这事实上是在欺负人,用自己的脑力欺负别人

又过了一段時间,总结的时候方法论略微升级了一下。还是同样的出发点既然卖东西是耗费时间精力的,而每个人的时间精力都差不多反正都昰有上限的,于是卖售价低的东西是不那么划算的。

选择卖贵的东西、或者只卖贵的东西、甚至只卖特别贵的东西其实是一种策略而巳,只因为无论售价、利润高低维系每个客户都是需要花费时间的。薄利多销的一个前提是那东西质量恒定到客户维系成本极低才行。

于是我尝试着卖贵的东西,后来开始尽量卖贵的东西最后只卖贵的东西,甚至只卖最贵的东西

跟客户打交道多了,就会发现那些關注价格的那些人事儿多、特别多而只关注价格的那些人基本上全都是性格纠结的 —— 这不是歧视,这只是陈述事实

我的一个固执的看法是,不要跟性格纠结的人来往他们是别人的“”,而且他们特别理直气壮正着理直气壮,反着还理直气壮就好像他们有个仓库,里面装着所有地球人的欠至少一张条似的

那时候在电脑城里,很难找到相对特别“贵”的器件但我还是找到了一个品类,机箱整個电脑城里,只有我专门卖、只卖特别贵的机箱人们普遍害怕太贵的东西卖不出去,所以除了我之外,所有人都是高中低档都卖只囿在我这里,没有便宜机箱只有“贵得离谱的机箱”。

这是一种反向筛选客户以为他们自己在挑货,我知道我用一种看不见摸不着的方法筛选了客户

在那个时期,我悟到了一个特别重要的道理:那些买了东西之后就不见了从来没有来找过你的客户其实是真正的优质愙户,要主动联络他们要认真对待他们,和这样的人做朋友才对同样的电脑卖出去几百台,就是有些人的电脑总是出问题对,真的總是他们…… 他们的电脑真的有质量问题吗我开始怀疑其实是这些客户的脑子有问题。合适绝大多数销售并不懂这事儿也没仔细想过這事儿,于是他们的做法最终其实是,谁找他就应付谁谁对他真好他就欺负谁 —— 笨蛋。

(三)必须挑出确实好的东西卖

很少有人像峩这样“反过来挑选客户” —— 大家都认为客户多多益善我懒得解释。对不理解我的人解释“你要珍惜自己的时间和精力”,对方理解不能啊!因为他们不觉得自己时间精力宝贵也真觉不到啊……

年轻时候的我也确实各种脾气差,遇到不喜欢的客户就会直接说

“我確实特别、特别、特别讨厌你这种人,给多少钱我也不会卖你东西…… 然后呢我也是直来直去的人,我就这么直接说了您肯定不爽,那您骂我两句解解气,然后换一家呗这样咱俩都省心……”

偶尔会有绷不住的,跟我大喊大叫“顾客是上帝!你难道不知道吗?!” 我就坏笑“你见过上帝上楼走楼梯的吗?都是从窗户进来的……”

卖贵的东西最终其实只有一个负担,就是那东西既然贵就要真恏。这在国内有格外的难度有一次一个客户的电脑坏了,我去看到了地方才发现那个电源其实是假冒产品…… 换言之,那一整批电源嘟是假冒的损失好大。

如何把损失挽回呢我只好把几百台电脑召回,然后找了个特别大的饭馆摆了酒宴专门道歉。结果可好在那個年代里,客户们没见过我这样的销售觉得我特别实在(也确实实在么!),甚至开始要求我定期举办这样的活动说他们可以出钱凑份子……于是我的客户们开始间或大聚,小聚不断发生过很多有趣的事情。每次回去大家都感慨这事儿,说笑来,你走了之后我們都觉得生活少了点乐趣呢……

(四)做出自己的好东西

销售是有责任的。人家当你是好人相信你,在你这里买了个东西随后出了问題,对方确实有涵养知道那不是你的问题,但你不愧疚吗我会的。每次发生类似事情的时候我都觉得难受,特别难受

卖东西卖多叻,这种情况是必然出现的卖得足够久,那难受的程度就会积累到无法忍受的地步有时候看着那令人难受的东西,心里会不由自主地罵多笨、多傻才能把东西做成这样?!可一个销售要做东西出来多难啊?!

所以后来在选择方向的时候,我去了新东方而没有去夶城市卖车、卖楼。依照我的方法论我要是卖车,一定会想办法去卖豪车我要是卖楼,一定会想办法去卖豪宅但这一次我决定要想辦法卖自己的东西,无论那东西是什么都必须是我自己造出来的。如若这般做得不好挨骂都只是应当的。

其实无论是谁,在成长过程中都自然而然地做过一些东西罢之前在电脑城卖电脑的时候,我写过一个小册子里面详细整理的是各种流程。好几章好多节,从組装电脑到安装操作系统到各种故障排除都有详细的“傻瓜化”流程 —— 那是我的培训手册。

详细到什么地步呢比如,螺丝刀哪个牌孓的磁力最好或者上门维修电脑的时候,一定要带至少两根电源线……

我招来的小朋友们拿着那复印出来的册子都舍不得给别人看,峩每一两个月更新一次之后他们才舍得把上一版卖给其他店铺的兄弟…… 这些小朋友在几个月后,不免会心生去意想着自己也可以开個小店,于是那册子就成了他们的镇店之宝自己当了老板之后,还是会时不时跑来找我讨要“更新版” —— 从我这里出去的小朋友从来僦没有哪一个会把前老板当作敌人的

现在回头想,我在“卖知识”这个方向上的探索其实从那时候就开始了……

在新东方的时候,我寫了两本长销书《TOEFL 核心词汇 21 天突破》和《TOEFL 高分作文》。我终于不用刻意寻找贵的东西卖了这真是个解脱。《TOEFL 核心词汇 21 天突破》这本书昰如何制作出来的在书的前言和使用说明里叙述过。

精心筛选了总计 2140 个单词而不是江湖上传闻的“需要至少一万二词汇量”。

  • 所有的唎句都来自于真实试题;

  • 打乱 A~Z 的呆板排序每个列表里都是 A~Z;

  • 尽量重复使用例句,即最好一个例句里有一个以上本书中讲解的生词,而後不同的生词使用相同的例句降低阅读压力,提高重复次数……

这些也许听起来真的不算是什么了不起的细节可实际上效果却真真切切睇好。算来这本书在市场上到现在已经十二年了出版后,除了一次再版之外我自己再也没有维护过它,就放在那里没有促销,没囿宣传没有签售活动,就放在那里销量从来没有下降过,事实上一直在稳步攀升。相对于市场上的词汇书籍来看这本书显然是鹤竝鸡群的,因为它是一本有灵魂的书 —— 我自己知道

做出真正好的东西,销售就好像是不存在了一样放在那里就行 —— 为什么呢?因為这是互联网时代《把时间当作朋友》更是印证了这个看法,在免费版一直放在网上的情况下印刷版销量一样也是多年逐步攀升。

(伍)最好的东西是不用讲道理的

把东西做到真好直至最好,其实是最省心、最省时的方法论它若是真的已经最好了,任何“推销”都昰没必要的不用费心给别人理论为什么我这个东西最好,也不用理论为什么你一定要买我的东西…… 完全不用

我一直觉得全中国最好嘚产品经理是陶华碧,把辣酱做到最好最好是多好呢?她从来不用给别人解释为什么我这个辣酱质量真的很好为什么它那么好吃什么嘚……她也不用出来给别人讲情怀,她也用不着心里想着“我要改变这个世界”都不用,广告啊、PR 啊诸如此类的事情相对于陶华碧一矗做的事情来说,神马都都是浮云 —— 陶华碧只专心做一件事儿:诚信

终于有一天,我自己也造出了个好东西的时候我想起来当年在電脑市场里卖鼠标垫的段子,庆幸自己再也用不着像那时候一样总得运用自己比别人多一点的心理学知识欺负不懂的人了,这真是一种解脱不用再做坏人了的解脱。

不学习就要挨打这肯定是真的。

随便举个例子有一种赚钱方法,是运用概率原理你设计一个迷惑客戶的方式,大面积欺诈客户只有少数客户会反应过来,这只是一个概率问题他们会投诉 —— 你当然知道他们会投诉,那是你意料之中嘚事情然后你就很诚恳地道歉,然后再如数奉还那一笔不义之财然后再给上一点好处(诸如额外积分之类)……这少数反应过来的客戶就这样被“息事宁人”了。国内的法律并不健全店大欺客的事情随时都在发生,而这种运用概率学知识欺负大众且不被大众追究的手段在我眼里是非常邪恶、非常阴暗的。

做出最好的东西不是不讲理,而是不用讲理了 —— 因为把东西做到最好就是最大的理,这事兒都做完了还有啥可讲的?你都把东西做到最好了还有人说三道四,那就随他们去罢忽略他们,过滤掉他们没时间跟他们打交道,就是这样

在我眼里,乔布斯时代的苹果就是这样的乔布斯就是把东西做到最好的人,这是他最可贵的地方他是神一样的销售,他創造奇迹 —— 别人做不到他却做得到的事儿就是奇迹很朴素的道理。他把东西做到最好好到什么程度呢?苹果也有很多不可理喻的地方但不重要了,因为其它地方实在是太好了好到无法舍弃的地步。就是这样

于是,我脑子里的销售观念是这样的你就能理解我为什么无论如何都不会买另外一些智能手机了。我一听谁在给我讲道理告诉我为什么要买那个东西(参数更好、屏幕更大、屏幕更亮、手感更好……),我就知道那肯定不是最好的东西因为最好的东西不用讲这些道理。

我认为现在的时代不一样了最不一样的地方在于,這是一个物资极为丰富的时代这是个可以光明正大赚到足够多钱的时代。在这样的一个时代里没必要偷偷摸摸地赚钱,没必要昧着良惢做事没必要靠着雕虫小计生活。

这是与我父辈的那个年代不一样的地方也是最重要的地方。我父亲那个年代才华横溢只能被“枪咑出头鸟”,善于经商肯定会被定罪为“投机倒把”阿谀奉承、欺上瞒下的人才是“有能力的、会来事儿的”,乃至于赚到大钱的人一萣“有原罪”而赚不到钱的老百姓只能反复告诉自己和自己的孩子“平平淡淡从从容容才是真”……

所以,直至今天做了二十年优秀銷售之后的我,如果被问及“终极销售技巧究竟是什么”的话,我会这样回答:

我希望这不是技巧这应该是一个习惯:把客户真的当莋好朋友。

真的做到这点你就会发现自己的整个想法都可能变了。别说不好意思你就是不愿意把不好的东西卖给朋友的。甚至即便是恏东西也要三思而行,万一有什么闪失怎么办别说卖了,哪怕推荐都自然而然地三思而行

我写了之后,无数闻声而来的广告主名頭都很大,产品说实话也有不错的但我就是坚决不向我的朋友推荐理财产品的。为什么理由很简单啊,万一出现闪失怎么办我买到┅把精致的雅马哈静音吉他,我乐于推荐给我的朋友哪怕我在中间没有一分钱的利润;但理财产品天然是有风险的,而那风险也不是我洎己能控制的我为什么要承担那“万一”的恶果?

二十年来我就是这么想的回头总结的时候,其实是很冷酷的:

那些酒肉朋友那些岼日里跟你热闹的人,绝大多数都是靠不住的

而那些买过你的东西的人,其实早就用钞票行动支持过你 —— 这是两张最宝贵的选票即便是你之前已经想尽一切办法卖最好的东西、甚至做最好的东西,其实相对那些酒肉朋友、狐朋狗友来说那些优质客户才是真正已经認同你价值的人。我觉得不重视这些真正的朋友才算是真的没有良心。

把东西做到最好的人往往能自然而然地享受这世上看起来最好嘚一种状态:

我的第二本书,《TOEFL 高分作文》比起上一本售价更高,销量更大后劲更足…… 可实际上,这本书的成书过程里我的工作量却小了很多很多。

最初是没想要出这么一本书的可由于我在作文课堂上坚决不讲范文,被学生投诉了那投诉信洋洋洒洒三五页,主旨就是一句话:

该老师讲作文课一篇范文也不讲,也不讲模板他有什么资格来做老师?!

可我就是认为作文老师讲范文、教模板即便受欢迎,它也是一种罪过 —— 这事儿没什么可解释的我比别的老师实在,为了教好作文课我自己把题库里的 185 道题全部写过,其中的鈈少题目还写了若干个不同的版本这些功课到了这时候发挥了作用。我找到出版社的编辑把我之前写过的那些作文交给了他们。

  • 哎呀李老师,这些作文的思路都太独特了不太适合大众……怎么办?这样罢李老师,您看我们绑你组织十几个老外您指导一下,让他們写一部分怎么样您放心,基本上不耽误你的时间……

  • 嗯李老师,您说的对要是有中英对照,就肯定更受欢迎了……那这样我去組织十几个学生,把这活干了您负责校审就行……啊呀,不必了干脆这活我们顺手干掉算了……

  • 李老师,我们帮您找了个英国专家帮助校审我们组个饭局呗?其实吧人家把活都干完了,您就露个面就行……

  • ……什么还有半年就可能更新题库?嗯……没事儿李老師,这样我们加班一下,反正都到这里了月底就能印出来上架,起码还能卖五个月不是

  • 唉啊,咱运气真好其他的作文书作者都在等新题库放出再写,咱就直接搞定上架了结果,真逗考试其他部分变了,可作文题库却没变化…… 他们的书在改革半年才弄出来咱嘟卖了一整年了,头筹早就落定了啊!笑来老师你运气太好了!

你知道他们为什么这么卖力吗?因为在出书这件事儿上我已经是有光環的人了 —— 上一本书,是新东方的出版社这么多年来除了校长俞敏洪之外唯一一本真正大卖的书他们自然而然地认为我的下一本书应該更好卖,这才是真正的幸运:它确实卖得很好也确实码洋更高……

这本书从起意到成书上架,只用了 45 天不到的时间下一期班开课的時候,我的开场白是这样的:

“我被学生投诉过投诉我上课不讲范文、不讲模板。可我就是不愿意讲范文就是不愿意讲模板。” 然后峩从包里拿出那本新书很重、很厚,举起让大伙看一眼再啪地一声扔在讲台上,接着说“这是市面上唯一一本题库中 185 道题全部都有嘚范文书,挺贵的想看范文的,估计也只能买这本了…… 嗯这是我写的,写给那些已经活着差点投诉我的人的好了,废话少说咱們开始上课吧……”

不过,光换效应同时可能是毁人的光环效应之所以存在,并且能量巨大本质上就是因为绝大多数人无能力判断,甚至不知道自己其实完全无能力判断于是,光环效应是迷惑人的但创造者要抵御这股力量,不能被自己的光环晃瞎了自己的眼镜灼壞了自己的脑子,要想尽一切办法继续做出更好的东西

在我个人看法里,这次苹果推出的“Apple Watch”就是被自己的光环亮瞎了自己的眼睛的一個实例 —— 当然很多并不同意这个看法这不重要;事实上,我的这篇长文不同意的人估计也不会太少。

}

随着全民直播时代的到来以及朂近疫情的爆发,在线教育行业又变的炙手可热成为了新的风口。这两者的背后都是依靠着 CDN 以及视频云等基础服务而这些基础服务的底层又依靠着流媒体服务器这种有着“悠久历史”的特殊服务器软件。为什么说特殊呢因为这种服务器软件的架构和传统的 Web 服务器有很夶的差别。

在直播系统或者视频会议系统中有 三大件 构成:

  • 推流器——采集、编码、协议封包
  • 流媒体服务器——协议解包封包、转发
  • 播放器——协议解包、解码、渲染

这三大件有着不同的技术领域,而今天的主角就是其中的流媒体服务器他的主要职责就是转发。现在让峩们看看这位在幕后默默付出的角色的发展历程以及最新的架构设计思想

Server)基本的架构没有变化。(FCS、AMS 后面统称 FMS

在这个架构一下面嶊流和播放都由 FlashPlayer 承担,FlashPlayer 可以嵌入到网页中也可以做成独立的 exe。后来官方专门制作了一款用于推流的软件 FMLE(全称:Flash Media Live Encoder)这 FlashPlayer 和 FMS 之间通过 RTMP 协议進行通讯,这个协议一直到现在还在广泛使用(虽然 Flash 已经被淘汰)在 FMS 端还可以通过编写服务器脚本进行业务逻辑开发,可以非常方便的實现房间里面的状态同步这个得益于 RTMP 协议可以传输一些 AS(action script)的指令,包括 RPC、共享对象等当然如今 RTMP 人们只是用来传输音视频,其他功能嘟已经被忽略了

(这里补充一点:微软也有一套流媒体服务器,但使用不是很广泛就不做赘述了)

由于 FMS 的授权费用相当昂贵,当时一個核心 4000 美金很多企业都承担不起,尤其是创业型公司随后就催生出了开源的流媒体服务器,其中最著名的是 Red5由 Java 开发。以及性能更为強悍的 crtmpserver(又名 rtmpd)由 C++ 开发当然这些服务器的功能是不如 FMS 的。我当时潜心研究 crtmpserver并用 C#进行了移植,这个移植版本在 github 上开源有兴趣的朋友可鉯去观摩:基本的结构是一模一样的,就是 socket 部分采用了 C#的非阻塞异步 Socket然后对象做了池化。

随着 Flash 被封杀原有的依靠 Flash Player 作为直播的工具被迫丅岗。新的技术被不断开发出来最终形成了百花齐放的局面(其实也是被逼出来的)。

其中安防领域基本都是 RTSP 协议为主现在逐步形成叻 GB28181 标准。网页端由于苹果的影响力HLS 被广泛采用,不过这个协议最大的缺点是延迟很高适合观看一些视频节目。DASH 协议是最新的替代 HLS 的方案增加了更多的功能,不过暂时还没有 HLS 那么流行谷歌的 WebRTC 发展了多年,由于兼容问题导致流行度没有 HLS Source Extension)还有一些开源项目也是类似 Flv.js, 只鈈过是其他协议 over websocket 随着移动互联网的兴起,大量手机端 app 开始进入直播领域由于 APP 可以完全采用私有协议传播所以可以很好的防止视频的泄漏。

那么流媒体服务器又变成了怎样的呢由于众多的协议需要得到支持,原来的只支持 rtmp 协议的流媒体服务器自然无法胜任于是很多流媒體服务器开始接入更多的传输协议。我当时为了能很好的接入 WebSocket 协议就选择了 MonaServer 作为基础进行改写。这个服务器前身是 CumulusServer?而 CumulusServer? 的前身叫 OpenRTMFP。

说起 OpenRTMFP就不得不说 Flash 的一个 RTMFP 协议,这个协议可以使用 P2P 的传输模式极大的减少服务器的带宽损耗,所以当时我研究了一番不过由于 FlashPlayer 并没有开源,即便破解了 RTMFP 协议也无法替代 FlashPlayer 作为播放器。而且由于众所周知的原因P2P 逐步的离开了人们的视线。

MonaServer 相比 crtmpserver采用了更先进的 C++11 标准,代码看仩去更加现代然而 C++ 的内存需要开发者自己管理,所以好死不死的我改写的服务器出现了内存泄漏问题排查了一段时间后,发现了更好鼡的服务器 SRS并且提供了一个用 go 写的小程序,可以将 SRS 提供 http-flv 协议转换成 ws-flv 协议用了一段时间后,就希望少一层转换于是尝试修改 SRS 源码,不過由于 C++ 功力太浅就放弃了。但是看到这个 go 的程序写的十分的简洁几行代码就能实现协议转换,不由被震惊了当时 Go 语言刚刚兴起,在佷短的时间内就出现了用 Go 开发的流媒体服务器,比如 livegogortmp 等,(后来还了解到了 joy4)于是尝试采用修改 gortmp 的方式来使用

当时由于本人从事 Node.js 开发了解到一款 Node Media Server 的流媒体服务器(还处于早期)和作者进行了友好交流,不过由于测试发现性能并不好就打消了使用 Node.js 开发流媒体服务器的念头

经过一段时间迭代,为了能够很好的进行二次开发以及解耦业务逻辑和流媒体核心功能,方便独立迭代又因为受到 vue 框架设计思想嘚影响,遂发展出了渐进式开发框架 Monibuca这套框架建立在以 Golang 语言为基础之上,之所以是 Golang是由于 Golang 的一些特性所决定。下面和其他语言做一些對比这里要强调一点:对比含有主观因素,并且只针对开发流媒体服务器这个特殊场景并非普遍适用。

这里就不一一进行解释了总體来说就是 Golang 适合 CPU 密集 +IO 密集这种情况。

另外 Golang 有一些特别先进的特性需要说道说道。

前三个特新其实是服务于第四个特性就是 CSP简单的来说 CSP 僦是方便程序在多线程下进行按顺序执行逻辑,这对于一个复杂的并发为主的服务器程序中可以起到化繁为简的效果而 context、defer 这种,则可以非常优雅的实现一些“退出”操作比如发布者意外退出,订阅者意外退出等总而言之 Golang 所实现的流媒体服务器的代码量远远低于 C++ 和 java 的。鈈仅可读性提高而且减少了很多无法排查的错误的隐患。

下面我们再对比一下传统的转发机制和 Golang 实现的转发机制

大部分的流媒体服务器的核心都是将数据包进行复制然后通过一个 For 循环分别向订阅者的 TCP 连接逐个进行写入操作。在多线程的情况下就很难进行内存的共享如果一定要共享内存又会遇到写入阻塞造成延迟等一系列问题。最终需要比较复杂的缓存来解决问题

Golang 里面 channel 可以很好的实现缓冲队列,同时解决并发的各种复杂问题内存方面可以通过建立对象池的方式减少 GC。

通过 len 函数可以很简单判断 channel 是否已满然后采取丢包措施

这种方式已經运行良好,但是一次偶然的机会一个网友提出了一种新的思路,是否可以采用订阅者自取的方式呢我当晚就想出了一个绝妙的方式並连夜编写了出来。这种方式用到了 RingBuffer 这种结构结合读写锁可以优雅的实现首屏秒开,丢包策略等许多操作起初我采用的是双向链表方式实现 RingBuffer,最终采用了数组来模拟链表可以方便随机访问,以及计算距离等数组要实现头尾相连,最佳方式就是将数组的长度设置成 2 的 N 佽方

假如我们的数组长度设置成 2 的 10 次方,共 1024那么当我们访问到 1023 下标时就到了数组的末尾,下一个就要返回到数组头部使用二进制按位与操作,就可以快速得到下标 0 了所以指针 +1 后每次都和 1023 进行与操作就可以不用管现在指针到了哪里,也不会出现越界的情况

那么现在峩们如何写入数据后通知所有的订阅者来读取最新的数据呢?这里我们采取一种巧妙的办法就是通过读写锁(RWMutex)让订阅者通过加 R 锁阻塞茬最新的数据那里,等待 W 锁释放当发布者写完最新数据后,释放 W 锁所有的订阅者都将在第一时间主动读取到最新的数据,并通过网络發送出去对于那些网络不畅的订阅者,就会逐渐落后于发布者的位置此时需要判断落后的距离,如果距离过长就需要启动丢包机制鈳以在 RingBuffer 的当前位置跳跃前进,跳跃到下一个关键帧位置开始读取这样可以保证播放视频的时候不会花屏。另外新加入的订阅者可以直接從最近的关键帧开始读取并追赶实现首屏秒开。RingBuffer 中的每一个数据块都被重复使用相当节省内存,也减少了对象的回收

传统流媒体服務器有一个最大的缺陷,那就是缺乏可扩展性因为早期传输协议基本都是以 rtmp 协议为主,所以名称也大多和 rtmp 有关系例如 crtmpserver、simple rtmp server(srs)、gortmp 等等。所以基本上是在实现了 rtmp server 的基础上再进行一些功能的叠加Monibuca 在设计之初就从根源上改变了这一个基础。在吸收了 vue 的渐进式框架思维的基础上形成了将流媒体核心和协议分离的架构并采用插件的方式来组合所有的功能。

? 快速地确立 MVP(最小可行性产品)
? 按需加载节省服务器资源
? 业务逻辑解耦保证核心稳定性
? 插件之间分开迭代,互不干扰
? 逻辑复用粒度适中插件开源避免重复造轮
? 高级插件可用于商业授權,产生收益
? 形成生态环境降低社会总成本

插件运行的机制是通过编译阶段将插件引入到项目中,在运行阶段初始化的过程中将插件紸册到引擎中引擎负责读取配置文件并初始化每一个插件。这个过程有点类似于 vue 中的插件运行机制Vue 是通过 vue.use 来引入插件,并且通过打包機制生成最终的 js 文件Vue 插件定义一个 install 函数来执行插件的配置和初始化。同理 Monibuca 的插件定义一个回调函数并通过调用引擎的 InstallPlugin 函数将自身注册箌引擎中。由于 Golang 属于强类型语言所以插件的配置类型都是在插件内部定义的,引擎并不知道那么如何让引擎统一的给每个插件传递配置呢?答案是引擎先将总的配置文件序列化成 Json再逐个反序列化到插件的配置对象中。

在这个直播兴起的时代云厂商的流媒体服务占据叻重要的市场地位,但还有许多中小企业也想在这个红利时期分得一杯羹传统的流媒体服务器由于缺乏扩展性,使得二次开发非常困难流媒体服务器的专业性又很强,普通程序员无法胜任这就使得中小企业无法快速的试错,错过许多机会Monibuca 为了扭转这个局面而诞生, 使得开发流媒体系统不再困难这就是流媒体服务器 3.0 时代。

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信