WebRTC Native的核心
我们做任何事情最首要的是找到事物的核心并牢牢地抓住它。对于使用 WebRTC 开发 Web 端实时通信应用程序而言,其核心就是 RTCPeerConnection 对象。RTCPeerConnection 是浏览器为便于我们使用 WebRTC 而封装的一个对象,它几乎将 WebRTC 所有的功能都集成了进来,可以帮你做各种事情,如设置分辨率大小,开启回音消除,传输数据,等等。
那么对于 WebRTC Native 开发来说,是否也有这样一个核心对象呢?不错,WebRTC Native 中的核心对象就是 PeerConnectionFactory。可以通过它创建 Track、MediaStream、PeerConnection 等对象,还可以通过它指定音视频使用的编解码器、设置编解码器参数、开启回音消除等功能,甚至为 WebRTC 指定工作线程、信号线程等。不过从功能上说,它还是无法与 Web 端的 RTCPeerConnection 对象相比。它们之间最大的不同是,RTCPeerConnection 可以传输数据,而 PeerConnectionFactory 却不行。RTCPeerConnection 对象所做的事情需要由 WebRTC Native 端 PeerConnectionFactory 和 PeerConnection 对象加在一起才能完成。
从图 8.1 中可以了解到 MediaStream 的组成以及 WebRTC Native 开发的大体过程。通过该图我们可以知道以下几点信息:PeerConnectionFactory Interface 对象是由 WebRTC 的 WorkerThread/SignalThread 线程创建的,而 WorkerThread/SignalThread 线程是在应用程序启动时创建的;WebRTC Native 中的一些核心对象,如 PeerConnectionInterface、LocalMediaStreamInterface、LocalVideoTrackInterface、LocalAudioTrackInterface 等都是通过 PeerConnectionFactoryInterface 对象创建出来的;由于 MediaStream 是由多个不同类型的 Track 组成的,所以可以调用 MediaStream 对象的 AddTrack() 方法将 PeerConnectionFactoryInterface 创建好的 Track 添加到 MediaStream 中,类似地,也可以调用 PeerConnectionInterface 的 AddStream() 方法将 MediaStream 添加到 PeerConnectionInterface 对象中;PeerConnectionInterface 对象可以通过 Callback() 方法将通知回调给 PeerConnectionObserver 对象,这样上层应用就可以根据通知进行界面的改变了。

有了上面这些基础之后,接下来我们看一下如何利用上面的知识进行 WebRTC Native 开发。