licode 的singlepc 模式是怎么回事?
最近在摸索webrtc 单机多流的情况,webrtc给出了标准planb的解决方法,在licode的forum中查找,已经明确表示不支持
https://discourse.lynckia.com/t/typical-questions-for-licode/728
第六条,表示在wip (work in progress)
同时,licode提供了singlepc的模式,链接如下
https://github.com/lynckia/licode/blob/master/feature-review/single-peer-connection.md
看起来好像是单机多流的情况。那么这个singlepc到底怎么回事?
让我们追踪下代码,在licode_config.js配置文件里找到了其配置如下
config.erizoController.allowSinglePC = false; // default value: false
开启true模式后,首先在erizoController.js文件中查找:
好像没什么用,只是存到了option中。
我有查找了ec这边的代码,基本没啥用,唯一的作用是和option一起在addpublisher addsubscriber的时候,发送给了ejs那边,
那么ejs 这边的情况如何?
到erizoJSController.js搜索对应函数
发送这个参数被送到了client 中,继续搜索
传进来后,在getOrCreateConnection中用了一下,用了只创建一个connection
那么connection是干什么的?
注意,connection里,有个重要的参数wrtc ,这个对应底层c++的传输底层,到这里,就明白了singlpc的意义了
开始划重点:
当这个参数被设置成true的时候,在客户端一个连接上来后,无论发送多少次的Publishe请求,服务器这边只创建一个wrtc ,就是一个底层连接,通过这种方式,licodce实现了单客户端多流。
如果这个参数没有开启,同时客户端发送多次的publishe请求,服务这边也会创建多个底层连接等着协商,但是客户端因为是单连接,不会进行协商,所以会连接不成功。