Skip to main content
Version: 0.x.x

Custom Video Track - Javascript

We have introduced the ability to pass a custom video track for the video of the participants. This feature can be used to add custom video encoder config, optimization mode (whether you want to focus on motion, text or detail of the video) and background removal & video filter from external SDK(e.g., Banuba) and send it to other participants.

Creating a Custom Video Track

  • You can create a Video Track using createCameraVideoTrack() method of VideoSDK class.
  • This method can be used to create video track using different encoding parameters, camera facing mode, bitrateMode, maxLayer and optimization mode.

Parameters

  • cameraId:

    • type: String
    • required: false
    • It will be the id of the camera from which the video should be captured.
  • encoderConfig:

    • type: String
    • required: false
    • default: h360p_w640p
    • You can choose from the below mentioned list of values for the encoder config.
Encoder ConfigResolutionFrame RateOptimized (kbps)Balanced (kbps)High Quality (kbps)
h90p_w160p160x9015 fps60100150
h180p_w320p320x18015 fps100150250
h216p_w384p384x21615120200350
h360p_w640p640x36020200400600
h540p_w960p960x54025350550800
h720p_w1280p1280x72030100015002000
h1080p_w1920p1920x108030160022002700
h1440p_w2560p2560x144030500055006000
h2160p_w3840p3840x216030800085009000
h120p_w160p160x1201560100150
h180p_w240p240x18015100150250
h240p_w320p320x24015120200350
h360p_w480p480x36020200400600
h480p_w640p640×48025300500700
h540p_w720p720×54030350550800
h720p_w960p960×7203090013001600
h1080p_w1440p1440×108030160022002700
h1440p_w1920p1920×144030350040004500
note

Above mentioned encoder configurations are valid for both, landscape as well as portrait mode.

  • facingMode:

    • type: String
    • required: false
    • Allowed values : front | environment
    • It will specify whether to use front or back camera for the video track.
  • optimizationMode

    • type: String
    • required: false
    • Allowed values: motion | text | detail
    • It will specify the optimization mode for the video track being generated.
  • multiStream

    • type: boolean
    • required: false
    • default: true
    • It will specify if the stream should send multiple resolution layers or single resolution layer.
    info
    • For meetings with fewer than or equal to four participants, setting multiStream:false is regarded as best practice.
    • This parameter is only available from v0.0.53.
  • bitrateMode:

    • type: String
    • required: false
    • Allowed values : bandwidth_optimized | balanced | high_quality
    • Controls the video quality and bandwidth consumption. You can choose between high_quality for the best picture, bandwidth_optimized to save data, or balanced for a mix of both. Defaults to balanced.
  • maxLayer:

    • type: Number
    • required: false
    • Allowed values : 2 | 3
    • default: 3
    • Specifies the maximum number of simulcast layers to publish. This parameter only has an effect if multiStream is set to true.

Returns

  • MediaStream

Example

let customTrack = await VideoSDK.createCameraVideoTrack({
optimizationMode: "motion",
encoderConfig: "h720p_w1280p",
facingMode: "environment",
bitrateMode: VideoSDK.Constants.BitrateMode.BANDWIDTH_OPTIMIZED,
maxLayer: 2
});

Using Custom Video Track

Custom Track while initializing the meeting

If you are passing webcamEnabled: true in the initMeeting and want to use custom tracks from start of the meeting, you can pass custom track in the initMeeting params as shown below.

let customTrack = await VideoSDK.createCameraVideoTrack({
optimizationMode: "motion",
encoderConfig: "h720p_w1280p",
facingMode: "environment",
bitrateMode: VideoSDK.Constants.BitrateMode.BANDWIDTH_OPTIMIZED,
maxLayer: 2
});

meeting = VideoSDK.initMeeting({
meetingId: meetingId, // required
name: name, // required
micEnabled: micOn, // optional, default: true
webcamEnabled: webcamOn, // optional, default: true

// Pass the custom track here which will be used to when webcam is auto started
customCameraVideoTrack: customTrack,
});

Custom Track with enableWebcam()

In order to switch tracks during the meeting, you have to pass the MediaStream in the meeting.enableWebcam() method.

note

Make sure to call disableWebcam() before you create a new track as it may lead to unexpected behavior.

let customTrack = await VideoSDK.createCameraVideoTrack({
optimizationMode: "motion",
encoderConfig: "h720p_w1280p",
facingMode: "environment",
bitrateMode: VideoSDK.Constants.BitrateMode.BANDWIDTH_OPTIMIZED,
maxLayer: 2
});

meeting.enableWebcam(customTrack);

Got a Question? Ask us on discord