Skip to content

Commit 775ecb6

Browse files
committed
[STREAM-1168] - Pre-negotiate additional video transceiver for multi-track screenshare.
1 parent dc391da commit 775ecb6

3 files changed

Lines changed: 22 additions & 6 deletions

File tree

changelog.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
44
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
55

66
# [Unreleased](https://github.com/MyPureCloud/genesys-cloud-webrtc-sdk/compare/v11.5.1...HEAD)
7+
### Changed
8+
8 [STREAM-1168](https://inindca.atlassian.net/browse/STREAM-1034) - To support multi-track screenshare + video, added pre-negotiation for an additional `sendonly` video transceiver.
79

810
# [v11.5.1](https://github.com/MyPureCloud/genesys-cloud-webrtc-sdk/compare/v11.5.0...v11.5.1)
911
### Added

src/sessions/video-session-handler.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,13 +529,17 @@ export class VideoSessionHandler extends BaseSessionHandler {
529529
return;
530530
}
531531

532+
// This is the primary video transceiver for the camera
532533
const videoTransceiver = session.pc.getTransceivers().find(transceiver => transceiver.receiver.track && transceiver.receiver.track.kind === 'video');
533534
if (!videoTransceiver) {
534535
session.pc.addTransceiver('video', { direction: 'sendrecv' });
535536
} else {
536537
videoTransceiver.direction = 'sendrecv';
537538
}
538539

540+
// Pre-negotiate a second video transceiver for screen share to avoid renegotiation later
541+
session.pc.addTransceiver('video', { direction: 'sendonly' });
542+
539543
const audioTransceiver = session.pc.getTransceivers().find(transceiver => transceiver.receiver.track && transceiver.receiver.track.kind === 'audio');
540544
if (!audioTransceiver) {
541545
session.pc.addTransceiver('audio', { direction: 'sendrecv' });

test/unit/sessions/video-session-handler.test.ts

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1122,27 +1122,37 @@ describe('setupTransceivers', () => {
11221122
expect(getTransceiversSpy).not.toHaveBeenCalled();
11231123
});
11241124

1125-
it('should do nothing if video and audio transceivers already exist', () => {
1125+
it('should only add screen share transceiver if video and audio transceivers already exist', () => {
11261126
getTransceiversSpy.mockReturnValue([videoTransceiver, audioTransceiver]);
11271127
handler.setupTransceivers(session);
11281128

1129-
expect(addTransceiverSpy).not.toHaveBeenCalled();
1129+
expect(addTransceiverSpy).toHaveBeenCalledTimes(1);
1130+
expect(addTransceiverSpy).toHaveBeenCalledWith('video', { direction: 'sendonly' });
11301131
});
11311132

1132-
it('should add video transceiver', () => {
1133+
it('should add video transceiver and screen share transceiver', () => {
11331134
getTransceiversSpy.mockReturnValue([audioTransceiver]);
11341135
handler.setupTransceivers(session);
11351136

11361137
expect(addTransceiverSpy).toHaveBeenCalledWith('video', { direction: 'sendrecv' });
1137-
expect(addTransceiverSpy).toHaveReturnedTimes(1);
1138+
expect(addTransceiverSpy).toHaveBeenCalledWith('video', { direction: 'sendonly' });
1139+
expect(addTransceiverSpy).toHaveBeenCalledTimes(2);
11381140
});
11391141

1140-
it('should add audio transceiver', () => {
1142+
it('should add audio transceiver and screen share transceiver', () => {
11411143
getTransceiversSpy.mockReturnValue([videoTransceiver]);
11421144
handler.setupTransceivers(session);
11431145

11441146
expect(addTransceiverSpy).toHaveBeenCalledWith('audio', { direction: 'sendrecv' });
1145-
expect(addTransceiverSpy).toHaveReturnedTimes(1);
1147+
expect(addTransceiverSpy).toHaveBeenCalledWith('video', { direction: 'sendonly' });
1148+
expect(addTransceiverSpy).toHaveBeenCalledTimes(2);
1149+
});
1150+
1151+
it('should add screen share transceiver for multi-track screen share support', () => {
1152+
getTransceiversSpy.mockReturnValue([videoTransceiver, audioTransceiver]);
1153+
handler.setupTransceivers(session);
1154+
1155+
expect(addTransceiverSpy).toHaveBeenCalledWith('video', { direction: 'sendonly' });
11461156
});
11471157
});
11481158

0 commit comments

Comments
 (0)