WebRTC源代码探索之旅(前言)

前言

 

最近要找工作,发现某美国硅片巨头正在招聘WebRTC相关开发工程师,非常感兴趣。所以决定深入研究一下WebRTC的源代码。

 

其实,前一阵子就下载过WebRTC的源代码,发现非常适合我的“口味”。这是我第一次看到在Linux系统上实现类似Win32风格的多线程编程。过去看到的有关Linux的书籍、教程一般都是仅仅介绍一些Posix标准的多线程例程和同步工具,例如pthread、mutex、条件变量等。虽然理解这些东西对我来说并不是一个问题,但是对于一个用惯了WaitForMultipleObjects的Win32程序员来说,实在有些不习惯。因此,在看到WebRTC源代码时,我就被它深深地吸引住了。既然,这次某硅片巨头提供WebRTC相关的工作,那就好好深入研究一下WebRTC的源代码,希望能够在面试的时候能用得着。

 

当然,需要提一下的是,WebRTC的代码并非一定是教科书般的范例。相反为了满足适应各种Linux版本的需求,WebRTC选择了最具广泛适应性的Linux API来实现。比如在physicalsocketserver.h中PosixSignalHandler类的上面有一段注释:

 

// These two classes use the self-pipetrick to deliver POSIX signals to our
// select loop. This is the only safe,reliable, cross-platform way to do
// non-trivial things with a POSIX signalin an event-driven program (until
// proper pselect() implementations becomeubiquitous).

可以反映出WebRTC开发人员为了平台通用性所作出的不得已的选择。因此,学习WebRTC的源代码更多地是学习它的设计思路,具体从事开发项目时如果可以确定目标平台,应该选择更为合适的API。如果项目同样涉及跨平台需求,那么参考WebRTC的源代码确实是不错的选择。

 

在具体分析WebRTC源代码之前,我想先介绍一下本文的定位。本文主要是作为我自己对WebRTC源代码的学习总结,并帮助一些和我类似的Win32开发人员顺利地掌握Linux开发思路。因此,本文的主要读者至少应具备良好的C++语法基础,并具有相关的Windows开发经验。在以后的篇章中,我不会对C++语法和Windows API有过多的展开。如果你是一个熟练地Linux开发人员,希望学习win32开发,那真的很抱歉,本文可能无法为你提供有用的帮助。

 

此外,还要说明一下的是,这篇文章的工作环境是MAC OSX。这是因为我同时也在学习IOS开发,OSX是唯一一个可以同时学习IOS和POSIX开发的环境。当然,这也给我后来尝试独立编译talk_base造成了一些麻烦。因为在OSX平台上,WebRTC有一些独特的编译配置。当然本文的读者可能需要自行修改我提供的一些make脚本才能将他们应用在Linux环境中。不便之处我也只能说抱歉了。

 

好了,废话不多说,让我们开始WebRTC源代码探索之旅吧!

你可能感兴趣的:(webrtc)