如何搭建一个完整的视频直播系统?

4,590 阅读8分钟
原文链接: www.zhihu.com
看到音视频直播系统,我自己滚进来了……

正好刚刚从一个做音视频的团队离职,说一下上个公司的亲身经历吧,篇幅较长,不知道各位有没有耐心看下去。

我一直在用VC++写Windows客户端,去年4月份跳槽去了一家公司,名字就不提了,不大不小的一家公司。进去后做的项目就是做一个类似于YY的项目,但是不会在国内推广,要在国外推广,所以不会和YY有市场占有率上的直接竞争,我负责实现Windows客户端。

面试的时候聊了不少,他们看中我实现UI和客户端架构能力。我也问了产品方面的事儿,说有一个产品团队负责,UI方面有一个UI团队负责实现界面效果。

进去后第一天开会,我说了一些我原来的一些项目经验,然后部门领导直接说:“那你以后就负责这个项目吧”,我当场懵逼了,这是什么节奏。要知道在上一家公司离职就是因为想做客户端负责人,然后实践一下团队内技术交换的想法,结果被空降的领导无底限的折腾。结果在这家公司第一天就被委任如此重任,实在是懵逼的很,只好说,现在当务之急是把客户端做出来一个可发布版本,项目的事儿,发布完第一个版本再说吧。

刚开始看这个音视频客户端,那简直无法直视。产品业务逻辑没有、UI实现效果没有。我说有没有产品需求和设计文档,然后服务器人员发给我一份接口文档……

第一天下午入职把电脑装好后,第二天就开始写代码了。记得当初改客户端实现代码的时候发了一个朋友圈状态:“改了好几天代码,终于没有补破鞋的感觉了,取而代之的是要把屎做成饭的感觉,what a fucking day……”。

如果你理解MVC,你会理解那些不理解MVC的人写出来的代码是什么样的……所有的业务逻辑基本上都在Dialog里了,或者说是ViewController吧。

长话短说,就这样一边写代码,一边设计产品逻辑,一边告诉UI设计师怎么怎么去实现效果。大概一个月吧,发布了第一个客户端的可测试版本。

发布第一个版本的过程中发生了如下的事儿:
UI设计师给我的切图竟然失真……我去找UI设计师沟通,说提供给我的切图失真了,UI设计师一脸懵逼的看着我,什么是失真……
即时通讯模块是XMPP实现的,结果发现所有的业务逻辑都通过XMPP来实现的,比如获取个人资料,修改个人资料等功能都是通过XMPP消息来实现的……在上个公司天天吐槽后台服务器耦合性太高,看到了这个服务器,我好怀念他们……
我找部门经理说,客户端的产品逻辑应该重新设计下,说“现在登陆流程没有、大厅相关业务流程基本上没有、赠送礼物相关的业务逻辑没有”,产品组是不是应该重新规划下整个产品思路,就是照抄YY,也应该有一个明确的产品设计文档吧。结果被产品组回复:哎呀,现在产品组的这几个人每个人手里都有好几个别的项目,这个产品就先按你的想法做吧……我一脸懵逼……
音视频编解码是用的公司其他部门提供的技术……一个毕业一年多的女生既做音视频服务器又做客户端的音视频模块……

第一个版本终于发布了……
告诉部门经理说,第一个客户端版本虽然发布了,但是整个客户端架构还得大动,UI方面不用改了,架构必须重新写,不然后面添加功能耦合性太高了。部门经理说,好的,你先把现在的版本提交给测试吧,顺便把这个版本提交给测试组吧,你顺便负责下测试和发布流程。

测试组给我分了一个人,来测试整个系统……

两个月后,客户端重构版本发布了,看着清晰的MVC架构,我自己都佩服自己……开项目例会的时候我说客户端的重构版做完了,现在可以考虑下服务器的重构了。所有业务逻辑都放在XMPP服务器肯定是不行的,XMPP应该只提供即时通信功能,其他业务逻辑应该由一个WebService服务器来提供。我这么描述的时候好没底气,因为我没写过服务器端代码……但是发现好些部门里的其他写Java的人有些懵逼……

我自己去找服务器的开发人员,说为什么要这么做,这么做的好处是什么……我是项目经理嘛,你们得听我的。
结果两个星期后,服务器开发人员调到别的部门了换了工作地点,不在北京了;接手了的服务器开发人员干了一个多月,有一天跟我说他要离职……换了另外一个人接手,半个月后告诉我他也要离职,工作交给了今年刚毕业的一个学生……我彻底懵逼了

好了,我他妈的不想写了,总之就是我得负责客户端代码,我得负责测试安排,我得负责产品,我得负责服务器架构设计,我他妈的还得负责联系公司的海外人员了解有没有对这个产品的推广计划,而我面试的时候只想安安静静地当一个写UI效果和业务功能的VC++工程师。

你们肯定要说,这样的破团队,只有你这样的傻逼才会想着呆下去,要我早就离职了。我只能说我喜欢上了公司的食堂,一天三顿都管饭。你要说,傻逼,那也不至于啊。我只能说,我去年花了6个月的时间,从一个身高175体重也是175的胖子,减到了标准的135斤。没有在食堂的饮食调节而是吃外卖的话,我做不到。其实工作了三个月之后我上班的唯一动力就是公司食堂了,因为我太想瘦下来了……

今年春节后上班第一天,我找部门经理说,我要离职了……

用一个月的时间给接手的人培训UI实现方面的知识,我说别在乎UI怎么实现的,如何把MVC模式理解好才是写客户端的基本,C++组的头头说,MVC我们都理解,你还是主要讲UI实现方面的知识吧。我当时差点就说“你理解个屌啊……理解的话我接手的时候客户端代码能烂成这样?”,但是我忍住了……没必要跟傻逼较劲不是……

其实上面的话跑题了,我也不能像别的大牛@姚冬、@张云龙一样回答这个问题,我只是个写业务逻辑的猴子。

我最后想说的是:要做一个视频直播系统,你们真的做过市场调研吗?真的考虑过清晰的产品逻辑吗?真的考虑过产品的卖点吗?太多的项目、太多的团队、太多的公司认为技术上实现了,产品好像自然而然的就有人用了,就有钱赚了。其实不是这样的,不是有钱赚了,而是有钱烧了。有很多人(比如上上个公司的Boss)认为码农怎么会懂产品,我就呵呵了,天天泡在产品的业务逻辑实现上的是程序员,有时候不是不理解产品,只是不想逾越自己的职责。

作为一个有追求的码农,有时候看着一些烧钱的项目真的好心疼……投资人拿钱去投资点实业多好,互联网行业真的不能创造价值,它只能帮助传统行业发挥原有的价值(此话非原创,不知道从哪看来的了……对原创者致敬),当你们投资一些项目的时候不要听那些人乱七八糟的胡扯了,只需要看这个项目具不具备这样的特质就行了。

PS:好像发个图片能有人点赞,个人原创作品《就干IT》。