It is an easy-to-use video meeting tool.
A video conference room can be inserted in two ways:
Embed video meetings into an application or website with iframe or Server API/Client API allowing your team to build faster and release more often.
Create a meeting in a browser:
1. Open https://meet.gcore.com/new.
2. Click the Create conference button.
3. A Room URL will be created automatically.
4. Click the Join button.
5. Send the URL to other attendees to join your video call.
Example: https://meet.gcore.com/call/?roomId=serv2testroom
Embed a video call room in your website or app via iFrame. The iframe’s src attribute is specified as the URL.
Example:
<iframe allow="camera; microphone; fullscreen; display-capture" src="https://meet.gcore.com/call/?roomId=serv2testroom"></iframe>
Customize a video call room with URL attributes.
Example: https://meet.gcore.com/call/?roomId=serv2testroom&displayName=JohnSnow
1. Generate a video room ID. Use an alphanumeric character set. For example: bokxlj33.
2. Add a server location to the beginning of the set. For example, insert "serv2" for a server in the USA: serv2bokxlj33.
3. Specify /call/ as a method for your video call room.
4. Insert the Room ID into the final URL. The result should be as follows: https://meet.gcore.com/call/?roomId=serv2bokxlj33
You can create a URL, save it, send it, or write it in your notes. The URL is reusable. The URL will be accessible all the time – before an event, during an event, and even 1 year later after an event.
The Room is created on a server when the first participant enters it.
The Room is automatically destroyed without saving information when the last participant leaves.
Embedding a meeting into a service or app requires using an iframe with the src attribute specified as the URL. Read the "Allowed domain names" section to learn how to configure your website’s domain so that browsers don’t block the iframe.
Settings of iframe must have the special permissions required for video calling:
allow="camera;microphone;fullscreen;display-capture;autoplay;screen-wake-lock"
HTTP Feature-Policy header provides a mechanism to allow:
Example:
<iframe src="https://meet.gcore.com/call/?roomId=serv2bokxlj33"
allow="camera; microphone; fullscreen; display-capture; autoplay; screen-wake-lock"></iframe>
Embedding in Android can be done in two ways:
It’s better to use the native Android SDK. One-to-one calls and/or with many participants for real-time communication within your own app.
There are two modules:
WebView requires the use of the WebView class. To allow a video call room access the camera, you need to do two things:
&nameScreenDisabled=true
parameter to the Room URL and call "Join" Client API method.
Embedding in iOS can be done in two ways:
It’s better to use the native iOS SDK. One-to-one calls and/or with many participants for real-time communication within your own app.
There are two modules:
WKWebView supports embedding pages that use WebRTC from iOS 14.5 onwards.
To support older iOS versions, we recommend using one of the following options:
To use Video Calls with Cordova (Phonegap) please use the plugin for SafariViewController.
Embedding in React Native iOS/Android can be done via wrapper:
React Native Wrapper – please look at SDK and open-source demo app.
There are four modules:
A video conferencing room is a room where all invited participants are active and have their cameras and microphones on. One video call room can hold up from 1 to 100 participants or more.
A method to create video conferencing rooms is /call/
.
Example: https://meet.gcore.com/call/?roomId=
A webinar room is a room where participants are divided into two groups: speakers and viewers. Speakers are active participants with cameras and microphones. Speakers' video is shown on the screen of the webinar room, participants can watch and hear them. Viewers can only watch the speakers without interaction. They have neither camera, nor microphone on. One webinar room can hold up between 1 and 20 speakers and between 0 and 2000 viewers.
A method to create video conferencing rooms is /webinar/
.
Moreover, please see &itisparticipant attribute.
Example: https://meet.gcore.com/webinar/?roomId=
Video calls are accessible from two types of domains:
By default, we provide a third-level tech domain in the "gvideo.co" zone. If you prefer to use your own domain, please contact us.
Conferencing is customized by optional URL parameters for each iframe instance. It’s possible for each participant in a meeting to have different parameter combinations.
&accessToken=<token> | Set a one-time access token | JWT, URL |
---|---|---|
&accessUrl=<url> | Set your server-based authorization method for access token verification | JWT, URL |
&apiEvent=<url> | Set webhooks server-based method for receiving server events | JWT, URL |
&authEvent=<header> | Set specific webhooks HTTP request header for receiving server events | JWT, URL |
&authorizationAccess=<header> | Set specific HTTP request header for access token verification | JWT, URL |
&autoplayWithoutAudioTrack=<true | false> | Set a flag "Don’t ask mic permission" on iOS devices for webinar viewer |
&canRecord=<true | false> | Allow the recording function for a moderator |
&controlsDisabled=<true | false> | Hide main UI controls and buttons |
&disableChat=<true | false> | Disable text chat |
&displayName=<name> | Set display name of participant | JWT, URL |
&handEnabled=<true | false> | Activate the "Raising Hand" feature |
&hideIndicators=<true | false> | Hide icons in a participant's tile (mic, cam, name, etc.) |
&itisparticipant=<true | false> | Set a role of a viewer or a participant in webinars |
&lang=<code> | Set the interface language explicitly | URL |
&maxBroadcasters=<num> | Set the maximum number of participants with camera/audio devices | JWT,URL |
&maxWatchers=<num> | Set the maximum number of viewers without camera/audio devices | JWT, URL |
&minimizeTiles=<true | false> | Increase the number of participants displayed on a single screen without scrolling to the maximum |
&nameScreenDisabled=<true | false> | Skip welcome page with a cam/mic selection and a name input |
&peerId=<id> | ID of a participant from your internal system | JWT, URL |
&roomId=<id> | Room ID | URL |
&role=<role> | Set a privilege role for a participant | JWT only |
&sortPeers=<true | false> | Move participants with cameras up to the visible area |
&startWithFS=<true | false> | Start meeting in the full screen mode |
&token=<jwt> | Set a JWT token | JWT, URL |
&video=<url> | Display an external HTML player with external video broadcasting for joint viewing | JWT, URL |
&waitingRoom=<true | false> | Activate waiting room |
Examples:
1. https://meet.gcore.com/call/?roomId=serv2testroom&displayName=JohnSnow
2. https://meet.gcore.com/call/?roomId=serv2testroom&displayName=JohnSnow&disableChat=true
3. https://meet.gcore.com/call/?roomId=serv2testroom&displayName=JohnSnow&disableChat=true&lang=en
It is a security access token generated on your side. If this parameter is specified, then, whenever a user enters a room, our server will additionally ask your authorization server whether the user with the peerID and accessToken parameters is allowed to connect. For more details, refer to the server-side authorization method.
Type: String. default = not set.
Example: &accessToken=802380f4-dd70-4d60-9738-fb5ae8709ae7
It is used only for iOS devices and only for webinars.
The iOS Safari Browser policy requires microphone permission to use audio with WebRTC. So, the browser requests a passive viewer (with no cam/mic buttons) in a webinar room to allow access to the mic. This parameter ensures the browser will not ask for access to a microphone, but will play audio using the simple "play" method.
Type: Boolean, default = false.
Example: &autoplayWithoutAudioTrack=true
This allows to record and save everything what happens in a room to the Cloud. Not everyone needs a recording for security reasons, legal restrictions, or storage usage. Recording feature can be activated with this attribute. If the feature is on, a moderator can turn on the recording using the UI button.
Type: Boolean, default = false.
Example: &canRecord=true
It is used to hide general controls and buttons from the screen. In this case, you should use ClientAPI methods to manage actions and allow users to turn on/off their cams/mics.
Type: Boolean, default = false.
Example: &controlsDisabled=true
This is designed to disable the chat function. If you add the parameter, the "Chat" button will be un-clickable and chatting will be unavailable for participants. It is useful when you prefer to use our own chat.
Type=Boolean, default value = false.
Example: &disbleChat=true
This parameter helps to activate the "Raise Hand" feature in a room. Participants will be able to click the "Raise hand" button, and the raised hand icon will appear. The icon is displayed in participant’s tile and in the list of participants in the moderator’s panel.
Type=Boolean, default value = false.
Example: &handEnabled=true
It is used to make icons inside a tile of a participant invisible. With this parameter, you can hide a participant name and the following icons: cam on/off, mic on/off, absence, raised hand, and pin button.
Type=Boolean, default value = false.
Example: &hideIndicators=true
This allows to display a name of a participant.
A participant’s name may be known before they join the meeting. It is possible to pass their name from your internal system, so the user doesn't have to enter it on the welcome page.
If you specify the name in the attribute, the user will not be able to change it through UI.
Type: String, default value = not set.
Example: &displayName=JohnSnow
This parameter determines roles in a webinar room where there are participants and viewers. All attendees are viewers only by default.
Participants join a room as regular users and can turn on their camera and microphone. Participants also have a standard rectangle icon of a participant. Viewers can observe what is happening in a room, can see and hear, but they do not have a dedicated participant rectangle icon and cannot turn on their camera or microphone.
Note: It is used for webinar rooms only.
Type = Boolean, default value = false.
Example: &itisparticipant=true
This helps to set the UI language of a meeting to match your product or service. In general, the UI language depends on language settings of a participant's browser. A user sets the language in their browser settings, and then its value is transmitted by the browser in the "Accept-Language" header of an HTTP request info.
Select one of these:
Therefore, in most cases, you do not need to specify this parameter explicitly. If the UI of a video room is translated and available for user’s language, then UI will be automatically switched to it. If a language is unavailable, the default English version will be shown.
But sometimes you need to explicitly set a language based on your internal/enterprise settings, use this parameter.
Type: String, default = not set.
Example: &lang=en
This sets the number of concurrent active attendees in a room at one time. This is the maximum value of users/attendees with turned on cams/mics.
If another user starts to speak (be active, turn on the cam/mic), but the number of active attendees exceeds the specified value, then this user will receive a system error that they cannot turn it on: "The limit of maximum active attendees is exceeded".
If no value is specified in the URL, any participant can turn on cam/mic. Please be aware that the number of active users is directly proportional to the load on media servers. With an overwhelming number of active attendees, a server may become overloaded, and newly connected users may see a connection error.
The maxBroadcasters and maxWatchers parameters should be specified for each participant in the URL. Please refer to &maxWatchers parameter.
Type: Numeric, default = 0.
Example: &maxBroadcasters=10
This sets the number of concurrent attendees in a room at one time. This is the maximum value of users/viewers that can be in a room and be represented by their own "participant" rectangle. Participants can turn on their cam/mic at any time.
The maxBroadcasters and maxWatchers parameters should be specified for each participant in the URL. Please refer to &maxWatchers parameter.
Type: Numeric, default = 0.
Example: &maxWatchers=50
This helps to squeeze the participants' tiles so that as many participants as possible can fit into one view without scrolling. This parameter allows increasing the number of simultaneously displayed tiles of participants on a screen to the maximum.
Type: Boolean, default = false.
Example: &minimizeTiles=true
This helps to skip the welcome page with the name input field and cam/mic selection. You can skip the cam/mic selection elements when you already know the user's devices, or you need to connect the user immediately.
In that case, you should specify a user’s name in the attribute and use ClientAPI for "Join" method. Please refer to the "Join" method.
Type: Boolean, default = false.
Example: &nameScreenDisabled=true
This is an identifier of a participant in case you want to set it explicitly. It is used for synchronization with your database or enterprise services.
You can select any value you prefer: number, GUID or even email.
Please, note: Only one session is possible with one unique identifier. If another participant with the same peerID connects, a new session will be created for the recent participant, while the session of the first one will be terminated. This is also the case when a link is opened in a different browser: a new session will be created with the recent browser, while previous connection will be terminated.
Example:
The peerID is used for:
Type = String, default value = set by the video server with a random GUID value.
Example: &peerId=802380f4-dd70-4d60-9738-fb5ae8709ae7
This parameter sets a privileged role for a participant.
Values:
By default, all attendees are regular participants. They can manage their own cams and mics. But a moderator can manage participants, turn off their cams/mics, allow entering, etc. You can assign the "moderator" role to a host, and all other attendees will be regular participants. For more details, please refer to the Moderator feature.
Type: String, default = not set.
Example: &role=moderator
A room ID is set by you according to your rules. You don't need to call any special methods that might restrict you in naming rooms.
An identifier consists of two parts: «server ID» + «room ID». A server ID is a "servN". Please see the List of servers. A room ID is any alphanumeric character set. If a server is not specified, you will be connected to a default one. If a server is specified explicitly, you will be connected to it.
Please note that &roomId determines the room number, but the prefixes /call/ or /webinar/ are interface modifiers. Thus, the methods /call/?roomId=testroom and /webinar/?roomId=testroom lead to the same room with a different interface.
Type: String. Default = required field to be specified explicitly.
Example:
&roomId=1111
&roomId=bokxlj33
&roomId=serv21111
&roomId=serv2bokxlj33
&roomId=serv2f53c1aa5-1492-4964-b4fe-f83b5b545e8d
It is used to arrange tiles of participants so that those who have cameras on will be displayed on the top.
By default, the participants' tiles are ordered based on the time they connected. This order does not change during a meeting. For example, if first users connect without video, and then the last participant turns on the camera, they may be placed under the scrolling (visible area) of the screen and no one will see them.
Using this parameter allows you to show active participants with video. However, enabling this option increases load on participants' CPUs.
Type=Boolean, default value = false.
Example: &sortPeers=true
It helps to start a meeting room in the Full Screen mode. Please see the "Full Screen mode" in our Knowledge Base.
Type: Boolean, default = false.
Example: &startWithFS=true
The JSON Web Tokens is an open, standard method for representing claims securely between two parties: https://jwt.io/
The JWT allows you:
Please see "Security" for details.
Type=String, default value = not set.
Example:
&token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoibW9kZXJhdG9yIiwic3RhcnRUaW1lIjoiMjAyMS0wNi0yMVQwMDowMDowMC4wWiJ9.Atj-TPL_GSLyuI565pI6X6GFjopXf62C6y4OgeeEk9KEb1cosDmo2sytpBv44PRuMRwgDg8AcqlMMgA0kcdJrBZ7AAywjb6RZVXlian6-6XQ0zx7OhYyDo2-mVxCO9dgYroXfz2Fw8lyNuqFl0AKEfFMPKaYf46u5kjwWmSyhh7bLbL969Eu3zWMk3sYLpWxULyndhkXrLqOVspK08Mla-AbxGJ94pZXJCKHK5UslhrGJ6RProN5nL4NaXOCKRX0ffKnklxiyn9MgKf0cc6Za0GCpjg-d3y6-UOVd0AXW8TWR-RllTgXaTUMMSLyWzHPsv-e2O-GsA0WJnBJEg
The parameter limits the lifetime of a token. The lifetime is counted in milliseconds from the first connection. After the specified period has expired, a participant cannot reconnect to the room with the token.
Type=Number, default value = not set.
Example: &tokenLifetime=60000
This is a super feature for joint viewing of online broadcasts directly in a video call room. No, you do not need to "share screen" with others and lose both video and audio quality and overload one of the participant's PC. You just need to insert a code of the YouTube player, our player, or any other HTML player, and it will appear for all participants in the room. Besides, the player saves all its standard functions: adaptive bitrate, counting unique viewers, displaying ads, Google Analytics counter, etc. Please refer to .
Type=String, default value = not set.
Example: https://meet.gcore.com/call/?roomId=serv2testroom&displayName=John%20Snow&video=https%3A%2F%2Fwww.youtube.com%2Fembed%2FXBPjVzSoepo
The waiting room function allows a moderator to manually determine which user is allowed to enter a video call room and who is not.
After enabling the feature, each participant will see the "Please wait for confirmation" message.
Type: Boolean, default = false.
Example: &waitingRoom=true
A set of debug attributes can be used by developers to create and test a video call room.
These parameters are used for debugging only.
A URL of REST method to check accessToken. Please see "Authentication of participants" for details.
Make sure you use https://
instead of http://
.
Please do not use this attribute publicly. For public use, a URL must be registered on our server or in your account.
Type=String, default value = not set.
Example: &accessUrl= https://your.domain.com/api/gcore/auth
A URL to get webhooks/events from a video calls server. Please see "Webhooks" for details.
Make sure you use https://
instead of http://
.
Please do not use this attribute publicly. For public use, URL must be registered on our server or in your account.
Type=String, default value = not set.
Example: &apiEvent=https://your.domain.com/api/gcore/webhook
This is for extra header request parameters and credentials for server-side webhooks/events. Use it for enabling Basic or Bearer authentication, etc.
Please do not use this attribute publicly. For public use, a URL must be registered on our server or in your account.
Type=String, default value = not set.
Example: &authorizationAccess=Basic%20Z2NvcmVfbWVldDo4dFpvOTZLSkhWRXFBanFBQlpZQg%3D%3D
This is for extra header request parameters and credentials for server-side check of authorization.
Use it for enabling Basic or Bearer authentication, etc.
Please do not use this attribute publicly. For public use, URL must be registered on our server or in your account.
Type=String, default value = not set.
Example: &authorizationAccess=Basic%20Z2NvcmVfbWVldDo4dFpvOTZLSkhWRXFBanFBQlpZQg%3D%3D
By default, all attendees are regular participants. They can manage their own cams and mics. But a moderator can manage participants, turn off their cams/mics, allow entering etc.
A moderator can do the following:
1. Operate the "Waiting room" function:
2. Operate cameras and microphones of participants:
3. Operate the sharing screen feature:
4. Operate raised hands:
5. Operate the list of participants:
To use the moderator role, you need to follow these steps:
Example:
Link for a regular user:
https://meet.gcore.com/call/?roomId=serv0_test1
Link for a moderator:
https://meet.gcore.com/call/?roomId=serv0_test1&token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoibW9kZXJhdG9yIiwid2FpdGluZ1Jvb20iOnRydWUsImhhbmRFbmFibGVkIjp0cnVlfQ.DO_JHMDfK2mi5rycIepLVxDVs0qcQAXAhHvI7hcOIjw
Where JWT is:
Recording is a video recording of the entire interface of a meeting room, as it is seen by regular viewers. A video includes:
Recording is a complex process that is carried out by our professional Streaming Platform. The video is recorded on a cloud server and is also stored in the Cloud of the Streaming Platform.
When a meeting is over and a video is recorded, it is automatically converted and becomes available for viewing in the video player. You can download the video, copy the player code for viewing on a web site, or get HLS video stream and insert manifest.m3u8 into your mobile app.
Recording can be started by moderator only.
To record, you need to follow these steps:
1. Generate a JWT token with additional attribute role=moderator inside it.
2. Add attribute canRecord=_true
into the JWT.
3. Open a room with the link.
4. Open the "Moderator" panel inside a room.
5. Press the "Record" button.
6. Press the "Stop" button.
A JWT example:
PAYLOAD: (DATA)
{ "role": "moderator", "canRecord": true, "roomId": "serv0_test1" }
By default, a moderator can manually record meetings.
If you want to record all meeting rooms automatically, you can enable the "Auto Recording" feature for your account.
Please note that, if one of the users forgets to close a browser tab, they still will be present in the room. And if they are present in the room, recording will continue.
Ask your manager or support team to enable the Auto recording feature.
Recording of room is made by our Streaming Platform. Video files are stored in the media storage.
Steps to find a video:
https://streaming.gcore.com/
.
Also, you can use Special API of the Streaming Platform. Please see the "Getting Recorded Video" section.
As you know, recording of a room is made by our Streaming Platform, and video files are stored in the media storage.
Steps:
3. Copy the token from the result page
4. Send us the copied token
5. Add the &canRecord
advanced attribute to the URL for a moderator, or ask us to set the Auto Recording feature.
Example of a permanent token:
1030$0b219f0239c7a418c499a9b0f4d93f0b081700000c346ad254694b15d09981d7cf6b24e41a243df6e9e23d5483820d98921d64c0cb06e9981c842ab31fd0e4db
In normal use, each user hears the original audio of a speaker. The interpretation feature allows users to hear the interpreter’s speech, that they can understand, in simultaneous translation mode.
If a moderator wants to include interpreters in their meetings or webinars, they now can enable Language Interpretation. With it, a host can designate an unlimited number (over 20) of participants as interpreters during a video session.
When a meeting or webinar starts, a host can turn on the interpretation feature which will provide interpreters with their own audio channels for the language they translate to. Attendees can then select the channel and listen to the audio translated in the language they need. They can also mute the original audio so not to hear it at a lower volume together with their chosen language.
In case of meetings with interpretation, only the original audio of a meeting or webinar is recorded, not the translated speech.
The languages below are available by default. If you need more, just please let us know:
There can be more than one interpreter for one language. If several interpreters use the same link, all of them can speak in the corresponding channel. They can speak both simultaneously or/and consecutively. For consecutive interpretation, they just need to mute the microphones.
For regular attendees, new language automatically appears when an interpreter is connected.
If an interpreter disconnects from a room for whatever reason, regular users can select the language for 30 seconds. If none of the interpreters reconnects, the language will become unavailable for select, and listeners of that language will be switched to the original audio.
A JWT example is:
{ "role": "interpreter", "featureInterpreters": true, "intLang": "de", "roomId": "serv0_test1" }
<iframe allow="camera; microphone; display-capture" style="height: 100%; width: 100%;" src="https://meet.gcore.com/webinar/?roomId=qwesfder4w4&displayName=Tom&accessToken=sda3-q23aed-aerae&peerId=123123-321as-waaew-ads&apiEvent=https://example.com/api/meet&accessUrl=https://example.com/api/accessCheck/&itisparticipant=true&nameScreenDisabled=true&startWithFS=true&controlsDisabled=true"></iframe>
Please see Embed a Room on Site and Attributes details.
There is a special library for interacting with iframe, which should be loaded separately.
<script type="text/javascript" charset="utf-8" src="https://<yourdomain.gvideo.co>/meetBridgeApi.js"></script>
Example:
<script type="text/javascript" charset="utf-8" src="https://meet.gcore.com/meetBridgeApi.js"></script>
JavaScript's method for initialization:
meetIframeBridge = new MeetIframeBridge.default({ element: $iframe.get(0), roomId: "serv1m6oci9e8" });
Where:
element
is a DOM object of iFrame.roomId
is an ID of the room.Note: Before initializing a class, you need to wait for an iframe element to be loaded.
Client API methods allow you to control a video room, perform actions with hidden main controls, react to what is happening in a room.
Example of method:
Initializing:
var meetIframeBridge;
$('#meetframe').on("load", function() {
meetIframeBridge = new MeetIframeBridge.default({ element: $("#meetframe")[0], roomId: "serv1m6oci9e8" });
});
Joining:
meetIframeBridge.method({ name: "join", data: {constraints: {video: false, audio: false }}, callback: (e) => { alert(1); return true; } });
Volume adjusting:
meetIframeBridge.method({ name: "setVolume", data: 100, callback: (e) => { alert(1); return true; } });
Name changing:
meetIframeBridge.method({ name: "changeDisplayName", data: "Tom", callback: (e) => { // return value } });
Getting screenshot of a user’s video:
meetIframeBridge.method({ name: "getScreenshotByPeerId", data: "id", callback: (e) => { // "e" parameter will have screenshotted data } });
Method name | Parameters | Description | |
---|---|---|---|
join | "constraints" = object Setup new devices: data: {constraints: { video: { deviceId: 'id', label: 'label', groupId: 'groupId', kind: 'video'}, audio: { deviceId: 'deviceId', label: 'label', groupId: 'groupId', kind: 'audio'}}} If you want to use devices by default: data: {constraints: {video: true, audio: true }} |
The Join method receives a stream from these devices (usually used with the nameScreenDisabled parameter) | |
enableMic | Unmute a microphone | ||
disableMic | Mute a microphone | ||
enableWebcam | Turn on a camera | ||
disableWebcam | Turn off a camera | ||
enableShare | Enable the screen sharing | ||
disableShare | Disable the screen sharing | ||
changeDisplayName | "name" data: string |
Change a name | |
setVolume | "volume" data: number |
Set a volume level (0 - 100) | |
getScreenshotByPeerId | "peerId" data: string |
Get a screenshot of a user with an id equal to peerId, the screenshot is given in base64 | |
setControlsVisible | "visible" data: bool |
Show and hide controls | |
isCameraEnabled | The user's camera is enabled | ||
isMicroEnabled | The user's microphone is enabled | ||
isShareEnabled | The user's sharing is enabled | ||
changeDevice | "constraints" = object data: {constraints: { audio: { deviceId: 'deviceId', label: 'label', groupId: 'groupId', kind: 'audio'}}} or data: {constraints: { video: { deviceId: 'id', label: 'label', groupId: 'groupId', kind: 'video'}}} |
Change a device on the fly. Specify 1 (one) device per method call. | |
playAudio | Start audio that failed to play (usually used together with autoplayWithoutAudioTrack) | ||
muteAudio | Mute incoming audio | ||
unmuteAudio | Unmute incoming audio | ||
setBitrate | "bitrateValue" data: number |
Set the maximum video bitrate in a room | |
isFullscreenEnabled | The fullscreen is enabled | ||
enableFullscreen | Enable the fullscreen | ||
disableFullscreen | Disable the fullscreen | ||
enablePin | "peerId" data: string |
Enable the PIN for a specified user | |
disablePin | Disable the PIN | ||
setLocale | "locale" data: string |
Dynamic language changes, available languages: en, ru | |
disabledTrackByModerator | "peerId", "kind = (audio || video)" data: {userPeerId: 'peerId', kind: 'audio'} |
Turn off video or audio from another user in a moderator mode. Only a moderator can disable video and audio | |
disableAllMics | Mute mics of all participants. It can be used only by a moderator | ||
disableAllCameras | Turn off cams of all participants. It can be used only by a moderator | ||
setHideIndicators | "hide" data: bool |
Show and hide indicators of other users (icons for microphones, cameras, username, pin button) |
Events on the client side allow you to react quickly to actions in a video room.
Example of event subscription:
meetIframeBridge.on('switchOnCamera', (e) => { your code here });
Event name | Data | Description |
---|---|---|
join | peerId, displayName | A user is added to the room. |
ready | Iframe is fully loaded and ready to go. | |
readyToJoin | The Room is ready to "join". | |
switchOnCamera | peerId, displayName | Camera is on |
switchOffCamera | peerId, displayName | Camera is off |
nerrorGetCamera | peerId, displayName | Camera connection error |
switchOnMic | peerId, displayName | Microphone is on |
switchOffMic | peerId, displayName | Microphone off |
errorGetMic | peerId, displayName | Microphone connection error |
switchOnShare | peerId, displayName | Screen sharing enabled |
switchOffShare | peerId, displayName | Screen sharing is off |
errorGetShare | peerId, displayName | Screen sharing error |
newPeer | peerId, displayName | New user connected |
peerClosed | peerId, displayName | The user left the room |
connectionFailed | Connection to the server failed | |
disconnected | Connection to the server was closed (example: the server is unavailable) | |
connectionClosed | The user has closed the connection to the server | |
connectionError | peerId, error message | An error message appeared on a client's side or on a server's side |
playingAudioPrevent | Audio doesn't play unless clicking (used together with the autoplayWithoutAudioTrack parameter) | |
switchOnPin | peerId | The PIN function is on |
switchOffPin | The PIN function is off | |
errorGetPin | peerId | The PIN feature error |
Please see REST API specification. Below is a brief list of endpoints.
To access Server API methods, you need to be authenticated. Please see "Server API Authentication" below.
Method name | Parameters | Description |
---|---|---|
/rooms/:roomId/closePeer | peerId, body:{peerId: id} |
Remove a user from a room, POST |
/rooms/:roomId/closeRoom | Delete a room, GET | |
/rooms/:roomId/durationOfBroadcast | View how long the room existed, GET | |
/rooms/:roomId/exists | Check if the specified room exists, GET | |
/rooms/:roomId/existingPeer (depricated) |
peerId, body:{peerId: id} |
Check does the user exist in the room, POST Please, use new method instead – /rooms/:roomId/existingPeer/:peerId |
/rooms/:roomId/existingPeer/:peerId | Check does the user exist in the room, GET | |
/rooms/:roomId/numberPeers | View the number of participants in the room, GET | |
chat/clear-rooms | body: { hostname: string, rooms: [{roomId: id, type: "call"|"webinar"}]} | Clear chat history in specific rooms, POST Where: "hostname" – domain name "type" – type of room, unnecessary attribute, where "call" is default value |
/rooms/:roomId/recording/start | Start recording for a specific room, POST | |
/rooms/:roomId/recording/stop | Stop recording for a specific room, POST | |
/rooms/:roomId/recording | Check video recording status, GET |
Example #1:
curl -L -X GET 'https://webrtc3.gvideo.co/rooms/serv1l8bsg8zw/durationOfBroadcast' -H 'Authorization: Bearer eyJ0eXAiOiJKV'
Example #2:
curl -X POST 'https://webrtc3.gvideo.co/rooms/serv0dxrpxoqr/recording/start' -H 'Authorization: Bearer eyJ0eXAiOiJKV'
Example #3:
Request:
curl -L -X POST 'https://webrtc3.gvideo.co/chat/clear-rooms' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV' \
-H 'Content-Type: application/json' \
--data-raw '{
"hostname": "102748.gvideo.co",
"rooms": [
{
"roomId": "serv0d17nfe1s"
}
]
}'
Response: 200 OK {"deleted":["serv0d17nfe1s"]}
There is a list of common response codes of REST API methods:
Code | Response Label | Description |
---|---|---|
200 | OK | OK |
400 | Bad Request | Token, roomId, peerId not found |
401 | Unauthorized | Invalid token |
403 | Forbidden | Access denied, contact your administrator |
404 | Not found | Invalid room ID |
500 | Internal Server Error | Server connection error |
We have a lot of servers worldwide. Some of them are for public usage.
A server can be derived from a room ID. For example: &roomId = serv1qweqwe.
Server | Country | Server URL | Description |
---|---|---|---|
serv0 | Luxembourg | https://webrtc3.gvideo.co:443 |
DEFAULT server, unless states otherwise (like &roomId=BMW) |
serv1 | Australia | https://webrtc4.gvideo.co:443 |
|
serv2 | USA | https://webrtc5.gvideo.co:443 |
|
serv3 | Singapore | https://webrtc6.gvideo.co:443 |
Note: There is an offset in a server’s URL. This is a temporary but necessary solution that will be changed soon. We will inform you additionally.
For debug purposes, you can call a server endpoint directly. But for public use, we apply strong restrictions and increase the level of security. Please tell us if you want to allow server-calls for specific servers and security parameters. In this case, all other calls will be rejected.
A call method such as:
https://webrtc3.gvideo.co/rooms/serv0l8bsg8zw1/durationOfBroadcast
For a non-existent room, the answer will be 400 error. If it is a 500 error or a timeout error, the server is unavailable.
Webhooks are user-defined callbacks triggered by meeting events. Webhooks are pushed to the URL specified in the apiEvent attribute:
Event name | Parameters | Description |
---|---|---|
joinPeer | roomId, peerId, displayName | New user connected |
closePeer | roomId, peerId, displayName | User disconnected |
This is a method of notifying that a participant has joined a room. This method is used for extra authentication on your side.
POST /joinPeer
Attributes:
Example:
{"event":"connected","roomId":"44fde071","peerId":"de9b6927","displayName":"user16"}
Example:
https://meet.gcore.com/call/?roomId=44fde071&displayName=user16&accessToken=caa630bb&peerId=de9b6927&apiEvent=https://dev.com/api/events&accessUrl=https://dev.com/api/accesscheck
This is a method of notifying that the connection between a server and a participant’s browser has been closed. In most cases, this means that the participant has left the room intentionally or due to a connection issue.
POST /closePeer
Attributes:
Example:
{"event":"disconnected","roomId":"44fde071","peerId":"de9b6927","displayName":"user16"}
Video conferencing tool manages data in real time. Thus, Server API and Client API of video conferencing are designed to control the behavior of users and video rooms in real time.
Statistics on usage and video recordings are stored in the Streaming Platform. Thus, please use
Video Platform’s REST API for those methods: https://api.gcore.com/docs/streaming.
To access Video Platform API, you need to be authenticated. Please see "Authentication of Participants and Access Limitation" above.
Video conferencing tool sends statistics data every 30 seconds to the Video Platform servers. This means that the usage statistics can always be multiply by 30 seconds.
This is a summary about a room.
GET /streaming/statistics/peers/summary
Attributes:
Output codes:
Output values:
Note: The result is aggregated data for all sessions of the specified room between «from» period until «to» period. Thus, if you use the same room ID each day, then use separate periods.
Example:
https://meet.gcore.com/call/?roomId=serv2test1
used for 60 minutes each day on Monday Jun 21 and on Tuesday Jun 22.
Example of usage:
https://api.gcore.com/streaming/statistics/peers/summary/?from=2021-06-21T00:00:00.0Z&to=2021-06-22T23:59:59.99Z&room_id=serv2test2a
Example of return data:
{
"data": {
"participants": 3,
"start_time": 1624268280,
"end_time": 1624358940,
"duration": 90660
},
"errors": []
}
This is data for each participant’s sessions in a room.
If an event lasted 60 minutes, and the user attended it for the first 5 minutes, then left the room, and joined again for the last 5 minutes, the statistics will reflect two sessions, each lasted for five minutes: 5 min + 5 min = 10 minutes (that is, = 600 seconds, instead of 3600 seconds of the total duration).
GET /streaming/statistics/peers/
Attributes:
Output codes:
Output values:
Example of usage:
https://api.gcore.com/streaming/statistics/peers/summary?from=2021-06-21T00:00:00.0Z&to=2021-06-22T23:59:59.99Z&room_id=serv2test2a
Example of return data:
{
"data": [
{
"person_id": "peer2",
"join_time": 1624268640,
"leave_time": 1624269300,
"duration": 660
},
{
"person_id": "peer1",
"join_time": 1624270800,
"leave_time": 1624274520,
"duration": 3720
},
{
"person_id": "peer1",
"join_time": 1624270380,
"leave_time": 1624270740,
"duration": 360
}
],
"errors": []
}
Recordings of room meetings are stored in the media storage of the Streaming Platform.
You need to search the video and then get by id.
GET /streaming/videos/search
Attributes: q – Search query. The search performed among all video names. Specify roomId as a search query.
Output values: Array of available videos for specified ID.
If a session lasted more than 4 hours, the recording will be divided into several videos for 4 hours each. In this case, you need to get all videos separately.
Please see more details in documentation.
GET https://api.gcore.com/streaming/videos/{video_id}
Please see more details in documentation.
Output values: Metadata of the video. Use fields "hls_url" for .m3u8 stream in external players or "origin_host"+"origin_resource" for getting an original MP4 file.
Example of output data:
{
"hls_url": "https://id10835.gcore.com/videos/10835_UaX2pjxen2guUw3/master.m3u8",
"origin_host": "s-ed1.cloud.gcore.lu",
"origin_resource": "9208-mediaplatform10835/videos/UaX2pjxen2guUw3.mp4",
}
Please see more details in documentation.
Example of usage:
Step 1: https://api.gcore.com/streaming/videos/search?q=serv1test2a
Step 2: https://api.gcore.com/streaming/videos/117800
There is a general limit of four requests per second. If you exceed the rate limit, you will receive a message.
Calling API should be done through an endpoint on your server. This will help to avoid exposing secret keys to users and to keep them safe.
To access Client API, we use JSON Web Tokens (JWT), which is an open, industry standard RFC 7519 method for representing claims securely between two parties.
For more information what JWT is and how to use it please visit https://jwt.io/introduction
JWT allows you to accurately determine the validity of the video room settings and unambiguously determine the belonging of the token to your account.
To use the JWT, you need a Public & Secret Key. A new key is generated by you. Send us your public part of the key via support or personal manager. Please see "RSA Public & Secret Key generation" section below for details.
You can activate the option to use the JWT in your account. If you activate it, you will have to send a JWT &token=xxx in every request. Without a token, the "Access denied" message will appear.
If you activate the JWT option, you will not be able to use the &accessToken=xxx attribute.
The header typically consists of two parts: the type of the token and the signing algorithm being used.
Signing algorithms are:
HEADER:ALGORITHM & TOKEN TYPE
{
"typ": "JWT",
"alg": "RS256"
}
HEADER:ALGORITHM & TOKEN TYPE
{
"typ": "JWT",
"alg": "HS256"
}
The body of a JWT contains important data that should be signed and verified. The data in a JWT has a higher priority over the values of the same parameters specified in the URL attributes. This means that if an attribute value is specified both in a JWT and in the URL attribute set, the value from the JWT will be used.
Please refer to the table of attributes above to see the parameters that can be set in a JWT.
Priority of data from a JWT and URL:
The list of extra attributes for a JWT:
The list of attributes is expanding, tell us what attributes (from general list of URL attributes) you need inside a token.
PAYLOAD:DATA
{
"roomId": "abcd1234",
"role": "moderator",
"startTime": "2022-06-21T00:00:00.0Z",
"iat": 1516239022
}
Example:
https://meet.gcore.com/call/?roomId=YOUR_ROOM_ID&token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoibW9kZXJhdG9yIiwic3RhcnRUaW1lIjoiMjAyMS0wNi0yMVQwMDowMDowMC4wWiJ9.Atj-TPL_GSLyuI565pI6X_6GFjopXf62C6y4OgeeEk9KEb_1cosDmo2sytpBv44PRuMRwgDg8AcqlMMgA0kcdJrBZ7AAywjb6RZVXlian6-6XQ0zx7OhYyDo2-mVxCO9dgYroXfz2Fw8lyNuqFl0AKEfFMPKaYf46u5kjwWmSyhh7bLbL969Eu3zW_Mk3sYLpW_xULyndhkXrLqOVspK08Mla-AbxGJ94pZXJCKHK5UslhrGJ6RProN5nL4NaXOCKRX0ffKnklxiyn9MgKf0cc6Za0GCpjg-d3y6-UOVd0AXW8TWR-RllTgXaTUMMSLyWzHPsv-e2O-GsA0WJnBJEg
Use your key to sign the token with the algorithm specified in the header.
The signature is used to verify the data wasn't changed along the way, and, in the case of tokens signed with a private key, it can also verify that the sender of the JWT is who it says it is.
We highly recommend using RS256 asymmetric type of algorithm. See section "RSA Public & Secret Key generation" to generate public/private keys.
To access Server API and Streaming Platform API, we use an API token in the Authorization header. The API token is a unique key that all users and applications should add to requests to interact with our services.
Please authenticate via API.
Choose one of the methods described below: Bearer authentication or Permanent API tokens.
The token will be provided upon Login request with login and password from your personal account.
In the response, you will get two tokens: access and refresh.
To manage Server API services, add your access token after Bearer in the authorization header like this:
Authorization: Bearer eyJ0eXAiOiJKV
Use the Refresh request to refresh your access token.
Steps as an example:
Example:
curl -L -X GET 'https://webrtc3.gvideo.co/rooms/serv1l8bsg8zw/durationOfBroadcast' -H 'Authorization: Bearer eyJ0eXAiOiJKV'
We allow integration with your user control systems. It could be an external CMS, LMS or any security server. You can verify every user who enters a room.
Our server calls the method specified in &accessUrl attribute. Your server should return code as below. Based on the code, the system allows access to the room or doesn't.
If the access to the specified method is protected via Basic authorization, you need to register a required header in the attribute &authorizationAccess=<header>
.
These debugging attributes can be used in the URL. But for public use, you need to inform us to register methods on the server.
Example:
https://meet.gcore.com/call/?roomId=44fde071&displayName=user16&accessToken=caa630bb&peerId=de9b6927&apiEvent=https://dev.com/api/events&accessUrl=https://dev.com/api/accesscheck
POST
Input values:
&accessToken
attributeExample:
{"accessToken":"caa630bb","roomId":"44fde071","peerId":"de9b6927"}
Output codes we require from you:
Code | Response Label | Description |
---|---|---|
200 | OK | A participant is allowed to join the room. |
400 | Bad Request | Token, roomId, peerId not found. |
401 | Unauthorized | A participant is not allowed to join the room, access declined. |
403 | Forbidden | Invalid token. |
404 | Not found | Invalid room ID. |
409 | Conflict | Another connection with an existing peerId was found. In this case, a new connection is established. The previous connection is terminated, and its users get the message: "Someone joined into the room with your ID". |
423 | Locked | Access is closed temporarily or permanently for locked rooms after you close it or limit the maximum number of participants. It is to display a human readable message about the reason and contact info for a moderator, instead of the "Access denied" message. |
425 | Too Early | Access is closed temporarily for those events that have not yet started. We display a human readable message "The event has not started yet. Start % d%." Start time is taken from a JWT. |
500 | Internal Server Error | Server connection error. |
More examples:
We use RS256 or HS256 algorithm for signing and generating hash. RS256 refers to the SHA256 hash function (RFC states).
"alg" Param Value | Digital Signature Algorithm |
---|---|
RS256 | RSASSA-PKCS1-v1_5 using SHA-256 |
HS256 | HMAC using SHA-256 |
Please use https://jwt.io/ to verify your JWT tokens.
RS256
RS256 refers to the SHA256 hash function. (RFC states).
RSA key of size 2048 bits or larger must be used with this algorithm.
The RSASSA-PKCS1-v1_5 SHA-256 digital signature is generated as follows: generate a digital signature of the JWS Signing Input using RSASSA-PKCS1-v1_5-SIGN and the SHA-256 hash function with the desired private key. This is the JWS Signature value.
Please see "RSA Public & Secret Key generation" section below for details.
HS256
A key of the same size as the hash output (for instance, 256 bits for "HS256") or larger MUST be used with this algorithm.
Keys can be generated by any RSA keygen tool. If you don’t know what to do, we recommend using the OpenSSL tool.
To perform the following actions for Windows or Linux, check and/or install OpenSSL on your system.
Commands to generate secret key and export public key:
openssl genrsa -out key_name.key 2048
openssl rsa -in key_name.key -pubout -outform PEM -out key_name.key.pub
File key_name.key.pub will contain public part of the key. File key_name.key will contain the private part of the key.
Note: The number "2048" in the above command indicates the size of the private key. You can choose one between 2048 and 4096 (these numbers represent bits). The larger sizes offer greater security, but this is offset by a penalty in CPU performance. We recommend the best practice size of 2048. It seems like 2048 bits is enough for the foreseeable future (2030 horizon).
Was this article helpful?
Explore the Streaming Platform by Gcore