Skip to content

Commit

Permalink
Log candidate
Browse files Browse the repository at this point in the history
  • Loading branch information
roznawsk committed Sep 9, 2024
1 parent da17fe5 commit 492d929
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 47 deletions.
2 changes: 1 addition & 1 deletion packages/ts-client/src/FishjamClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ export type Component<PeerMetadata, TrackMetadata> = Omit<Endpoint<PeerMetadata,

const isPeer = <PeerMetadata, TrackMetadata>(
endpoint: Endpoint<PeerMetadata, TrackMetadata>,
): endpoint is Peer<PeerMetadata, TrackMetadata> => endpoint.type === 'webrtc';
): endpoint is Peer<PeerMetadata, TrackMetadata> => endpoint.type === 'webrtc' || endpoint.type === 'exwebrtc';
const isComponent = <PeerMetadata, TrackMetadata>(
endpoint: Endpoint<PeerMetadata, TrackMetadata>,
): endpoint is Component<PeerMetadata, TrackMetadata> =>
Expand Down
1 change: 1 addition & 0 deletions packages/ts-client/src/webrtc/CommandsQueue.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export class CommandsQueue<EndpointMetadata, TrackMetadata> {
this.processNextCommand();
}
};

const onIceConnectionStateChange = () => {
if (connection.getConnection().iceConnectionState === 'connected') {
this.processNextCommand();
Expand Down
31 changes: 2 additions & 29 deletions packages/ts-client/src/webrtc/ConnectionManager.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,12 @@
import type { MediaStreamTrackId } from './types';

export type TurnServer = {
transport: string;
password: string;
serverAddr: string;
serverPort: string;
username: string;
};

export class ConnectionManager {
private readonly connection: RTCPeerConnection;

constructor(turnServers: TurnServer[]) {
constructor() {
this.connection = new RTCPeerConnection({
bundlePolicy: 'max-bundle',
iceServers: this.getIceServers(turnServers),
iceTransportPolicy: 'relay',
iceTransportPolicy: 'all',
});
}

Expand All @@ -29,24 +20,6 @@ export class ConnectionManager {
return isSignalingUnstable && isConnectionNotConnected && isIceNotConnected;
};

/**
* Configures TURN servers for WebRTC connections by adding them to the provided RTCConfiguration object.
*/
private getIceServers = (turnServers: TurnServer[]): RTCIceServer[] => {
return turnServers.map((turnServer: TurnServer) => {
const transport = turnServer.transport === 'tls' ? 'tcp' : turnServer.transport;
const uri = turnServer.transport === 'tls' ? 'turns' : 'turn';
const address = turnServer.serverAddr;
const port = turnServer.serverPort;

return {
credential: turnServer.password,
urls: uri.concat(':', address, ':', port, '?transport=', transport),
username: turnServer.username,
};
});
};

public getConnection = (): RTCPeerConnection => {
return this.connection;
};
Expand Down
1 change: 0 additions & 1 deletion packages/ts-client/src/webrtc/tracks/LocalTrack.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,6 @@ export class LocalTrack<EndpointMetadata, TrackMetadata> implements TrackCommon

if (!encodingParameter) throw new Error(`RTCRtpEncodingParameters for track ${this.id} not found`);

encodingParameter.active = false;
this.encodings[encoding] = false;

await this.sender.setParameters(params);
Expand Down
7 changes: 3 additions & 4 deletions packages/ts-client/src/webrtc/tracks/Remote.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,19 +56,18 @@ export class Remote<EndpointMetadata, TrackMetadata> {
public addTracks = (
endpointId: EndpointId,
tracks: Record<TrackId, SDPTrack>,
trackIdToMetadata: Record<TrackId, any>,
) => {
const endpoint: EndpointWithTrackContext<EndpointMetadata, TrackMetadata> | undefined =
this.remoteEndpoints[endpointId];

if (!endpoint) throw new Error(`Endpoint ${endpointId} not found`);

Object.entries(tracks || {})
.map(([trackId, { simulcastConfig }]) => {
.map(([trackId, { simulcastConfig, metadata }]) => {
const trackContext = new TrackContextImpl(
endpoint,
trackId,
trackIdToMetadata[trackId],
metadata,
simulcastConfig,
this.trackMetadataParser,
);
Expand Down Expand Up @@ -115,7 +114,7 @@ export class Remote<EndpointMetadata, TrackMetadata> {
this.updateEndpointMetadata(newEndpoint, endpoint.metadata);

this.addEndpoint(newEndpoint);
this.addTracks(newEndpoint.id, endpoint.tracks, endpoint.trackIdToMetadata);
this.addTracks(newEndpoint.id, endpoint.tracks);

if (sendNotification) {
this.emit('endpointAdded', endpoint);
Expand Down
27 changes: 15 additions & 12 deletions packages/ts-client/src/webrtc/webRTCEndpoint.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import { LocalTrackManager } from './tracks/LocalTrackManager';
import { CommandsQueue } from './CommandsQueue';
import { Remote } from './tracks/Remote';
import { Local } from './tracks/Local';
import type { TurnServer } from './ConnectionManager';
import { ConnectionManager } from './ConnectionManager';

/**
Expand Down Expand Up @@ -208,7 +207,7 @@ export class WebRTCEndpoint<EndpointMetadata = any, TrackMetadata = any> extends

if (this.getEndpointId() === data.endpointId) return;

this.remote.addTracks(data.endpointId, data.tracks, data.trackIdToMetadata);
this.remote.addTracks(data.endpointId, data.tracks);
break;
}
case 'tracksRemoved': {
Expand All @@ -224,9 +223,9 @@ export class WebRTCEndpoint<EndpointMetadata = any, TrackMetadata = any> extends
}

case 'sdpAnswer':
this.localTrackManager.ongoingRenegotiation = false;
await this.onSdpAnswer(deserializedMediaEvent.data);

this.localTrackManager.ongoingRenegotiation = false;
this.commandsQueue.processNextCommand();
break;

Expand Down Expand Up @@ -694,6 +693,7 @@ export class WebRTCEndpoint<EndpointMetadata = any, TrackMetadata = any> extends

// todo change to private
public sendMediaEvent = (mediaEvent: MediaEvent) => {
console.log("send ME", mediaEvent)
const serializedMediaEvent = serializeMediaEvent(mediaEvent);
this.emit('sendMediaEvent', serializedMediaEvent);
};
Expand All @@ -703,6 +703,11 @@ export class WebRTCEndpoint<EndpointMetadata = any, TrackMetadata = any> extends
if (!connection) return;

try {



this.localTrackManager.updateSenders();

const offer = await connection.getConnection().createOffer();

if (!this.connectionManager) {
Expand All @@ -728,10 +733,8 @@ export class WebRTCEndpoint<EndpointMetadata = any, TrackMetadata = any> extends
private onOfferData = async (offerData: MediaEvent) => {
const connection = this.connectionManager;

if (connection) {
connection.getConnection().restartIce();
} else {
this.setConnection(offerData.data.integratedTurnServers);
if (!connection) {
this.setConnection();

const onIceCandidate = (event: RTCPeerConnectionIceEvent) => this.onLocalCandidate(event);
const onIceCandidateError = (event: RTCPeerConnectionIceErrorEvent) => this.onIceCandidateError(event);
Expand All @@ -758,17 +761,15 @@ export class WebRTCEndpoint<EndpointMetadata = any, TrackMetadata = any> extends
this.local.addAllTracksToConnection();
}

this.localTrackManager.updateSenders();

const tracks = new Map<string, number>(Object.entries(offerData.data.tracksTypes));

this.connectionManager?.addTransceiversIfNeeded(tracks);

await this.createAndSendOffer();
};

private setConnection = (turnServers: TurnServer[]) => {
this.connectionManager = new ConnectionManager(turnServers);
private setConnection = () => {
this.connectionManager = new ConnectionManager();

this.localTrackManager.updateConnection(this.connectionManager);
this.local.updateConnection(this.connectionManager);
Expand All @@ -793,6 +794,8 @@ export class WebRTCEndpoint<EndpointMetadata = any, TrackMetadata = any> extends
data: {
candidate: event.candidate.candidate,
sdpMLineIndex: event.candidate.sdpMLineIndex,
sdpMid: event.candidate.sdpMid,
usernameFragment: event.candidate.usernameFragment,
},
});
this.sendMediaEvent(mediaEvent);
Expand Down Expand Up @@ -820,7 +823,7 @@ export class WebRTCEndpoint<EndpointMetadata = any, TrackMetadata = any> extends
console.warn('ICE connection: disconnected');
// Requesting renegotiation on ICE connection state failed fixes RTCPeerConnection
// when the user changes their WiFi network.
this.sendMediaEvent(generateCustomEvent({ type: 'renegotiateTracks' }));
// this.sendMediaEvent(generateCustomEvent({ type: 'renegotiateTracks' }));
break;
case 'failed':
this.emit('connectionError', {
Expand Down

0 comments on commit 492d929

Please sign in to comment.