Hello everybody.
First of all congratulation for the excellent work in OpenVidu project. I tried it last week and it is really awesome.
I managed to implement a POC using Kurento as media server and performing some tests I verified that an N-to-N approach in Kurento leads to a high cpu usage and a lot of webrtc messages being exchanged between peers. When we have more than 8 participants trying to joining the call, we verified that not all participants receives the video from other participants.
I understand that for a N-to-N architecture, we would have one stream sending audio/video and N-1 Streams receiving audio/video for each participant (total N + N*(N-1)). It is a lot of connections and a lot of webrtc messages for each participant receive the video from other participants.
I would like to ask for some help…
First I would like to know if I am right in my analyse and if so, if Is it possible to optimize architecture in order to support a call with more users.
I know that Kurento offers a mechanism for one-to-many implementation. I am trying to implement this by using dispatcher and hub port techniques, but the code is getting a mess. I am assuming that this way the amount of webrtc messages would be reduced and the streams would be one 2 per participant, one to receive and another to send the media I would like to know if I am right.
My current use case is only one participant transmitting audio. But the transmitter could be changed based on a request. I need to support 100 participant in this type of call.
I managed to run the OpenVidu tutorials and I incorporate the concepts in my current POC. I have an audio and video call being setup correctly.
My point is, base on the tutorial and based on this peace of code:
const publisher: Publisher = this.OV.initPublisher(undefined, {
audioSource: undefined, // The source of audio. If undefined default microphone
videoSource: undefined, // The source of video. If undefined default webcam
publishAudio: true, // Whether you want to start publishing with your audio unmuted or not
publishVideo: true, // Whether you want to start publishing with your video enabled or not
resolution: ‘640x480’, // The resolution of your video
frameRate: 30, // The frame rate of your video
insertMode: ‘APPEND’, // How the video is inserted in the target element ‘video-container’
mirror: false // Whether to mirror your local video or not
});
How I implement, if possible an architecture where I have only on publisher at a time, but with the possibility of this publisher changes during the call.
I appreciate any help
Thanks
Claudio