Change Log
Version 1.8.0
Added
Flash toggle
- Toggle flash on and off based on bool value.
- iOS limits use of the flash when the front camera is active. Flash is available only when the back camera (or no camera) is active.
Custom frame: Implemented mirrorSelfVideo
API
- Added new property for AVDeviceManager -> currentCameraDevice
- New property currentCameraDevice which will only update when a camera device is selected. This gives us the ability to select a camera device even if the video source is set to custom Use case. End user sets video source to custom which updates the currentVideoDevice to custom. The user can still swap to the front or back camera while the custom video source is selected which updates the currentCameraDevice. Once the user sets the video source back to camera we will select the last selected currentCameraDevice.
Added new property for VideoResolutionManagerProtocol for flash toggle
- VideoResolutionManagerProtocol.flashLightEnabled
- VideoResolutionManagerProtocol.updateFlashLightEnabled(_ enabled: Bool)
CustomVideoServiceProtocol Additions
- customVideoService.pushCustomVideoFrame
- customVideoService.setVideoSource
- customVideoService.videoSource
Refectored
- SDK log upload screen been converted to swiftUI.
Version 1.7.0
API
- No API changes
Minimum version updates
- Minumum Xcode version: 14.1
- Minumum Swift version: 5.7.0
- Minimum iOS version: 14.0
Fixed
- Miscellaneous quality improvements
Version 1.6.0
🚨 Breaking Changes
- meetingService.audioMuted type changed from Bool? -> Bool
- meetingService.videoMuted type changed from Bool? -> Bool
- meetingService.audioMuteState type changed from MuteState? -> MuteState
- meetingService.videoMuteState type changed from MuteState? -> MuteState
meetingService.setAudioMuted, and meetingService.setVideoMuted may now be set prior to joining a meeting, or while in the waiting room. Any updates to the localMuted state will retained while the SDK is in memory.
- Added
.custom
case to theVideoLayout
enumeration
This will only ever be set locally and can be ignored if not using custom layout controls.
New License
See the updated LICENSE.txt
Added
Individual Stream Control
- Create custom layouts and request specific streams of video using the
VideoStreamService
- Set the VideoLayout to
.custom
- Request streams of video with the
setVideoStreamConfiguration
- Observe active streams of video with the
videoStreams
array - Render videos in your own custom sized views with
attachParticipantStreamToView
See
See theVideoStreamService
for all additions
ParticipantsService Additions
- participantsService.getParticipantWithId(id: String) -> BJNParticipant?
- BJNParticipant.isActiveSpeaker
- BJNParticipant.profilePictureURL
- BJNParticipant.callQuality
- BJNParticipant.hasVideoConnection
Fixed
- Fixes issue where the content view was not visible in some cases
Version 1.5.0
Added
- meetingService.contentMuted - reflects the enablement of the content stream
- meetingService.remoteAudioMuted - reflects the enablement of remote audio streams
meetingService.remoteVideoMuted - reflects the enablement of remote video streams
audioDeviceService.audioSessionActive - tracks if the AVAudioSession is managed by the SDK. If active, other in-app sounds should be played through the supplied SDK methods. This value can also be observed to know when the SDK audio session is completely cleaned up after leaving a meeting.
BJNObservable.publisher - a Combine framework publisher that publishes the initial value, then a new value on every change of the observable.
Fixed
- Fixes bug where SDK endpoint would appear unmuted when user did not grant camera or microphone permissions. Adds
permissionGranted
property toMuteState
. - Fixes an issue where the screen share content received is pixelated/blurry.
Version 1.4.0
Added
- 720p 16x9 Capture Support (on supported devices)
getSelfView()
andgetContentView()
methods that return a UIView that will automatically maintain the correct aspect ratio for it’s video/content- Color customization of video layouts, allows setting the background colors/gradients of the remote video views ### Deprecated
getSelfViewInstance()
andgetContentReceiveInstance()
deprecated in favour of the abovegetSelfView()
andgetContentView()
methods. Now return a non-optional UIView
Version 1.3.0
Added
- Swift Package Manager Support
- Module Stability
- “Recording has started, has stopped, is on” audio notifications play by default when the meeting is being recorded
- privateChatService.participantsWithChats, the list of participants who have sent or received chat to/from the client during the meeting
Fixed
- Issue with private chat where offline participants unreadMessagesCount could not be cleared fixed.
Version 1.2.0
Breaking Changes
Renamed
- meetingService.participants -> meetingService.participantsService.participants
- BJNParticipant.isAudioMuted -> BJNParticipant.audioMuteState.muted
- BJNParticipant.isVideoMuted -> BJNParticipant.videoMuteState.muted
Behaviour Changed
- In meetingService.joinMeeting(…), the onCompletion closure will be called with JoinResult of
.success
when meetingState moves from.validating
->.waitingRoom
when waiting room is enabled in the meeting. In 1.1.0, this was called when meetingState moved from.waitingRoom
->connecting
.
Added
- meetingService.participantsService
- participantsService.activeSpeaker, the current active speaker, or talking participant in the meeting
- MuteState, a struct which holds information about the overall mute state, and the local and remote (moderator) mute states
- meetingService.audioMuteState: BJNObservable
- meetingService.videoMuteState: BJNObservable
- meetingService.setRemoteAudioMuted(…), stops the audio stream of the meeting
Version 1.1.0
Breaking Changes
Renamed
- MeetingService -> MeetingServiceProtocol
- LoggingService -> LoggingServiceProtocol
- VideoDeviceService -> VideoDeviceServiceProtocol
- AudioDeviceService -> AudioDeviceServiceProtocol
- meetingService.leaveAndEndMeeting(kickoutDelayInSeconds: Int) -> meetingService.moderatorControlsService.endMeetingForAllParticipants(timeInSeconds: Int)]
- BJNMeeting -> MeetingInformation, meetingService.meetingInfo -> meetingService.meetingInformation
Removed
- ConnectionState (Use MeetingState instead)
- maxVideoBandwith removed from meetingService.join(…), can still be set as meetingService.maxVideoBandwith = … before joining.
Feature Additions
- ModeratorControlsService
- Check if the client has moderator privileges
- Start and stop recording
- Mute the audio or video of one, or all participants
- Drop a participant from the meeting
- isModerator flag added to BJNParticipant
- Waiting Room Support
- Join a waiting room enabled meeting
- Added
.waitingRoom
to MeetingState - Events for approval, denial, meeting ended and demotion to waiting room.
- Waiting Room Moderation Support
- View participants in the waiting room
- Enable/disable waiting room
- Check if a meeting supports waiting room
- Admit or deny one or all participants in the WR
- Demote a participant back to the WR
- Closed Caption Support
- Check if the meeting supports Closed Captioning
- Enable/disable closed captioning for the client
- Observe the closed caption text
- Debugging Improvements
- enableAudioCaptureDump(_ enable: Bool)
- Remote Stream Enablement
- Mute the remote video stream
- Mute the remote content stream
- Meeting Information
- Meeting ID added
- Participant passcode added
- Meeting owner username added
- PrivateChatService
- isPrivateChatAvailable flag added - private chat can be disabled in some meetings.
Version 1.0.0
Features:
- Audio and Video Permission handling
- Join, End Meeting
- Self Video
- Remote Video, Remote Video states
- Content receive
- Audio and Video self mute
- Orientation handling
- Toggle front / back camera
- Video Layout switch
- Participant list
- Participant properties: Audio mute state, Video mute state, is Self, Name and Unique Identifier
- Self Participant
- Screen Share
- Log Upload
- Multi-stream support (“Sequin” Video Layouts)
- Public and Private meeting Chat
- Remote Video mute
- Meeting Information (Title, Hostname, Meeting Id)