推荐WebRTC

来源:互联网 发布:淘宝高仿包包 编辑:程序博客网 时间:2024/06/08 12:29
作者:ancientcc
链接:https://www.zhihu.com/question/22301898/answer/145669695
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

首先补充你的一句话,WebRTC的Native Code部分早就可以用在iphone,而且支持得很好,像硬编码、硬解码H264都是运行得很好了。

webrtc是不是有前途,对所在行业来说肯定有前途。它成为标准不是新闻,不成为标准才是新闻。但如果你不是C/C++开发者,前途指的对个人职业规化啥的,对你来说现在是不是机会?或许真要考虑下。我从三个方面分析。

一、web浏览器
Webrtc使web浏览器通过简单的JavaScript api接口实现实时通信功能。在这方面基本已成事实上标准,正如上面写的,它成为标准不是新闻,不成为标准才是新闻。国内就有不少从事和webrtc相关的开发者,像有的公司就基于Webrtc包做些修改、然后给其它开发者用、号称是视频聊天SDK。这样公司好多,但真正做大却有点难。我想有两个原因:JavaScript的限制,浏览器的限制。

JavaScript的限制。JavaScript是脚本语言,能有什么功能取决于实现它的虚拟机,也就是浏览器这个应用程序。由于受限,问题来了,人民群众的需求总是琳琅满目,你都能提供吗?举个例子,要让对方的头上自动加顶红帽子,——当然,修改浏览器代码让加个帽子不是难事,可谁又知道接下会发生什么,难道要一个改一个?聊天往往是娱乐,娱乐经常是没啥规矩。由于这限制,开发者用它时会有这看法:东西是很好,但总是有那么点不足,而且即使是努力了也不可能解决(自个写浏览器除外)。

浏览器的限制。这就要涉及到聊天场景。很现实问题,如果我想和你聊天,身边有手机,你认为会用浏览器吗?对PC,网页比app方便,而移动设备却有点反着来,而且将来移动设备会越来越多。关于这个再深入个问题:如果PC用浏览器,手机用app,聊天是否可行?技术实现上没问题,可事实上基本不会做,代价太高划不来。浏览器时,信令走的是Websocket,app用Websocket纯粹是没事找抽,直接C Socket既简单又高效。浏览器时,两socket间没啥心跳包机制,app时心跳包机制可很大提升效率。浏览器时,由于用JavaScript开发,功能受限,app时用Native Code,自个想要什么就能实现什么。而且,Webrtc是跨平台包,基于C/C++的跨平台SDK也不是没有,何不在开发时顺便开发出个Windows平台app。以上导致了app不太可能和网页聊天,这又让浏览器少去很多应用场景。

综合来说,在浏览器不是webrtc不行,而是其它原因导致有那么点尴尬。想做一个“完美”用户体验的聊天工具,终归还得用app。这就是接下要说,webrtc中的Native Code部分。

二、webrtc中的Native Code部分
Webrtc分两层,底层是个用C++写的库(Native Code),然后上层写个Javascript封装,以便供HTML5调用。既然是写app,那完全不用管上层Js封装,而且Google在开发Webrtc时已考虑用在app,底层C++库的API已做得很完善了。也就是说,一旦直接用Native Code,完全和浏览器无关了,作为C/C++开发者,他就可以用webrtc去实现自个想实现的所有东西。

Native Code摆脱了哪些限制?可参考这个问题贴,可以用WebRTC来做视频直播吗? - HTML5 - 知乎。用浏览器,就是p2p聊天都功能受限,更别说去实现直播。而实际中基于浏览器的直播也不推荐用webrtc技术。这里重复抄下我在那问题回的一段话。

为什么强烈建议你基于webrtc?对直播系统,难的不是服务器,而是客户端。客户端难的地方则主要体现在两个方面,一是网络传输相关,像穿透,二是流数据相关,像编码、解码。而这些正是webrtc帮你解决了。也正因为如此,现在很多直播系统最早的客户端其实是以webrtc为根的,只是后面自个不断优化,慢慢地变成自个系统而已。——诚然,官方webrtc是有地方不尽如意,但它们不断更新,就像最近一段时间优化了回音消除。

如果你熟悉C/C++,又刚好从事和网络视频相关行业,强烈建议你学习Webrtc。如果你不从事网络视频相关行业,却是C/C++开发者,那还是强烈建议你学习Webrtc,原因是接下要说的Webrtc代码的C/C++价值。

三、Webrtc代码的C/C++价值
最近回答了这个问题,怎么样才算是精通 C++? - 编程 - 知乎。在那里建议学习C/C++是两个步骤,知道基本语法后就到网上找开源项目,多看看、多调试前辈们代码。我推荐的开源项目就是Google的Webrtc。

虽然Webrtc的代码量很大,但看的目的不是要全看懂,只是看你想看的部分。语法上,Webrtc用了最新C/C++语法,像std::unique_ptr,Webrtc是视频聊天基础库,众多知名浏览器都是基于它实现视频聊天。扩展专业知识上,Webrtc为完成聊天涉及到很多方面,像网络穿透,视、音频编码解码,采集摄像头、卖克风,截屏。C/C++编程技能积累上,Webrtc能让你直接基于它的一些模块写代码,像多线程同步模块(zhuanlan.zhihu.com/p/25),网络收发模块。获取更多开源项目上,Webrtc像手心,基于它你会涉及到很多开源项目,像用于加密、解密、网络安全的boringssl,数字编解码的ffmpeg,libvpx,等等。活跃度上,Webrtc是Google底下团队维护的项目,基本做到一个月一小变,不仅能让你获得那些专业的最新技术,还能学习最新C/C++语法。还有很重要的是,Webrtc代码是跨平台的,完全支持当前主流操作系统,像Windows、iOS、Android、Mac OS X、Linux,到时你会发现,C/C++是种多么好的跨平台语言。

一句话,Webrtc非常值得深入,甚至认为可以进入大学课程。


https://www.zhihu.com/question/22301898
0 0
原创粉丝点击