webrtc
文章平均质量分 70
kenny_zh
这个作者很懒,什么都没留下…
展开
-
WebRTC源代码探索之旅(前言)
前言 最近要找工作,发现某美国硅片巨头正在招聘WebRTC相关开发工程师,非常感兴趣。所以决定深入研究一下WebRTC的源代码。 其实,前一阵子就下载过WebRTC的源代码,发现非常适合我的“口味”。这是我第一次看到在Linux系统上实现类似Win32风格的多线程编程。过去看到的有关Linux的书籍、教程一般都是介绍一些Posix标准的多线程例程和同步工具,例如signal、pth原创 2014-08-15 09:49:02 · 1777 阅读 · 0 评论 -
WebRTC源代码探索之旅——多线程篇(3)
3 messagehandler messagehandler.h/messagehandler.cc文件仅仅定义了talk_base::MessageHandler类,和一个模板工具类talk_base::FunctorMessageHandler类。 3.1 talk_base::MessageHandler talk_base::MessageHandler类的主要功原创 2014-08-15 16:54:06 · 1506 阅读 · 0 评论 -
WebRTC源代码探索之旅——多线程篇(8)
8 我们所学到Linux API 通过详尽地阅读WebRTC的线程模型代码,我们学到了以下这些Linux API是如何被实际应用的:pthread_mutex_init、pthread_mutex_destroy、pthrea_mutex_lock、pthread_mutex_trylock、pthread_mutex_unlock这5个函数可以完成对mutex的操作,基本上和Wi原创 2014-08-15 22:24:56 · 1106 阅读 · 0 评论 -
WebRTC源代码探索之旅——多线程篇(6 - 1)
6 thread thread.h/thread.cc文件实现了WebRTC对系统线程的封装。它主要包括3个类talk_base::ThreadManager类、talk_base::Thread类和talk_base::Runnalbe类;以及几个工具类talk_base::AutoThread类、talk_base::ComThread类和talk_base::SocketServer原创 2014-08-15 20:33:18 · 1326 阅读 · 0 评论 -
WebRTC源代码探索之旅——多线程篇(5 - 2)
5.3 talk_base::EventDispatcher talk_base::EventDispatcher类实现了跨平台的等价于Win32自动重置(autoreset)WSAEvent的功能。在Windows平台上有网络多线程开发经验的读者应该很熟悉WSAEvent,我就不再多做介绍了。 我在1.1节讲解过talk_base::Event类。那talk_base::Phys原创 2014-08-15 17:11:52 · 1225 阅读 · 1 评论 -
WebRTC源代码探索之旅——多线程篇(7 - 3)
7.3 范例代码2 范例代码1是一个单线程的例子,所以并不能够足以研究WebRTC在多线程环境下的工作情况。因此,在这个例子的基础上,我把它改良成了多线程的版本:#include #include #include "talk/base/thread.h" class HelpData : publictalk_base::MessageData{public:原创 2014-08-15 22:21:40 · 1163 阅读 · 1 评论 -
WebRTC源代码探索之旅——多线程篇(7 - 2)
7.2 范例代码1 这里先让我们看一段网上摘录的代码: #include #include #include "talk/base/thread.h" class HelpData : publictalk_base::MessageData{public: std::string info_;}; class Police : publictalk_base:原创 2014-08-16 16:03:10 · 1225 阅读 · 0 评论 -
WebRTC源代码探索之旅——多线程篇(6 - 3)
6.4 talk_base::AutoThread 该类是一个工具类,它的主要功能是临时封装一个线程。用户的应用程序自行调用了系统API创建了一个线程,而这条线程需要临时使用一下talk_base::Thread的功能,比如调用另一个线程talk_base::Thread::Send并阻塞等待另一条线程完成函数调用。是的,在talk_base::Thread中talk_base::Thre原创 2014-08-16 11:51:59 · 1362 阅读 · 1 评论 -
WebRTC源代码探索之旅——多线程篇(2)
2 crticalsection criticalsection.h/criticalsection.cc文件中包含了3个类talk_base::CriticalSection、talk_base::CritScope和talk_base::TryCritScope。这3个类对于有多线程编程经验的Windows开发人员来说都是非常容易理解的。基本上就是对Win32 CriticalSect原创 2014-08-15 10:12:28 · 1392 阅读 · 0 评论 -
WebRTC源代码探索之旅——多线程篇(4 - 1)
4 messagequeue messagequeue.h/messagequeue.cc文件是多路信号分离器的重要组成部分。它实现了消息一个完整地消息队列,该队列包括立即执行消息队列、延迟执行消息队列和具有优先级的消息队列。其中,talk_base::MessageQueue类也是talk_base::Thread类的基类。所以,所有的WebRTC的线程都是支持消息队列的。 4.原创 2014-08-15 16:56:35 · 1472 阅读 · 1 评论 -
WebRTC源代码探索之旅——多线程篇(5 - 3)
5.4 talk_base::PosixSignalHandler talk_base::PosixSignalHandler和talk_base::PosixSignalDispatcher这两个类只有Linux版本。并且在整个WebRTC的源代码中没有任何地方使用过这两个类。因此,对它们的代码分析主要是为了帮助Windows开发人员从实用的角度学习如何使用Linux平台下的部件。原创 2014-08-15 17:17:12 · 1304 阅读 · 0 评论 -
WebRTC源代码探索之旅——多线程篇(1)
随着CPU频率接近物理极限,多芯片、多核几乎成为了加速软件运行速度的唯一选择。与之相应地,多线程、异步编程以及并发编程成为了软件开发人员的必修课。因此,各种各样的开发框架不断涌现。在C++领域,boost的thread库等优秀的多线程框架也是其中的代表。特别是针对socket网络编程的boost.asio库可以轻松帮助开发人员实现多线程大量并发的网络服软件。 与这些框架相比,WebRTC的原创 2014-08-15 10:01:52 · 3418 阅读 · 0 评论 -
WebRTC源代码探索之旅——多线程篇(7 - 1)
7 实际使用WebRTC的线程模型 在这一章节我将实际演示如何将WebRTC的/trunk/talk/base目录下的所有文件编译成静态库。并且在这基础上编译运行2个小程序,以观察整个线程模型的调用关系。这将能够很好地帮助读者理解各个模块是如何协同工作的。 7.1 编译静态库 正如在本文开头时提到的,这一节的内容可能是大家最感兴趣的,但也是我不得不和大家说声抱歉的,我是在M原创 2014-08-15 22:17:46 · 1210 阅读 · 0 评论 -
WebRTC源代码探索之旅——多线程篇(5 - 4)
5.9 talk_base::PhysicalSocketServer 如果说talk_base::MessageQueue是多路信号分离器的外围,那么talk_base::PhysicalSocketServer就是多路信号分离器的真正核心。talk_base::PhysicalSocketServer主要实现了消息和IO的多路分发功能,类似于Windows平台上的WSAWaitForM原创 2014-08-15 17:22:03 · 2435 阅读 · 0 评论 -
WebRTC源代码探索之旅——多线程篇(4 - 2)
4.4 talk_base::MessageQueue 现在我们正式进入多线程篇最为激动人心的部分——多路信号分离器的消息队列组件。WebRTC的多路型号分离器由2部分组成:消息队列和talk_base::SocketServer(主要实现就是talk_base::PhysicalSocketServer)。消息队列负责接受消息,并使用消息处理器(talk_base::MessageHan原创 2014-08-15 17:03:08 · 1739 阅读 · 0 评论 -
WebRTC源代码探索之旅——多线程篇(5 - 1)
5 physicalsocketserver physicalsocketserver.h/physicalsocketserver.cc文件实现了一个基本的多路信号分离器。这个多路信号分离器的实现代码可以横跨Windows、Linux、OSX、Android、ios等平台,非常复杂。其实在/trunk/talk/base目录下,还有多个SocketServer的实现,从这些SocketS原创 2014-08-15 17:09:25 · 1705 阅读 · 2 评论 -
WebRTC源代码探索之旅——多线程篇(6 - 2)
6.3 talk_base::Thread talk_base::Thread的主要功能是封装线程,为线程提供消息队列和多路信号分离器的功能。需要注意的是,talk_base::Thread的绝大多数功能是talk_base::MessageQueue和talk_base::PhysicalSocketServer的代码提供的,仅有talk_base::Thread::Send函数的功能主原创 2014-08-16 10:59:45 · 1759 阅读 · 0 评论