Video Communication LifeCycle

What does a video communication lifecycle look like?

Before starting coding... let's walk through the main concepts, methods and classes used during a Conversation lifecycle.

  • First, each run of a client application instantiates one UserAgent representing the local individual,

  • A Session must be opened with ApiRTC's servers to create a Conversation to which individuals can join,

  • In a Conversation, individuals can chat, watch, listen and/or share real-time audio, video, data, screen...,

  • A Stream is audio, and/or video captured from sources available from browser and published on a Conversation.


As the entry point to ApiRTC, UserAgent is instantiated using the apiKey associated to your enterprise account on


When UserAgent.createStream(options) is called, a popup opens in the browser to request user acceptance for using media devices. The returned Promise resolves with an instance of Stream, which carries media stream from computer device through the browser.

The method Stream.attachToElement(domElement) binds the media stream to a DOM <video> element in order to display it in the web page.


To use ApiRTC's connected features, a userAgent must register to get a session. This can be done with or without authentication.

Simply using UserAgent.register() without authentication details registers a userAgent with ApiRTC's servers without authentication.

The session grants access to connected features such as conversations.


An instance of Conversation is obtained from Session.getOrCreateConversation(name).


Calling Conversation.join() makes the userAgent used to create the Session used to create this instance of Conversation (through it's Session) join the conversation.

Publish Streams

Once a conversation joined, a userAgent can publish a stream using Conversation.publish(stream) method:

Subscribe to Streams

Subscribing to peer streams shall be implemented as followed:

  • Listen on Conversation 'streamListChanged' event to get notified of streams published to the conversation. The data provided by the event is a StreamInfo: It gives information on streams published in the conversation such as the id (StreamInfo.streamId) of the stream. StreamInfo.listEventType property tells whether the event is triggered for and addition (value 'added') or a removal.

  • Calling conversation.subscribeToStream(streamId) with the StreamInfo.streamId of an added remote stream makes this conversation subscribe to a stream.

  • Finally, listening on Conversation 'streamAdded' notifies with a remote Stream instance which can be attached to web page for display.

Last updated