@linkbox/mediasoup-translate-client
Version:
87 lines (79 loc) • 2.19 kB
text/typescript
import axios from 'axios';
import { Device } from 'mediasoup-client';
import { DtlsParameters } from 'mediasoup-client/lib/Transport';
export async function connectServerTransport(
sendTransport,
dtlsParameters: DtlsParameters,
apiToken: string,
apiUrl: string,
) {
console.log('client: connecting send transport');
await axios
.post(`${apiUrl}/transports/${sendTransport.id}/connect`, {
dtlsParameters,
apiToken,
})
.catch((e) => {
console.error('client: error connecting transport', e);
throw e;
});
console.log('client: connected');
}
export async function createTransport(
device: Device,
type: 'send' | 'recv',
apiUrl: string,
apiToken: string,
) {
const respTransport = await axios
.post(`${apiUrl}/transports`, {
sctpCapabilities: device.sctpCapabilities,
apiToken,
})
.catch((e) => {
console.error('client: error creating transport', e);
throw e;
});
const transportInfo = respTransport.data;
if (!transportInfo) {
throw new Error('client: transport info is not defined');
}
const {
id,
iceParameters,
iceCandidates,
dtlsParameters,
sctpParameters,
iceServers,
} = transportInfo;
console.log('client: creating send transport on device');
const transportOptions = {
id,
iceParameters,
iceCandidates,
dtlsParameters,
sctpParameters,
iceServers,
};
const transport =
type === 'send'
? device.createSendTransport(transportOptions)
: device.createRecvTransport(transportOptions);
transport.on('connectionstatechange', async (state) => {
console.log(`client: ${type} transport connection state`, state);
if (state === 'connected') {
console.log('client: connected');
}
});
transport?.on(
'connect',
async (data: { dtlsParameters: DtlsParameters }, callback, errback) => {
console.log(`client: connected ${type} transport`);
connectServerTransport(transport, data.dtlsParameters, apiToken, apiUrl)
.then(callback)
.catch(errback);
},
);
console.log(`client: created ${type} transport on device`);
return transport;
}