UNPKG

@linkbox/mediasoup-translate-client

Version:

118 lines 5.33 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.translateTrack = exports.supportedLanguages = void 0; const axios_1 = __importDefault(require("axios")); const mediasoup_api_client_1 = require("./mediasoup-api-client"); /** * in sync with live-translate-service */ exports.supportedLanguages = [ 'German', 'English', 'Spanish', 'French', 'Russian', 'Italian', 'Ukrainian', ]; const translateTrack = (options) => __awaiter(void 0, void 0, void 0, function* () { return new Promise((resolve) => __awaiter(void 0, void 0, void 0, function* () { const { device, sourceTrack, sourceLanguage, targetLanguage, apiToken, apiUrl = 'http://live-translate-api.cloud-services.linkbox.de:8000', } = options; console.log('client: starting'); const routerRtpCapabilities = yield axios_1.default .get(`${apiUrl}/rtp-capabilities`) .then((res) => res.data); if (!device.loaded) { yield device.load({ routerRtpCapabilities, }); } console.log('client: loaded device, can produce audio:', device.canProduce('audio')); const sendTransport = yield (0, mediasoup_api_client_1.createTransport)(device, 'send', apiUrl, apiToken); console.log('client: created send transport on server', sendTransport.id); // "produce" is emitted upon each call to transport.produce() sendTransport.on('produce', (data, callback, errback) => __awaiter(void 0, void 0, void 0, function* () { console.log('client: producing', data.rtpParameters); console.log(`[POST] "${apiUrl}/transports/${sendTransport.id}/translation-producer"`); const producer = yield axios_1.default .post(`${apiUrl}/transports/${sendTransport.id}/translation-producer`, { kind: 'audio', rtpParameters: data.rtpParameters, apiToken, sourceLanguage, targetLanguage, }) .then((res) => { return res.data; }) .catch((err) => { console.error('client: error creating producer', err); errback(err); }); console.log('client: produced', producer); callback({ id: producer.producerId }); })); if (!device.canProduce('audio')) { console.error('client: cannot produce audio'); return; } sendTransport.observer.on('newproducer', (producer) => { console.log('new producer created [id:%s]', producer.id); }); const producer = yield sendTransport.produce({ track: sourceTrack, }); console.log('GOT PRODUCER', producer.id); producer.on('trackended', () => { console.log('TRACK ENDED'); }); producer.on('transportclose', () => { console.log('TRANSPORT CLOSED!'); }); /////////////// CONSUME //////////////// const recvTransport = yield (0, mediasoup_api_client_1.createTransport)(device, 'recv', apiUrl, apiToken); recvTransport.observer.on('newconsumer', (consumer) => { console.log('new consumer created [id:%s]', consumer.id); }); const serverConsumer = yield axios_1.default .post(`${apiUrl}/transports/${recvTransport.id}/consume`, { producerId: producer.id, apiToken, }) .then((res) => res.data); console.log('serverConsumer', serverConsumer); const consumer = yield recvTransport.consume({ id: serverConsumer.id, producerId: producer.id, rtpParameters: serverConsumer.rtpParameters, kind: 'audio', }); consumer.on('transportclose', () => { console.log('CONSUMER TRANS CLOSED'); }); consumer.on('trackended', () => { console.log('TRACK ENDED'); }); resolve({ translatedTrack: consumer.track }); recvTransport.on('connectionstatechange', (state) => __awaiter(void 0, void 0, void 0, function* () { console.log('client: recv transport connection state', state); if (state === 'connected') { console.log('client: connected'); } })); })); }); exports.translateTrack = translateTrack; //# sourceMappingURL=translate-track.js.map