# Lynckia architecture for newbies

**URL:** <https://discourse.lynckia.com/t/lynckia-architecture-for-newbies/64>\
**Category:** Uncategorized\
**Created:** [December 5, 2012, 9:58pm UTC](https://discourse.lynckia.com/t/lynckia-architecture-for-newbies/64 "2012-12-05T21:58:01Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Achraf\_Kassioui](https://avatars.discourse-cdn.com/v4/letter/a/8e7dd6/32.png) [@Achraf\_Kassioui](https://discourse.lynckia.com/u/Achraf_Kassioui)\
**Post date:** [December 5, 2012, 9:58pm UTC](https://discourse.lynckia.com/t/lynckia-architecture-for-newbies/64/1 "2012-12-05T21:58:01Z")

</div>

Hi,

I understand that Lynckia is a plugin-free set of tools that enable live  
video conferencing on the web.

There are:

- A centralized MCU which receives and sends streams to multiples users.  
A user can be a publisher and a subscriber, or only a subscriber. The MCU  
is called Erizo.
- A server-side API with REST endpoints that manages rooms, tokens and  
users. This service is called Nuve and it talks to Erizo. Nuve is called in  
one’s server app.
- A client-side API. This API talks with Nuve for access and management.  
Then the users seamlessly establish WebRTC media peer connections with  
Erizo.
- Nuve is installed with the Node.JS app as a dependency. Erizo is  
installed on a Linux server. Cloud deployment and management are up to  
Lynckia users.

Is that correct?  
Big fuzziness with that last fourth point.

---

<div class="post-metadata">

**Author:** ![Javier](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.lynckia.com/javier/32/20_2.png) [@Javier](https://discourse.lynckia.com/u/Javier)\
**Post date:** [December 5, 2012, 11:05pm UTC](https://discourse.lynckia.com/t/lynckia-architecture-for-newbies/64/2 "2012-12-05T23:05:06Z")

</div>

Hi Achraf,

Yes, with the additional idea that Lynckia is aimed to provide any  
type of audio, video and data communication between multiple clients,  
not only two, by saving bandwidth and processing time on clients.

There are some mistakes on your description. I put some comment inline:

> Hi,
> 
> I understand that Lynckia is a plugin-free set of tools that enable live  
> video conferencing on the web.
> 
> There are:
> 
> A centralized MCU which receives and sends streams to multiples users. A  
> user can be a publisher and a subscriber, or only a subscriber. The MCU is  
> called Erizo.

That’s ok. Erizo is a C++ MCU, that offers a full WebRTC stack. It has  
been implemented from scratch.

> A server-side API with REST endpoints that manages rooms, tokens and users.  
> This service is called Nuve and it talks to Erizo. Nuve is called in one’s  
> server app.

That’s ok, But Nuve doesn’t talk directly to Erizo. It starts and  
stops Erizo Controllers (scaling up and down according to workloads).  
These Erizo Controllers talk to Erizo through Erizo API, which is a  
JavaScript wrapper for Erizo. Erizo API only leverage Erizo functions,  
and Erizo Controllers also handle connections from clients and manage  
signalling between clients and the MCU.

Third-party services will use Nuve through their server apps to  
provide access to their users, and to create and remove rooms, that  
are the virtual places where users will communicate. In other words,  
users will be able to publish their streams in the room where they are  
connected (and only in this room), and to subscribe to any of these  
streams later.

> A client-side API. This API talks with Nuve for access and management. Then  
> the users seamlessly establish WebRTC media peer connections with Erizo.  
> Nuve is installed with the Node.JS app as a dependency. Erizo is installed  
> on a Linux server. Cloud deployment and management are up to Lynckia users.

The client-side API talks to Erizo Controller, not to Nuve. And all  
systems can be installed on Ubuntu or Mac. They potentially could be  
used in any other platform, but we haven’t tried more than these. For  
the time being Cloud deployment and management are up to users that  
want to install Lynckia.

Cheers,  
Javier.On 5 December 2012 22:58, Achraf Kassioui [achrafkassioui@gmail.com](mailto:achrafkassioui@gmail.com) wrote:

> Is that correct?  
> Big fuzziness with that last fourth point.
> 
> –

---

<div class="post-metadata">

**Author:** ![Achraf\_Kassioui](https://avatars.discourse-cdn.com/v4/letter/a/8e7dd6/32.png) [@Achraf\_Kassioui](https://discourse.lynckia.com/u/Achraf_Kassioui)\
**Post date:** [April 19, 2013, 6:00pm UTC](https://discourse.lynckia.com/t/lynckia-architecture-for-newbies/64/3 "2013-04-19T18:00:25Z")

</div>

Hello,

I have other questions to better understand Lynckia architecture.

My understanding of WebRTC communications is that the ICE framework will  
first attempt to get a direct pathway between the peers using a STUN  
server. STUN is able to get the public IPs of the peers, so they can talk  
to each other. But sometimes, STUN fails, because the peers are behinds  
unbreachable NATs. In such case, ICE will relay on a TURN server. TURN is  
able to speak to both peers’ IPs (but how exactly?). The whole RTC pathway  
now goes through TURN.

Is that correct?

Question: is Erizo, at its core, a TURN server?

A TURN server is meant to relay the data stream between 2 peers (which,  
then, are no longer peers). A TURN server is also able to relay data  
streams between multiple clients. Isn’t that the first building block of an  
MCU?

Thank you for your time.  
Achraf.

---

<div class="post-metadata">

**Author:** ![Achraf\_Kassioui](https://avatars.discourse-cdn.com/v4/letter/a/8e7dd6/32.png) [@Achraf\_Kassioui](https://discourse.lynckia.com/u/Achraf_Kassioui)\
**Post date:** [December 24, 2012, 3:51pm UTC](https://discourse.lynckia.com/t/lynckia-architecture-for-newbies/64/4 "2012-12-24T15:51:19Z")

</div>

Hello,

Is this diagram correct?

[https://lh3.googleusercontent.com/-ftK5LSzPp-k/UNh5oMt6NqI/AAAAAAAAAMM/EK\_FuW2L4ek/s1600/lynckia\_app\_diagram.png](https://lh3.googleusercontent.com/-ftK5LSzPp-k/UNh5oMt6NqI/AAAAAAAAAMM/EK_FuW2L4ek/s1600/lynckia_app_diagram.png)—

Achraf.

---

<div class="post-metadata">

**Author:** ![Javier](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.lynckia.com/javier/32/20_2.png) [@Javier](https://discourse.lynckia.com/u/Javier)\
**Post date:** [December 25, 2012, 12:38pm UTC](https://discourse.lynckia.com/t/lynckia-architecture-for-newbies/64/5 "2012-12-25T12:38:19Z")

</div>

Hi Achraf,

Yes, I’ve detailed it a bit more, with the client JavaScript libraries.

Cheers,  
Javier.On Dec 24, 2012, at 4:51 PM, Achraf Kassioui [achrafkassioui@gmail.com](mailto:achrafkassioui@gmail.com) wrote:

> Hello,
> 
> Is this diagram correct?
> 
> * * *
> 
> Achraf.
> 
> –

![](https://canada1.discourse-cdn.com/flex031/uploads/lynckia/original/1X/57787ac6b6969b06053ea0dc8722c3488c4ca36a.png)
