Initialize Meeting - Android
To configure a VideoSDK meeting you require two things, first the token
which will be used for Authentication purpose and a meetingId
which will be used to specify where a participant will join. Let's see each of the steps closely.
Generating Token
You can generate a token
in two ways:
-
Temporary Token
: You can visit Dashboard's API Key section and generate the temporary token from there. -
Server
: You can setup JWT in backend and make an API call to get the token from your server.
To learn more about Authentication and token in detail you can follow this guide.
- Kotlin
- Java
// With Temporary Token
fun getToken(): String? {
// Update the token here from the VideoSDK dashboard
return "YOUR_TOKEN"
}
// Server
fun getToken(): String? {
val token = arrayOfNulls<String>(1)
AndroidNetworking.get("http://localhost:3000/get-token")
.build()
.getAsJSONObject(object : JSONObjectRequestListener() {
fun onResponse(response: JSONObject) {
try {
token[0] = response.getString("token")
} catch (e: JSONException) {
e.printStackTrace()
}
}
fun onError(anError: ANError) {
anError.printStackTrace()
}
})
return token[0]
}
// With Temporary Token
public String getToken()
{
// Update the token here from the VideoSDK dashboard
String token = "YOUR_TOKEN";
return token;
}
// Server
public String getToken()
{
final String[] token = new String[1];
AndroidNetworking.get("http://localhost:3000/get-token")
.build()
.getAsJSONObject(new JSONObjectRequestListener() {
@Override
public void onResponse(JSONObject response) {
try {
token[0] = response.getString("token");
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(ANError anError) {
anError.printStackTrace();
}
});
return token[0];
}
Generating Meeting Id
With the token ready, we can get the meetingId
from the VideoSDK's rooms API.
- Kotlin
- Java
fun getMeetingId(token: String?): String? {
var meetingId: String? =null;
// We will use VideoSDK rooms API endpoint to create a meetingId
AndroidNetworking.post("https://api.videosdk.live/v2/rooms")
.addHeaders("Authorization", token) // We will pass the token in the headers
.build()
.getAsJSONObject(object : JSONObjectRequestListener() {
fun onResponse(response: JSONObject) {
try {
meetingId = response.getString("roomId")
} catch (e: Exception) {
e.printStackTrace()
}
}
fun onError(anError: ANError) {
anError.printStackTrace()
}
})
//we will return the meetingId which we got from the response of the api
return meetingId
}
public String getMeetingId(String token) {
final String[] meetingId = new String[1];
// We will use VideoSDK rooms API endpoint to create a meetingId
AndroidNetworking.post("https://api.videosdk.live/v2/rooms")
.addHeaders("Authorization", token) // We will pass the token in the headers
.build()
.getAsJSONObject(new JSONObjectRequestListener() {
@Override
public void onResponse(JSONObject response) {
try {
meetingId[0] = response.getString("roomId");
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onError(ANError anError) {
anError.printStackTrace();
}
});
//we will return the meetingId which we got from the response of the api
return meetingId[0];
}
To perform Network call you need to add Fast Android Networking Library in your application.
Initialization of Meeting
- To initialize the meeting, first we have to initialize the VideoSDK.
We can initialize the VideoSDK using
initialize()
method provided by the SDK.
VideoSDK.initialize(Context context)
- Next, we have to set token property of VideoSDK class.
By using
config()
method, you can set the token property of VideoSDK class.
VideoSDK.config(String token)
- Now, we can initialize the meeting using a factory method provided by the SDK called
initMeeting()
.
initMeeting()
is responsible for initializing the meeting with the provided configuration, which includes the meetingId
, name
, participantId
and many more.
When conducting one-to-one meetings, it is recommended to set multistream:false
.For more information on multistream, refer to the multistream documentation.
Let's take a deeper look at the available configuration options first.
VideoSDK.initMeeting(
Context context, // context of activity
String meetingId, // id of meeting
String name, // name of participant
boolean micEnabled, // flag to enable-mic
boolean webcamEnabled, // flag to enable-webcam
String participantId, // id of participant
String mode, // mode of participant
boolean multiStream, // multiStream
Map<String, CustomStreamTrack> customTracks, // map of customTracks
JSONObject metaData, // metaData
String signalingBaseUrl // signalingBaseUrl
PreferredProtocol preferredProtocol //preferredProtocol
)
-
context
:- Context of activity.
- It will accept
Context
type value.
-
meetingId
:- meetingId is unique identifiers that allow participants to join a specific meeting or room.
- It will accept
String
type value. - It will be in the format of
xxx-yyy-zzz
and will be generated using the VideoSDK's Room API.
-
name
:- This will represent the name of the participant in the meeting.
- It will accept
String
type value.
-
micEnabled
:- This is a
boolean
flag, indicating whether a participant's microphone will be automatically enabled when they join a meeting.
- This is a
-
webcamEnabled
:- This is a
boolean
flag, indicating whether a participant's webcam will be automatically enabled when they join a meeting.
- This is a
-
participantId
:- This will be the unique identifier for the participant inside the meeting.
- It can be used to specify the unique identifier which can be linked with your own database service.
- It has to be of
String
type. - If you passed
null
then by default VideoSDK will generate unique id for each participant.
-
multistream
:- This is a
boolean
flag, indicating if the stream should send multiple resolution layers or single resolution layer.
- This is a
You must ensure that the participantId
is not repeated in the same meeting or room, It will enable VideoSDK to eliminate any participant respect to that participantId
.
-
mode
:-
There are 2 types of modes:
-
CONFERENCE
: Both audio and video streams will be produced and consumed in this mode. -
VIEWER
: Audio and video streams will not be produced or consumed in this mode.
-
-
It has to be of
String
type. -
If you passed
null
then by default VideoSDK will setCONFERENCE
mode.
-
-
multiStream
:-
It will specify if the stream should send multiple resolution layers or single resolution layer.
-
It has to be of
boolean
type.
-
-
customTracks
:-
If you want to set the initial custom tracks, then you can pass map of custom tracks in this paramater.
-
It has to be of
Map<String, CustomStreamTrack>
type.
-
-
metaData
:-
If you want to provide additional details about a user joining a meeting, such as their profile image, you can pass that information in this parameter.
-
It has to be of
JsonObject
type.
-
-
signalingBaseUrl
:-
If you want to use a proxy server with the VideoSDK, you can specify your base URL here.
-
It has to be of
String
type. -
It is Optional parameter.
-
If you intend to use a proxy server with the VideoSDK, priorly inform us at support@videosdk.live
-
preferredProtocol
:-
If you want to provide a preferred network protocol for communication, you can specify that in
PreferredProtocol
, with options includingUDP_ONLY
,UDP_OVER_TCP
, andTCP_ONLY
. -
It has to be of
PreferredProtocol
type. -
It is Optional parameter.
-
With all the configuration options explained, here is how you can initialize the meeting.
- Kotlin
- Java
class MainActivity : AppCompatActivity() {
fun getToken(): String? {
...
}
fun getMeetingId(token: String?): String? {
...
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// initialize AndroidNetworking to perform Network call
AndroidNetworking.initialize(applicationContext)
//We will fetch token and meetingId and store it in local variables
val token: String = getToken()
val meetingId = getMeetingId(token)
// initialize the VideoSDK
VideoSDK.initialize(this@MainActivity)
// set token property of VideoSDK
VideoSDK.config(token)
// create a new meeting instance
val meeting: Meeting = VideoSDK.initMeeting(
this@MainActivity, meetingId, "NAME HERE",
true, true, null, null, false, null, null
)
Log.d("VideoSDK", "onCreate: $meetingId")
}
}
public class MainActivity extends AppCompatActivity {
public String getToken()
{
...
}
public String getMeetingId(String token) {
...
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// initialize AndroidNetworking to perform Network call
AndroidNetworking.initialize(getApplicationContext());
//We will fetch token and meetingId and store it in local variables
String token = getToken();
String meetingId = getMeetingId(token);
// initialize the VideoSDK
VideoSDK.initialize(MainActivity.this);
// set token property of VideoSDK
VideoSDK.config(token);
// create a new meeting instance
Meeting meeting = VideoSDK.initMeeting(
MainActivity.this, meetingId, "NAME HERE",
true, true, null, null, false, null, null
Log.d("VideoSDK", "onCreate: " + meetingId);
}
}
API Reference
The API references for all the methods utilised in this guide are provided below.
Got a Question? Ask us on discord