Skip to main content

videosdk 5.0.3 copy "videosdk: ^5.0.3" to clipboard
videosdk: ^5.0.3 copied to clipboard

Video SDK Flutter to simply integrate Audio & Video Calling API or Live Video Streaming API to your app with just a few lines of code.

5.0.3 #

Release Date: Nov 5th, 2026

Change Log:

  • Fixed the camera video orientation issue to improve participants' visibility.

5.0.2 #

Release Date: 29th October 2026

dependencies:
  videosdk: ^5.0.2

Breaking Changes:

  • Remote video now starts at VideoQuality.LOW instead of VideoQuality.HIGH. If your app wants full quality, call participant.setQuality(VideoQuality.HIGH) from the Events.streamEnabled handler.

5.0.1 #

Release Date: 16th October 2026

dependencies:
  videosdk: ^5.0.1

What's New #

  • Events.videoQualityChanged is delivered on remote participants with {prevQuality, currentQuality}.

Fixed #

  • Audio profiles use the right bitrate: standard_stereo, high_quality and high_quality_stereo send 64, 128 and 192 kbps (all three sent 32 kbps). (Android)
  • When nobody is speaking, the active speaker id is null instead of the text "null", and so are the media relay fields. (Android)
  • pauseAllStreams() and resumeAllStreams() without a kind now apply to all streams and fire one event with null.
  • Joining in RECV_ONLY mode with the mic and camera on no longer tries to publish. (Android)
  • setQuality() can be retried after a failed call.
  • Events.mediaRelayError fires. (iOS)
  • setAudioDeviceChangeListener reports the route actually in use right after join, once per switch. (iOS)
  • On the pre-call screen a connected Bluetooth or wired headset is kept instead of being switched to the speaker. (iOS)
  • A "decryption failed" state now reaches your app.
  • startTranslation() while translation is running, and stopTranslation() while it is stopping or stopped, are refused straight away with an error.
  • Screen-share audio is reported as its own stream kind, shareAudio, and no longer cuts the participant's microphone audio.

5.0.0 #

Release Date: 11th October 2026

dependencies:
  videosdk: ^5.0.0

Upgrading from 4.0.1 or 3.12.x? 5.0 is a new major version: it needs new project setup and renames much of the API. Everything below is the complete 4.x → 5.0 change list, and the migration guide has the step-by-step guide and every rename.

Platform support #

5.0 supports Android and iOS. Applications that target Web, macOS or Windows should stay on 4.0.1.

Breaking: project setup #

  • Android: Java 17, minSdkVersion 23, and compileSdkVersion / targetSdkVersion 36.
  • iOS: deployment target 13.0, with Flutter's Swift Package Manager support on. If your project uses CocoaPods only, run flutter config --enable-swift-package-manager once.
  • iOS screen share needs a Broadcast Upload Extension in your app; see the migration guide.
  • Remove any direct videosdk_webrtc dependency and its imports. RTCVideoView, RTCVideoRenderer and MediaDeviceInfo now come from package:videosdk/videosdk.dart.
  • Run flutter clean before your first 5.0 build.

Breaking: API #

  • Many APIs are renamed. Old names are removed, not deprecated. The ones most apps use:
    • Stream → RTCStream; CustomTrack → CustomStreamTrack, and its dispose() → stop().
    • createRoom(displayName:) → participantName:; customCameraVideoTrack / customMicrophoneAudioTrack → customCameraTrack / customMicrophoneTrack.
    • Enum values are upper case: FacingMode.user / environment → FacingMode.FRONT / BACK.
    • Mode.CONFERENCE / VIEWER → Mode.SEND_AND_RECV, RECV_ONLY or SIGNALLING_ONLY.
    • Error names say ROOM, not MEETING. Codes are unchanged.
  • One error type. Failed calls throw VideoSDKError, with a numeric code, a name and a message. It replaces 4.0.1's PubSubException types.
  • Actions finish before they complete, and throw on failure. join(), leave(), end(), muteMic(), enableWebcam(), pin(), remove(), setQuality() and the rest return a Future that throws when the action fails. A failing call you don't await raises an unhandled async error, so await these inside try/catch, and turn on the unawaited_futures lint to find them.
  • Screen share takes a track. enableScreenShare() no longer takes enableAudio or source; set them on a track from createScreenShareVideoTrack(). CustomTrack.toMap() is removed.
  • Track factories are typed. createCameraVideoTrack() and createMicrophoneAudioTrack() return Future<CustomStreamTrack>, and createScreenShareVideoTrack() returns Future<CustomStreamTrack?> (null when the user declines the capture prompt), instead of dynamic.
  • noiseConfig is typed. createMicrophoneAudioTrack(noiseConfig:) takes a NoiseConfig (noiseSuppression, echoCancellation, ...) instead of a Map<String, bool>.
  • createRoom() options. maxResolution takes MaxResolution.HD (the default) or MaxResolution.SD. defaultCameraIndex is replaced by defaultCamera: FacingMode.FRONT or BACK. debugMode is removed; use VideoSDK.setLogLevel().
  • PubSub takes a listener. subscribe(topic, PubSubMessageListener(...), [PubSubSubscribeOptions]) replaces the callback arguments and returns nothing; saved messages arrive on onOldMessagesReceived. PubSubMessage.timestamp is a String.
  • Removed: the AI Character API (Character, Room.createCharacter(), Room.characters and the character* events), and Events.hlsStarted / hlsStopped (use Events.hlsStateChanged). The full list is in the migration guide.

New #

  • Video effects: framing, low light, styles, filters and background blur on your outgoing camera, with setVideoEffects(). On Android, face framing and blur need ML Kit in your app.
  • Capture an image with flash: captureImage(flash: CaptureFlash.ON). The front camera lights the scene with a white screen once you call VideoSDK.setScreenFlash(true).
  • Pre-call test: VideoSDK.runPreCallTest() checks the camera, the microphone and the network before you join.
  • Preview before joining: a track from createCameraVideoTrack() renders in RTCVideoView before the meeting, and createRoom() publishes that same camera.
  • Know when a video freezes: Events.streamStateChanged on an RTCStream reports ACTIVE, ENDED, STUCK, FREEZE_DETECTED and FREEZE_RESOLVED.
  • Data messages: room.send() sends text or bytes to everyone in the room, and Events.dataReceived delivers them.
  • Screen share quality: new h480p_15fps, h480p_30fps and h720p_30fps presets on CustomScreenShareTrackConfig, and setScreenShareQuality() caps the quality of a screen share you receive.
  • SDK logs in flutter run: VideoSDK.enableLogForwarding() sends the SDK's own log lines to a Dart callback.
  • Also new: Room.respondEntry(), setAudioDeviceChangeListener() and getShareAudioStats().

5.0.0-beta.8 #

Release Date: 10th October 2026

Beta release: This version is intended for testing before the stable 5.0.0 release. Pin the prerelease explicitly when adding it to your application.

dependencies:
  videosdk: 5.0.0-beta.8

Breaking: API names now match the Android, iOS and React Native SDKs. Old names are removed, not deprecated. The full before/after list is in the migration guide.

Breaking: The AI Character API is removed.

Behaviour change: room.participants no longer contains the local participant, as in 3.x. Use room.localParticipant for yourself. Code that looked yourself up in room.participants must switch.

Behaviour change: Events.streamStateChanged on an RTCStream now fires. Handlers registered with stream.on() receive a StreamState: ACTIVE, ENDED, STUCK, FREEZE_DETECTED and FREEZE_RESOLVED.

Know when a remote video freezes #

stream.on(Events.streamStateChanged, (StreamState state, int timestamp) {
  if (state == StreamState.STUCK || state == StreamState.FREEZE_DETECTED) {
    // show a "poor connection" badge on this tile
  }
});
  • STUCK: no video has arrived for about 5 seconds.
  • FREEZE_DETECTED / FREEZE_RESOLVED: the picture froze, and recovered.
  • ACTIVE / ENDED: the stream started or stopped.

Remove the handler with stream.off() when the tile goes away.

Changed #

  • TranscriptionText.type is a TranscriptionType (REALTIME / FULL_SENTENCE).
  • Error names say ROOM, not MEETING: ERROR_ACTION_PERFORMED_BEFORE_ROOM_JOINED, ERROR_ROOM_RECONNECTING, INVALID_ROOM_ID and six more (codes unchanged; see the migration guide).
  • createRoom(displayName:) is participantName: and optional. participantId, maxResolution, multiStream, mode, metaData, signalingBaseUrl and preferredProtocol are nullable with no Dart default: left out, the native SDK applies its default. customCameraVideoTrack / customMicrophoneAudioTrack are customCameraTrack / customMicrophoneTrack.
  • Types: Stream → RTCStream (kind is MediaType), CustomTrack → CustomStreamTrack (dispose() → stop()), CustomVideoTrackConfig / CustomAudioTrackConfig → CustomCameraTrackConfig / CustomMicrophoneTrackConfig, VideoDeviceInfo / AudioDeviceInfo → CameraDeviceInfo / MicrophoneDeviceInfo, VideoSdkError → VideoSDKError.
  • VideoSDK: getCameras(), getMics(), getLogLevel(), getKeyProvider(), getSelectedVideoDevice(), getSelectedAudioDevice(); runPreCallTest() returns Future<PreCallTestResult>.
  • Room: changeCam({deviceId, customCameraTrack}), changeMic({deviceId, customMicrophoneTrack}), setAudioDevice(), startHLS()/stopHLS(), isMicEnabled/isCamEnabled, getActiveSpeakerId()/getActivePresenterId(), liveStreamState, hlsUrl, transcription: and config: argument names, typed RecordingConfig, HLSConfig, LivestreamConfig, LivestreamOutput, setWebcamQuality(VideoQuality), requestMediaRelay(destinationRoomId).
  • Room releases itself after Events.roomLeft or a failed join, and when a later createRoom replaces it; dispose() is removed. createRoom creates the native room, so setVideoProcessor() and video effects apply before join. A Room dropped mid-join must await join() and then leave().
  • Android: the native VideoSDK.getInstance().setVideoProcessor() applies to the room Dart created and throws IllegalStateException before createRoom.
  • Participant: enableMic()/disableMic(), videoQuality, setQuality(VideoQuality), isAgent(); AgentParticipant.getAgentId(), getAgentState().
  • PubSub: subscribe(topic, PubSubMessageListener, [PubSubSubscribeOptions]) returns nothing (history arrives on onOldMessagesReceived); PubSubMessage.timestamp is the server's String. Each listener is its own subscription with its own options and history; the same listener twice on a topic throws 3073. Realtime store: observe(key, listener) / stopObserving(key, listener).
  • Events: livestreamStarted/Stopped, onLivestreamStateChanged, dataReceived (DataMessage.senderId/text/data/reliable), participantLeft delivers the Participant, hlsStateChanged(state, hlsUrl), transcriptionStateChanged(TranscriptionState), translationLanguageChanged(participantId, language), error(VideoSDKError), qualityLimitation adds timestamp (values are upper case), onE2EEStateChanged carries streamId.
  • Enum values are upper case: RoomState, LogLevel, LeaveReason, AgentState, CaptureFlash, FacingMode, MaxResolution, VideoQuality, MediaType, Permissions, ConfigMode, ConfigQuality, ConfigOrientation, CustomMicrophoneTrackConfig; E2EEState.EncryptionSuccess/DecryptionSuccess.
  • Events.streamStateChanged delivers a StreamState; participantModeChanged, pinStateChanged and the room's onE2EEStateChanged carry Mode, ParticipantPinState and E2EEState; setScreenShareQuality takes VideoQuality; CustomStreamTrack.ended is isEnded and videoEncoderConfig is encoderConfig; Layout is ConfigLayout, as on the other SDKs.
  • SDK messages (errors, leave reasons, refusals) say "room" instead of "meeting". Codes and constant names are unchanged.
  • Android also ships armeabi-v7a; switchTo back to the original room works; a livestream gets 30 s to confirm its start; the camera encoder restarts after a reconnect rebuilds the track; pre-call uplink loss never reads past 100%.
  • Events.e2eeStateChanged is Events.onE2EEStateChanged and Events.livestreamStateChanged is Events.onLivestreamStateChanged; payloads are unchanged. The other events keep their names.
  • Typed values replace strings: pauseAllStreams/resumeAllStreams(kind:), requestMediaRelay(kinds:) and the pausedAllStreams/resumedAllStreams events use StreamKind (AUDIO, VIDEO, SHARE); mediaRelayRequestResponse delivers a RelayDecision; TranslationText.type is a TranslationType (PARTIAL / FULL); the external-call events deliver a CallType; LivestreamConfig.recording is a LivestreamRecordingConfig(enabled:).
  • VideoSDK.setScreenFlash(bool): true installs the built-in white overlay, false clears it, as on React Native.
  • Video-effects values read as on Android and iOS: VideoEffectsConfig.Pipeline.GRAPH, VideoEffectsConfig.StylePreset.VIVID, VideoEffectsConfig.Lut.WARM. The VideoEffectsPipeline, VideoEffectsStylePreset and VideoEffectsLut types are unchanged.
  • Event docs name callback parameters as the other SDKs do: roomState, presenterId, and state for recording and livestream.

Added #

  • VideoSDK.setParticipantKey(), Room.respondEntry(), isScreenSharing, roomState, setAudioDeviceChangeListener(), setVideoProcessor() / removeVideoProcessor(), removeAllEventListeners() on Room and Participant, RTCStream.participantId / off(), CustomStreamTrack.onEnded (called once, with null for stop(); set after the track ended, it is called at once), NoiseConfig, EncodingLayer, VideoQuality, TranscriptionConfig.modelConfig, LeaveReason.DUPLICATE_PARTICIPANT, Events.externalCallRinging/Answered/Rejected/Hangup.
  • BaseKeyProvider.removeKey(participantId), VideoSDK.removeKeyProvider().
  • StreamKind, RelayDecision, TranslationType, CallType, LivestreamRecordingConfig.
  • StreamState, the VideoSDKError.* catalogue constants (errors are equal by code), MediaType.SHARE_AUDIO, CameraDeviceInfo.facingMode, Room.transcriptionState / translationState.
  • RTCVideoRenderer.setMirror(bool), alongside RTCVideoView(mirror:).

Removed #

  • Character, CharacterConfig, CharacterMode, CharacterState, CharacterMessage, Room.createCharacter(), Room.characters, and the Events.characterJoined, characterLeft, characterMessage and characterStateChanged events.
  • Mode.CONFERENCE/VIEWER, Events.hlsStarted/hlsStopped/deviceChanged, VideoSDK.on/off, VideoSDK.applyVideoProcessor(), BaseKeyProvider.setKey(), PreCallTest, PubSubMessages, Room.refreshConnection(), getAvailableVideoCodecs(), getActiveVideoCodec(), getAppliedAudioConfig(), enableRelayMedia()/disableRelayMedia(), hlsDownstreamUrl, hlsUrls.
  • createRoom(notification:) and NotificationInfo: the value never reached the screen-share notification.
  • startLivestream(transcription:): no native SDK took it.
  • ScreenFlash (use setScreenFlash(bool)), PreCallOptimizationMode and PreCallVideoConfig(optimizationMode:): no SDK uses the content hint.
  • BaseKeyProvider(discardFrameWhenCryptorNotReady:): it had no effect, and Android has no such option.
  • The VideoSDKErrors map, and undocumented leftovers listed in the migration guide.

Documentation #

  • stopConsumingMicStreams() and stopConsumingWebcamStreams() take effect only in a room created with autoConsume: false.
  • A shared encryption key set with setSharedKey() is read when the room joins; changing it during a call applies on the next join.
  • On Android, withAudio in createScreenShareVideoTrack() mixes the shared sound into the microphone, so getShareAudioStats() has nothing to report.

Bug fixes #

  • Calling room.join() a second time on a room that was already joined broke the call: participant.remove() then failed with error 4000, PubSub stopped on iOS, and end() reported no reason. The second call now throws 3054 (or 3055 while the first is still joining) and the call keeps working.
  • participant.mode never changed after room.changeMode(), neither for you nor for the other participants. It now updates.
  • A topic's saved messages never reached the subscriber. They now arrive on PubSubMessageListener.onOldMessagesReceived.
  • On Android, localParticipant.metaData was null even when you passed metaData to createRoom(). It now holds what you passed.
  • On iOS, the iPhone microphone was listed as an output (audiooutput). It is now an input (audioinput).
  • RTCVideoRenderer never reported the video size: videoWidth, videoHeight and onResize stayed at zero while the video played. They now report the real size.
  • An event handler that threw stopped the handlers registered after it from running. They now all run.
  • participantLeft is delivered once per departure, as on the other SDKs.
  • room.localParticipant exists from createRoom instead of throwing until join.
  • VideoSDK.getSelectedVideoDevice() / getSelectedAudioDevice() report the devices in use from join, not null until the first switch.
  • Screen-share audio is reported as MediaType.SHARE_AUDIO, not as a second audio stream.
  • room.realtimeStore.observe() now delivers changes: the native SDKs subscribe the key on the server.
  • CustomStreamTrack.isEnded turns true when the track ends with no onEnded handler.
  • TranscriptionText.participantId is filled on iOS.
  • iOS: checkBluetoothPermission() and requestBluetoothPermission() return true (iOS needs no permission for Bluetooth audio) instead of false.
  • iOS: getSelectedVideoDevice() follows every changeCam, not the first camera.

5.0.0-beta.7 #

Release Date: 2nd October 2026

Beta release: This version is intended for testing before the stable 5.0.0 release. Pin the prerelease explicitly when adding it to your application.

dependencies:
  videosdk: 5.0.0-beta.7

Breaking: createCameraVideoTrack(), createMicrophoneAudioTrack() and createScreenShareVideoTrack() now declare their return type, Future<CustomTrack?>, instead of dynamic. Code that assigns the result to a non-nullable CustomTrack must handle null — returned, for example, when the user declines screen capture.

Breaking: maxResolution in VideoSDK.createRoom() now takes a MaxResolution enum instead of a String: use MaxResolution.hd or MaxResolution.sd. The default is now hd.

Breaking: defaultCameraIndex is removed from VideoSDK.createRoom(). Use defaultCamera: FacingMode.front or FacingMode.back instead.

Breaking: debugMode is removed from VideoSDK.createRoom(). On Android it replaced the log level you had set when the meeting joined. Use VideoSDK.setLogLevel() to choose how much the SDK logs.

Behaviour change: autoConsume: false now takes effect. If your app passes it, remote audio and video no longer arrive until you call consumeMicStreams() / consumeWebcamStreams() on the participant.

Choose the meeting's resolution and starting camera #

final room = VideoSDK.createRoom(
  roomId: roomId,
  token: token,
  displayName: "Alex",
  maxResolution: MaxResolution.sd,   // default: MaxResolution.hd
  defaultCamera: FacingMode.back,    // default: FacingMode.front
  autoConsume: false,                // default: true
);
  • MaxResolution.sd opens the camera at 960x540 instead of 1280x720, and setQuality() asks for one step lower quality from each participant.
  • defaultCamera picks which camera the meeting opens on. After room.changeCam(), the camera you switched to stays in use.
  • A customCameraVideoTrack you pass to createRoom() keeps its own resolution and camera; these options only apply to the camera the SDK opens for you.

Removed #

  • package:videosdk/videosdk_rtc.dart and its Rtc* types — the 4.0.0-beta.1 prerelease entry point, deprecated since 5.0.0-beta.1. It never shipped in a stable release, so applications on 4.0.1 are unaffected. Use package:videosdk/videosdk.dart.
  • UserMessage and Events.userMessage. The event never fired.

Documentation #

  • Every event lists exactly what its handler receives, and VideoSdkError lists the common error codes.
  • Translation (TranslationText, TranslationState and their events) is now documented.

Bug fixes #

  • maxResolution, defaultCameraIndex and autoConsume passed to VideoSDK.createRoom() were ignored. The meeting always joined at the SDK's default resolution, on the front camera, receiving everyone's audio and video. They now take effect.
  • iOS: when you didn't pass a customCameraVideoTrack, the camera joined at 640x480. It now joins at 1280x720 (960x540 with MaxResolution.sd), the same as Android.
  • Events.mediaRelayRequestReceived now fires on Android and iOS, so the destination meeting can accept or reject an incoming media relay request.
  • iOS: after a failed or denied switchTo(), every participant join and every participant event (stream on/off and the rest) was held for the rest of the meeting. They are now delivered again.
  • participant.on now fires stream events (streamEnabled, streamDisabled) for that participant.

5.0.0-beta.6 #

Release Date: 25th September 2026

Beta release: This version is intended for testing before the stable 5.0.0 release. Pin the prerelease explicitly when adding it to your application.

dependencies:
  videosdk: 5.0.0-beta.6

Breaking: FacingMode now uses the same names as the Android and iOS SDKs: FacingMode.user is now FacingMode.front, and FacingMode.environment is now FacingMode.back. Update any code that passes a facingMode to createCameraVideoTrack() or PreCallVideoConfig.

Breaking: enableScreenShare() no longer takes enableAudio or source; set them on a track from createScreenShareVideoTrack() instead. CustomTrack.toMap() is removed, and CustomScreenShareTrackConfig has three new values. On iOS, use the socket-based broadcast extension from VideoSDK's screen-share sample; the old ScreenShareRing.swift one sends no video.

Screen share quality #

final track = await VideoSDK.createScreenShareVideoTrack(
  encoderConfig: CustomScreenShareTrackConfig.h1080p_30fps,
  withAudio: true, // Android only
);
if (track != null) await room.enableScreenShare(customTrack: track);
  • New qualities: h480p_15fps, h480p_30fps and h720p_30fps. The default is still h720p_15fps.
  • Android asks for screen-capture permission when you create the track, and returns null if the user declines. On iOS, one enableScreenShare() call opens the broadcast picker.

Capture an image with flash #

captureImage() can now light the scene before it takes the picture. A camera with a torch, usually the back camera, turns its torch on. On the front camera, the screen lights up white instead, once you enable it with VideoSDK.setScreenFlash().

await VideoSDK.setScreenFlash(ScreenFlash.whiteOverlay);

final image = await room.localParticipant.captureImage(flash: CaptureFlash.on);
  • Flash adds about half a second to the capture. The light turns off even if the capture fails.
  • Without setScreenFlash(), a front camera that has no torch captures without flash.
  • Available for the local participant only.
  • If your code extends or implements Participant and overrides captureImage(), add the new parameter to your override: captureImage({int? width, int? height, CaptureFlash flash = CaptureFlash.off}).

Background blur #

setVideoEffects() can now blur the background behind the person on camera.

await VideoSDK.setVideoEffects(VideoEffectsConfig(
  background: VideoEffectsBackground(mode: VideoEffectsBackgroundMode.BLUR),
));
  • blurStrength sets how strong the blur is, from 0.0 to 1.0. The default is 0.5.
  • Blur runs on the default VideoEffectsPipeline.LEGACY.
  • Android: add implementation "com.google.mlkit:segmentation-selfie:16.0.0-beta6" to your app's build.gradle.

Bug fixes #

  • room.realtimeStore.getValue() now returns null for a key that was never set. Before, it threw a TypeError.

5.0.0-beta.5 #

Release Date: 21st September 2026

Beta release: This version is intended for testing before the stable 5.0.0 release. Pin the prerelease explicitly when adding it to your application.

dependencies:
  videosdk: 5.0.0-beta.5

Behaviour change: createCameraVideoTrack() and createMicrophoneAudioTrack() now open the device when you call them. Call dispose() on a track you do not join with, or the camera stays on.

Preview before joining #

The track you create now renders in RTCVideoView before the meeting, and createRoom() publishes that same open camera.

  • cameraId and microphoneId select the device on both platforms. Before, iOS ignored both and Android ignored microphoneId.
  • getVideoDevices() and getAudioDevices() work on Android before a join.
  • iOS: joining with camEnabled: false no longer opens the camera.
  • iOS: maxLayer: 1 now reaches the SDK.

The factories never ask for permission — call requestPermissions() first. Failures throw VideoSdkError: 3017/3018 permission, 3021/3022 no device, 3023/3024 device in use, 3026 camera failed to open, 3071 unknown device id.

Pre-call test #

VideoSDK.runPreCallTest() checks the camera and microphone and scores the network before joining, as the JavaScript SDK does. Android and iOS only.

final test = VideoSDK.runPreCallTest(
  PreCallTestOptions(token: token, videoTrack: cameraTrack),
  onStatsChange: (stats) => print(stats.uplink.quality),
);
final result = await test.result;
  • Run it before createRoom(), and stop it yourself before you do — creating a room refuses a new test but does not stop a running one.
  • Pass your own tracks, or let the test open the devices and hand them back in the result. A track you passed is never stopped.
  • PreCallTest.stop() ends the run; the result still arrives, with aborted: true.
  • Failures throw PreCallTestException, with the same string codes as the other SDKs.

5.0.0-beta.4 #

Release Date: 15th September 2026

Beta release: This version is intended for testing before the stable 5.0.0 release. Pin the prerelease explicitly when adding it to your application.

dependencies:
  videosdk: 5.0.0-beta.4

Breaking: failed calls now throw VideoSdkError instead of PlatformException.

Breaking: Room.end(), Room.stopTranslation(), Stream.pause() and the Participant actions, such as pin(), unpin(), setViewPort(), remove() and setQuality(), now return a Future that throws on failure. Existing calls still compile, but a failure is no longer logged for you: a call such as room.end(); or participant.pin(); that is not awaited now raises an unhandled async error. That is reported as a crash under runZonedGuarded with Crashlytics or Sentry, and fails a flutter test. await these calls inside try/catch, and turn on the unawaited_futures lint to find them.

Android behaviour change: joining in RECV_ONLY or SIGNALLING_ONLY with micEnabled or webcamEnabled set to true now turns them on when you switch to SEND_AND_RECV.

Error codes #

Errors carry the same code and name as the VideoSDK JavaScript, Android and iOS SDKs.

try {
  await room.join();
} on VideoSdkError catch (e) {
  if (e.code == 4002) { /* invalid or expired token */ }
}
Situation Error Code
Joining with an empty room id or token ERROR_INVALID_PARAMETER 3073
Joining with an invalid or expired token INVALID_TOKEN 4002
Calling an action again before it finishes ERROR_OPERATION_IN_PROGRESS 3055
Calling leave() after you have left ERROR_ALREADY_IN_REQUESTED_STATE 3054
Calling any other action after you have left ERROR_ACTION_PERFORMED_BEFORE_MEETING_JOINED 3035
Any other failure UNKNOWN_ERROR 4000

Known limitations #

  • Android: with more than one character in a room, Events.characterLeft and Events.characterStateChanged reach every character, because the Android SDK does not say which character they are about. With one character, and on iOS, they reach only that character.
  • iOS: CharacterConfig.language is not sent to the SDK, which has no such setting. Character.language still returns the value you set.

Android: camera and microphone settings are kept #

Track settings such as encoderConfig, bitrateMode and noiseConfig, and the selected device, now survive turning the camera or microphone off and on, switching devices, changeMode(), switchTo() and reconnecting. Only codec can change: it falls back to VP8 for the rest of the meeting when another participant cannot decode it.

changeCam() and changeMic() #

  • changeCam(null, track) / changeMic(null, track) switch to the track and turn the camera or mic on. A device passed along with a track is ignored.
  • changeCam(device) / changeMic(device) switch device and keep the camera or mic on or off.
  • changeCam() / changeMic() switch to the next device.
  • changeMic(device) before joining (or after leaving) selects the mic for the next join.
  • An unknown device throws 3051 (camera) or 3059 (mic).
  • switchAudioDevice() no longer unmutes the mic on iOS.

Bug fixes #

  • Stream.pause() and Stream.resume() had no effect. They now pause and resume the stream.
  • Android: a camera turned off before switching to RECV_ONLY or SIGNALLING_ONLY came back on after switching to SEND_AND_RECV.
  • Android: noiseConfig on a microphone track was ignored.
  • Android: the camera and microphone could stay off after a network drop.

5.0.0-beta.3 #

Release Date: 14th September 2026

Beta release: This version is intended for testing before the stable 5.0.0 release. Pin the prerelease explicitly when adding it to your application.

dependencies:
  videosdk: 5.0.0-beta.3

Breaking: Events.videoEffectsStats is a new value on the Events enum. A switch over Events without a default case will no longer compile.

Breaking: methods that return a Future — join(), leave(), muteMic(), enableWebcam() and the rest — now complete when the native SDK has finished, and throw a PlatformException when it fails. Before, most completed as soon as the call was sent. end(), stopTranslation() and setViewPort() return void; a failure there is logged.

Video effects #

Framing, low-light, style and filter effects for your outgoing camera video, on Android and iOS. Every other participant sees the result, and so does your own preview.

await room.setVideoEffects(const VideoEffectsConfig(
  framing: VideoEffectsFraming(enabled: true),
  lighting: VideoEffectsLighting(enabled: true),
  filter: VideoEffectsFilter(lut: VideoEffectsLut.WARM),
));
  • VideoEffectsPipeline.LEGACY, the default, runs the effects on the CPU, and framing follows your face automatically.
  • VideoEffectsPipeline.GRAPH runs the effects on the GPU. Framing there follows the subject box you publish with publishFramingSubject().
  • getAppliedVideoEffectsConfig() reports what is actually running, which can differ from what was requested.
  • Events.videoEffectsStats reports effects performance, such as the encoded frame rate.
  • Android: face framing on the CPU engine needs ML Kit in your app. Add implementation "com.google.mlkit:face-detection:16.1.7" to android/app/build.gradle; without it the other effects still run and the result's reason says why framing is off.
  • iOS: a room joined without a customCameraVideoTrack publishes 640x480, because native iOS SDK 4.0.0-beta.6 crops the portrait camera to a landscape band and 1280x720 looks very zoomed. Pass a track from VideoSDK.createCameraVideoTrack(encoderConfig: …) for another size.

5.0.0-beta.2 #

Release Date: 8th September 2026

Beta release: This version is intended for testing before the stable 5.0.0 release. Pin the prerelease explicitly when adding it to your application.

dependencies:
  videosdk: 5.0.0-beta.2

Breaking: Events.dataMessage is a new value on the Events enum. A switch over Events without a default case will no longer compile.

Receiving data messages #

Events.dataMessage is the receive side of room.send(). Text and binary frames arrive on the same event; isBinary says which one you have.

room.on(Events.dataMessage, (DataMessage message) {
  if (message.isBinary) {
    print('${message.bytes?.length} bytes from ${message.from}');
  } else {
    print('${message.from} says ${message.payload}');
  }
});

New on Room #

  • send() — send a String or List<int> to everyone in the room.
  • setWebcamQuality() — cap your own outgoing video quality. Accepts "low", "med", "high" or a layer id like "s1t2". An unrecognised name throws ArgumentError at the call site rather than failing later.
  • setScreenShareQuality() — cap the quality of the screen share you receive from one participant.
  • getAvailableVideoCodecs() and getActiveVideoCodec().
  • getAppliedAudioConfig() and getAppliedVideoConfig() — the audio and video settings actually in use, which can differ from what was requested.
  • getAttributes() and refreshConnection().

New on Participant #

getTransportStats() and getShareAudioStats(), plus setScreenShareQuality().

Seeing SDK logs in flutter run #

flutter run only relays Dart output, so the SDK's own log lines were visible only in logcat or Xcode. VideoSDK.enableLogForwarding() delivers them to a Dart callback instead. These are SDK-wide and start before join().

await VideoSDK.enableLogForwarding((level, message) {
  print('[$level] $message');
});

Bug Fixes #

  • Fixed event ordering on iOS so Events.roomJoined is emitted before remote participant and stream events.
  • Fixed participant.setViewPort() throwing when used for a remote participant.
  • Fixed Events.dataMessage not firing on Android.
  • Normalized Chat and PubSub timestamps across Android and iOS so messages no longer fall back to 1 January 1970 or sort into the wrong position.
  • Made room.send() complete only after the native send operation completes.
  • Restored participant media statistics on both Android and iOS.
  • Added support for layer quality names such as "s1t2" on iOS.
  • Made unpin() pass its requested PinType to the native SDK.
  • Corrected the swapped camera callbacks on Character and restored the callback supplied to AgentParticipant.

5.0.0-beta.1 #

Release Date: 27th August 2026

Beta release: This version is intended for testing before the stable 5.0.0 release. Pin the prerelease explicitly when adding it to your application.

dependencies:
  videosdk: 5.0.0-beta.1

Highlights #

  • Audio and video meetings on Android and iOS.
  • Screen sharing, recording, HLS, and RTMP livestreaming.
  • Real-time transcription and translation.
  • AI agent state, transcription, and metrics events.
  • PubSub messaging, Realtime Store, and whiteboard support.
  • VideoSDK.sdkVersion for displaying the installed SDK version in diagnostics.

Upgrade guidance #

Applications can continue using the main public entry point:

import 'package:videosdk/videosdk.dart';

The standard VideoSDK, Room, Participant, Stream, and Events APIs remain available. When upgrading:

  • Remove any direct videosdk_webrtc dependency and its imports. Video view, renderer, and media-device types are available from videosdk.
  • Replace imports of the deprecated package:videosdk/videosdk_rtc.dart API with package:videosdk/videosdk.dart.
  • Run flutter pub get, then perform a clean rebuild of the application.

Platform support #

This beta supports Android and iOS. Applications targeting Web, macOS, or Windows should remain on the latest compatible 3.12.x release.

Lifecycle #

Room now has a dispose(). Call it when the room is finished with — after leave(), or when the screen that owns it is torn down — so it stops consuming native events. A disposed room cannot be joined again; create a new one instead.

await room.leave();
await room.dispose();

Known limitations #

  • Events.codecChanged reports VideoCodec.VP8 as unsupportedRemoteCodec when the native SDK reports no unsupported codec at all. CodecChangeInfo's fields are non-nullable, so an absent value cannot be told apart from a real VP8 report. Read currentCodec and previousCodec for the switch itself.
  • Events.hlsStarted carries a nullable playback URL — some native SDKs do not report one — and will be deprecated in a future release. Use Events.hlsStateChanged, which carries the downstream, playback and livestream URLs.

4.0.0-beta.1 #

Release Date: 25th August 2026

Change Log :

Beta release. A prerelease is not picked up by flutter pub add videosdk — ask for it explicitly with videosdk: ^4.0.0-beta.1. The API may still change before 4.0.0 final.

What's New:

Calls can now run on the native Android and iOS SDKs #

A new entry point, package:videosdk/videosdk_rtc.dart, runs the meeting on VideoSDK's native Android and iOS SDKs. Use VideoSDKRtc to join, and the RtcRoom it returns to drive the meeting:

await VideoSDKRtc.initialize();
await VideoSDKRtc.config(token);

final room = await VideoSDKRtc.join(
  meetingId: 'abcd-efgh-ijkl',
  name: 'Alice',
  speakingLanguage: 'en',
  translationLanguage: 'hi',
);

room.events.listen((e) => print(e.name));

Render a participant with RtcVideoView(participantId: id), or their screen share with RtcVideoView(participantId: id, kind: 'share').

This entry point is Android and iOS only. package:videosdk/videosdk.dart is unchanged and still supports Web, macOS and Windows.

Breaking: videosdk_webrtc is no longer a dependency. Remove any direct import of it.

Real-time translation #

Participants can speak one language and read another. Set the pair on join() with speakingLanguage and translationLanguage, then start it:

await room.startTranslation();
await room.changeTranslationLanguage('hi');

Translated speech arrives on room.events as onTranslationText, with a type of partial while the speaker is still talking and full once the sentence settles.

Screen share #

enableScreenShare() and disableScreenShare(). A share arrives as a separate share stream on the participant who started it, so it gets its own tile instead of replacing their camera — check participant.screenShareOn.

On Android the system asks the user to confirm the capture. On iOS, add a Broadcast Upload Extension to your app and point RTCScreenSharingExtension in Info.plist at it — without it, enableScreenShare() fails with NO_EXTENSION. On iOS it also returns as soon as the share sheet opens, so it cannot report that the user cancelled.

3.12.1 #

Release Date: 20th August 2026

Change Log :

Bug Fixes:

  • Android builds no longer need any manual setup. Building an app for Android could fail in Gradle with a compileSdkVersion error, Android builds now work directly after flutter pub get, on developer machines and CI alike.

  • Prepared the Android build for Android Gradle Plugin 9. The SDK now applies the Kotlin Gradle plugin only when AGP is not compiling Kotlin itself, so it keeps building on both current and upcoming AGP versions. No change is needed in your app.

The SDK's own Android sources now compile against Java 17. Your app's compileOptions are unaffected — apps building at Java 11 or Java 8 continue to work unchanged.

3.12.0 #

Release Date: 18th August 2026

Change Log :

Meeting actions now report an error instead of doing nothing #

Calling a meeting action before the meeting is joined, or while it is reconnecting, is now rejected and reported through Events.error. This covers Room, Participant, Stream, PubSub, RealtimeStore and Character.

  • Before the meeting is joined, and after it is left or ended: ERROR_ACTION_PERFORMED_BEFORE_MEETING_JOINED (3022)
  • While reconnecting: ERROR_MEETING_RECONNECTING (3027)
  • leave() is never blocked — it works while the meeting is still connecting and while it is reconnecting, so you can always get out. end() works while connecting, but not while reconnecting, because closing the meeting for everyone needs a working connection.

New RoomState.failed #

Delivered through Events.roomStateChanged when a join could not be set up at all — a rejected token, or meeting settings that could not be fetched. Unlike reconnecting, nothing retries it; call join() again to start a fresh attempt.

Breaking: if you switch over RoomState without a default branch, add case RoomState.failed: when upgrading.

Fixes #

  • leave() no longer hangs when the connection drops. Calling leave() while the meeting was reconnecting never finished — the camera and microphone stayed on and Events.roomLeft never fired, so the app was stuck on the meeting screen. Leaving now completes immediately, whatever the connection is doing.

  • Actions called before join no longer crash. participant.pin(), unpin() and the realtimeStore methods report the error instead of throwing.

3.11.0 #

Release Date: 11th August 2026

Change Log :

Your camera & microphone settings now stay applied for the whole meeting #

Earlier, the settings you chose while creating a camera or microphone track were applied only the first time. Whenever the SDK needed to recreate the track, it went back to its own defaults (720p video, speech_standard audio, front camera, no noise settings). So a participant who joined at 1080p could end up sending 720p video after simply turning the camera off and on again.

Your chosen settings are now remembered and re-applied every time. This covers:

  • Camera: selected camera, encoderConfig (resolution/quality), multiStream, bitrateMode, maxLayer and facingMode.
  • Microphone: selected microphone, encoderConfig (audio quality) and noiseConfig.

codec is the one exception — it follows what the meeting can actually carry. If a participant joins who cannot decode your selected codec, the camera falls back to VP8 and stays there for the rest of the meeting, even if that participant leaves.

Settings are preserved across all of these:

  • disableCam() → enableCam() and muteMic() → unmuteMic()
  • changeCam() / changeMic() when switching to another device
  • Automatic reconnection after a network drop
  • Automatic recovery when a camera or microphone stops (device unplugged, or taken over by another app)
  • changeMode() between SEND_AND_RECV, RECV_ONLY

If you pass a new CustomTrack to enableCam(), unmuteMic(), changeCam() or changeMic(), that track's settings become the remembered settings from that point on.

Fixes #

  • A new track no longer changes the quality of a track that is already being sent. The selected bitrateMode was shared across tracks, so creating a second track with a different mode changed the quality of the video already going out. Each track now uses only the mode you set for it.

  • Your multiStream choice is no longer lost. If the video codec in use could not send multiple quality layers, multiStream stayed switched off for the rest of the meeting. Your choice is now remembered and applied again automatically once the codec allows it.

  • Unmuting works even if the microphone was released earlier. If something else had taken the microphone away — another app, or the participant changing mode — unmuting could fail to bring it back. The SDK now creates a fresh microphone with your saved settings.

  • The same codec warning is no longer repeated. The warning about multiple quality layers not being supported by the selected codec was raised again on every camera on/off. It is now raised only when you supply a track yourself.

  • The camera and microphone no longer switch off on their own. When the SDK replaces the camera or mic stream (codec change, device switch, reconnect), the old stream sends a "stopped" notice. That notice was treated as "the user's camera stopped", so the camera turned off right after turning on. Each notice is now matched to the stream it belongs to.

  • The camera no longer restarts twice. The SDK turns the camera off and on again automatically when it must re-send video in a different codec. If two participants who need that change joined at nearly the same moment, this ran twice — other participants saw the video freeze for about twice as long. Only one restart now runs at a time.

  • Running more than one meeting in the same app shows the correct camera/mic state. Camera and mic on/off state was shared between meetings, so one meeting could report the other's state. Each meeting now keeps its own — this also fixes wrong state when leaving and rejoining quickly.

  • A muted microphone or camera works again after a mode change. If the mic (or camera) was off when changeMode() was called, the SDK released it but still held on to the released one and tried to reuse it. Unmuting afterwards showed the mic as ON while no one could hear the participant. A fresh microphone/camera is now always created.

  • Invalid maxLayer values are handled safely. Values outside 1–3 are adjusted to the nearest valid value instead of producing a broken video configuration.

3.10.1 #

Release Date: 24th July 2026

Change Log :

  • Removed the third-party dependency to resolve limitation of flutter sdk version.

3.10.0 #

Release Date: 7th July 2026

Change Log :

  • Added support for selectable video codecs in createCameraVideoTrack(). The codec option supports VP8, VP9, AV1, and H264 through VideoCodec.

3.9.1 #

Release Date: 12th May 2026

  • Resolved an internal bug.

3.9.0 #

Release Date: 13th April 2026

Change Log :

  • Added Events.agentMetrics event on AgentParticipant for receiving real-time agent metrics data.
  • Improved room joining time.
  • Improved performance by offloading heavy processing to background threads.

3.8.0 #

Release Date: 18th Mar 2026

Change Log :

  • Introduced AgentParticipant, a dedicated participant type for AI agents within a room.
    • Agents can be identified using the isAgent property when they join.
  • Added AgentState enum (IDLE, LISTENING, THINKING, SPEAKING) to represent the agent lifecycle.
  • Added event listeners for agent updates:
    • Events.agentStateChanged to track state transitions.
    • Events.agentTranscriptionReceived to receive real-time transcription.
  • Updated internal dependencies.

3.7.0 #

Release Date: 20th Feb 2026

Change Log :

  • Introduced the setLogLevel method in VideoSDK, enabling developers to control log verbosity. This improves debugging efficiency during development.

3.6.1 #

Release Date: 9th Feb 2026

Change Log :

  • Updated the official Dart API Reference for the Flutter VideoSDK package.

3.6.0 #

Release Date: 5th Feb 2026

Change Log :

  • Introduced an autoConsume boolean parameter to the createRoom method. Also introduced methods in the Participant class to start and stop consuming participant streams.
  • Updated the official Dart API Reference for the Flutter VideoSDK package.

Bug Fix :

  • Resolved an audio distortion issue (chipmunk effect) occurring with Bluetooth output devices such as AirPods.
  • Fixed a Windows build error affecting Flutter desktop builds.
  • Resolved an issue related to switching external Camera and Microphone devices on the web.
  • Updated Internal Dependencies.
  • Fixed an issue that caused video streams to not render when multiple participants were present in a meeting on macOS.

3.5.1 #

Release Date: 20th Jan 2026

  • Updated internal dependencies.

3.5.0 #

Release Date: 06th Jan 2026

  • Added Realtime Store functionality to store, update, retrieve, and observe custom key-value data in real time during a meeting
  • Fixed an iOS issue with switching audio output devices.

3.4.0 #

Release Date: 31st Dec 2025

  • Updated the default encoderConfig value in createCameraVideoTrack() to h720p_w1280p.

  • Introduces advanced video track optimization features, enabling greater flexibility and control over quality and bandwidth. Below are the new parameters added to createCameraVideoTrack().

    • BitrateMode

      • Added the BitrateMode parameter to manage video quality and bandwidth usage easily.
      • Developers can now select from three modes based on their requirements:
        • bandwidth_optimized
        • balanced (default)
        • high_quality
    • maxLayer

      • Introduced the maxLayer parameter to allow developers to specify the maximum number of simulcast layers published for a video track.
  • Added a quality-limitation Event on the Roomclass, enabling detection and handling of quality constraints caused by bandwidth limitations, network congestion, or CPU pressure.

  • Introduced a stream-state Event on the Stream class to track video and screen-share stream lifecycle states, including active, stuck, freeze-detected, and ended.

3.3.0 #

Release Date: 12th Dec 2025

  • Introduced Adaptive Subscription Manager feature, allowing dynamic management of participant subscriptions based on network conditions and application requirements.

3.2.0 #

Release Date : 6th Nov 2025

Change Log :

  • Introduced two new methods — pause() and resume() — enabling developers to pause and resume active streams.
  • Added a new LeaveReason enum to show specific reasonin roomLeft and participantLeft event.

Bug Fix :

  • Resolved an issue where acknowledgment events were not properly handled in the Pin-State system.
  • Fixed a bug causing random resolutions to be used after setting a custom track, ensuring consistent video quality as defined by the user.

3.1.0 #

Release Date : 17th Oct 2025

Change Log :

  • On the web, the microphone will now be muted when the input audio device is disconnected. Users will need to unmute it to continue.

Bug Fix :

  • Fixed issues in Multistream.

3.0.0 #

Release Date : 19th Sept 2025

Change Log :

  • Updated internal dependencies.
  • Enabled system audio sharing while screen sharing on Android.
  • Added Reason map on participantleft event
  • Enabled background camera access on iOS for Picture-in-Picture (PiP) mode.

Bug Fix :

  • Fixed issues with room stats on Android, iOS, and macOS.

2.3.1 #

Release Date : 4th July 2025

Change Log :

  • Enhanced the E2EE feature by introducing participant-wise encryption.

2.3.0 #

Release Date : 30th May 2025

Change Log :

  • Added captureImage method in the Participant class to capture the image of the user from MediaStream.
  • Added methods uploadBase64File and fetchBase64File in Room class to upload and download a temporary file.

2.2.0 #

Release Date : 16th May 2025

Change Log :

  • Introduced two new features to enhance the Interactive Livestream (ILS) experience:
  1. Fast Channel Switching – New Fast Channel Switching feature enables instant transitions between live streams with minimal latency.
  2. Media Relay Support – Introducing Relay Media, enabling hosts to share their media (audio, video, screen) with other live streams. Perfect for creating engaging "PK battles" and collaborative broadcasts.

2.1.2 #

Release Date : 29th April 2025

Bug Fix :

  • Fixed an issue where multiStream wasn’t working properly, making multiple streams work as expected.

2.1.1 #

Release Date : 17th April 2025

Bug Fix :

  • Fixed End-to-End Encryption (E2EE) for web.

Change Log :

  • Added pauseAllStreams() and resumeAllStreams() method to pause/resume all remote participant's media streams (audio, video, and screen share) or a specific stream type if provided.

2.1.0 #

Release Date : 11th April 2025

Change Log :

  • Introduced End-to-End Encryption (E2EE) support to ensure secure media transmission, where media streams are fully encrypted between participants without any server-side access.

2.0.0 #

Release Date : 1st April 2025

Change Log :

  1. Enhanced Room/Meeting Connection Flow:
  • A RECONNECTING state has been introduced that activates if the network connection is lost during a meeting. The SDK will automatically try to rejoin, enhancing reliability.
  • The FAILED, CLOSING, and CLOSED states have been eliminated. All disconnection scenarios will now be managed by the DISCONNECTED state for a more streamlined experience.

1.3.2+1 #

Release Date : 31st March 2025

Change Log :

  1. Updated internal dependencies.

1.3.1 #

Release Date : 25th February 2025

Change Log :

  1. Updated internal dependencies.

1.3.0 #

Release Date : 22nd January 2025

Change Log :

  1. Deprecated Modes: Replaced CONFERENCE with SEND_AND_RECV and VIEWER with SIGNALLING_ONLY.
  2. New Mode: Added RECV_ONLY for live streaming, allowing participants to receive media without sending it.
  3. Role Switching: Enabled seamless role switching between SEND_AND_RECV (host) and RECV_ONLY (audience) using changeMode() method.

1.2.5 #

Release Date : 18th December 2024

Bug Fix:

  1. Fixed issues related to Flutter version 3.27.

Change Log :

  1. Updated internal dependencies.

1.2.4 #

Release Date : 17th December 2024

Change Log :

  1. Added roomStateChanged Event.

1.2.3 #

Release Date : 24th October 2024

Change Log :

  1. Dependencies updated to latest version.

  2. Provided event onUserMessage in Character class.

1.2.2 #

Release Date : 23rd September 2024

Change Log :

  1. Provided methods and events for Whiteboard Management.

1.2.1 #

Release Date : 13th August 2024

Change Log :

  1. Added support for CharacterSDK.

1.2.0+1 #

Release Date : 8th August 2024

Change Log :

  1. Removed support for facingMode in desktop based applications.

  2. Changed value of facingMode enum from front to user.

1.2.0 #

Release Date : 7th August 2024

Change Log :

  1. Removed methods getMics, getCameras and getAudioOutputDevices of the Room class.

  2. Changed return type of createMicrophoneAudioTrack() and createCameraVideoTrack() methods from CustomTrack to CustomTrack?.

  3. Changed parameter type of changeMic(), changeCam() and switchAudioDevice() methods.

  4. Improved error handling and emitting more precise errors on the event.

  5. Changed type of post transcription config parameter in startRecording(), startHls() and startLivesStream() methods.

  6. Changed type of transcription config parameter in startTranscription() method.

  7. Provided debugMode parameter in createRoom() method for enabling users to view detailed error logs directly on the VideoSDK's dashboard and changed parameter type of facingMode.

1.1.13 #

Release Date : 17th July 2024

Change Log :

  1. Added support for Custom Video Processors in iOS and Android.

1.1.12 #

Release Date : 31st May 2024

Change Log :

  1. Provided getter for selected Audio Output Device as selectedSpeakerId.

  2. Provided Built-In Receiver(Earpiece) support for iOS Devices.

  3. Provided transcription parameter in startLivestream() method of the Room class.

Bug Fix :

  1. Fixed bugs in getters of selected Audio Input(selectedMicId) and Video (selectedCamId) Devices.

  2. Triggered the streamdisabled event of the participant object when a participant leaves the meeting.

  3. Fixed an issue where users were unable to join meetings without media permissions.

  4. Disposed media tracks for the Firefox browser in getVideoDevices() and getAudioDevices() methods.

1.1.11+1 #

Release Date : 21th May 2024

Bug Fix :

  1. Changed the default value of preferredProtocol

1.1.11 #

Release Date : 20th May 2024

Change Log :

  1. Provide Pre-Call Screen's features.
  2. Provide signalingBaseUrl parameter in createRoom() method of VideoSDK class to enable the usage of a proxy server with the VideoSDK.
  3. Provide preferredProtocol parameter in createRoom() method of VideoSDK class to select protocol for media transportion.

Bug Fix :

  1. Fixed an issue related to switch audio device for Web.
  2. Fixed an issue related to micEnabled and camEnabled getters.

1.1.10 #

Release Date : 6th May 2024

Change Log :

  1. Added support for post and realtime transcription feature

Bug Fix :

  1. Fixed an issue related to video and screenShare for firefox browser

1.1.9 #

Release Date : 25th Apr 2024

Bug Fix :

  1. Fixed voice coming from earpiece issue for iOS.
  2. Fixed not able to start screenShare issue for android 14

Change Log :

  1. Upgraded internal dependencies

1.1.8 #

Release Date : 5th Apr 2024

Bug Fix :

  1. Fixed Rendering issue with Windows Platform.

1.1.7 #

Release Date : 27th Oct 2023

Change Log :

  1. Added metaData property associated with Participant to pass additional information.
  2. Added payload feature in PubSub to pass additional payload data.
  3. Added sendOnly feature to PubSub to Publish data for only Participants mentioned.

1.1.6 #

Release Date : 18th Sep 2023

Bug Fix :

  1. Fixed issues with mediaConstraints on the arm64-v8a and x86_64 architectures.[below Android version 10]

1.1.5 #

Release Date : 8th Aug 2023

Change Log :

  1. Internal improvements

Bug Fix :

  1. Fixed issues related to audio while toggling

1.1.4+1 #

Release Date : 27th July 2023

Bug Fix :

  1. Fixed audio issue with some devices

1.1.4 #

Release Date : 17th July 2023

Change Log :

  1. Upgraded internal dependencies

Bug Fix :

  1. Fixed mic state issue
  2. Fixed crash issue for below Android 10
  3. Fixed issue with screen share foreground service

1.1.3 #

Release Date : 2nd June 2023

Bug Fix :

  1. Fixed VideoSDK Stats issues with latest chrome browser

1.1.2 #

Release Date : 19th May 2023

Change Log :

  1. Added screenShare feature support for flutter Windows
  2. Added getScreenShareSources() method for Desktop Apps

1.1.1 #

Release Date : 17th May 2023

Change Log :

  1. Added screenShare feature support for flutter web & macOS
  2. Added error code for screenShare permission denied error

Bug Fix :

  1. Fixed onPresenterChanged event on presenter-left

1.1.0 #

Release Date : 25th Apr 2023

Change Log :

  1. Added Beta support for Mac and Windows Platforms
  2. Added Beta support for Flutter Web Platform

1.0.13+1 #

Release Date : 14th Apr 2023

Bug Fix :

  1. Improved Audio Quality
  2. Improved SDK Performance

1.0.13 #

Release Date : 1st Apr 2023

Change Log :

  1. HLS_PLAYABLE state added in the hlsStateChanged.
  2. hlsUrls getter added in the Room.

1.0.12 #

Release Date : 24rd Mar 2023

Change Log :

  1. pin() added to pin a participant.
  2. unpin() added to unpin a participant.
  3. changeMode() allows the participant to switch mode between CONFERENCE and VIEWER.

1.0.11 #

Release Date : 03rd Mar 2023

Bug Fix :

  1. Fixed room not closing if leave() called before meeting is joined.
  2. Internal dependencies updated.

1.0.10 #

Release Date : 03rd Jan 2023

Change log :

  1. Added getVideoStats(), getAudioStats() and getShareStats() to get the statistics for the video, audio and share stream of a participant.

1.0.9 #

  • Added support for custom audio and video tracks.
  • Added events for recording, live streaming and HLS status.
  • Added event for participant notifying the change in video quality.
  • Added startHls() and stopHls() methods.
  • Updated startRecording() and startLiveStream() to accept config values for the feed.
  • Fixed unable to start video or mic after turning them off.

1.0.8 #

  • Added new flag multiStream for createRoom()

1.0.7 #

  • Updated Gradle Version for Android

1.0.6 #

  • Added ErrorEvents for Room.

  • Fixed crash on end(), when the room is not joined yet.

1.0.5 #

  • Added support for iOS ScreenSharing.

1.0.4 #

  • Added support for changing audio device.

  • Fixed issue: PrintDevLog issue

1.0.3 #

  • Fixed issue: VideoRenderer.onFirstFrameRendered implementation.

1.0.2 #

  • Fixed issue on room ends.
  • Provides reason on room left.

1.0.1 #

  • Fixed change webcam issue

1.0.0 #

  • Renamed Meeting class to Room class.

  • Changed import file package:videosdk/rtc.dart to package:videosdk/videosdk.dart

  • Changed events:

    • Events.meetingJoined to Events.roomJoined
    • Events.meetingLeft to Events.roomLeft
    • Events.webcamRequested to Events.cameraRequested Changed properties and methods for Room class
    • selectedWebcamId to selectedCamId
    • enableWebcam() to enableCam()
    • disableWebcam() to disableCam()
    • changeWebcam() to changeCam()
    • getWebcams() to getCameras() Changed methods for Participant class
    • enableMic() to unmuteMic()
    • disableMic() to muteMic()
    • enableWebcam() to enableCam()
    • disableWebcam() to disableCam()
  • Added VideoSDK.createRoom() to create VideoSDK Rooms. Use join() to join VideoSDK Room.

  • Added defaultCameraIndex option to select default camera for Room Class.

  • Added micEnabled property for Room Class.

  • Added camEnabled property for Room Class.

  • Added end() method for Room Class.

  • Removed MeetingBuilder Widget.

  • Fixed the issue of joining room (meeting) multiple time.

  • Fixed issues related to resource consumption.

0.0.14 #

  • setViewport() added for participant webcam streams

0.0.13 #

  • Added support for region wise baseUrls
  • Added support for Android 12
  • Added support for custom ice-servers
  • Performance improvements

0.0.12 #

  • iOS mic issue resolved
  • entry request event handled

0.0.11 #

  • Handle Entry Request

0.0.10 #

  • PubSub Message
  • custom participnatId

0.0.9 #

  • Android Screen Share
  • Events Enums

0.0.8 #

  • Added fix for Mic / Webcam enable request

0.0.7 #

  • Participant can pause or resume all video, audio and shareshare streams.
  • Participant can set quality of video stream of other participant.

0.0.6 #

  • Participant can request to turn on any participants' webcam or mic and can turn off the same
  • Participant can remove another participant from meeting.

0.0.5 #

  • livestream, recording, change webcam, active speaker and presenter indication, remote share streams and example code improved

0.0.4 #

  • example app, pub description added.

0.0.3 #

  • Installation steps added for android in README file.

0.0.2 #

  • Exporting Meeting, Participant, Stream classes and MeetingBuilder widget.

0.0.1 #

  • videosdk rtc meeting library initial release.
140
likes
160
points
2.57k
downloads

Documentation

Documentation
API reference

Publisher

verified publishervideosdk.live

Weekly Downloads

Video SDK Flutter to simply integrate Audio & Video Calling API or Live Video Streaming API to your app with just a few lines of code.

Homepage

License

BSD-3-Clause (license)

Dependencies

collection, flutter, flutter_web_plugins, image, permission_handler, plugin_platform_interface, synchronized

More

Packages that depend on videosdk

Packages that implement videosdk