diff --git a/webrtc/src/Server.ts b/webrtc/src/Server.ts
index 1d2e73e7..dcbf216a 100644
--- a/webrtc/src/Server.ts
+++ b/webrtc/src/Server.ts
@@ -1,5 +1,5 @@
import { Server as WebSocketServer } from "ws";
-import { WebSocket, Payload, } from "@fosscord/gateway";
+import { WebSocket, Payload, CLOSECODES } from "@fosscord/gateway";
import { Config, initDatabase } from "@fosscord/util";
import OPCodeHandlers from "./opcodes";
import { setHeartbeat } from "./util";
@@ -28,8 +28,10 @@ export class Server {
if (OPCodeHandlers[payload.op])
await OPCodeHandlers[payload.op].call(this, socket, payload);
- else
+ else {
console.error(`Unimplemented`, payload);
+ socket.close(CLOSECODES.Unknown_opcode);
+ }
});
});
}
@@ -46,7 +48,7 @@ export class Server {
async createWorkers(): Promise<void> {
const numWorkers = 1;
for (let i = 0; i < numWorkers; i++) {
- const worker = await mediasoup.createWorker();
+ const worker = await mediasoup.createWorker({ logLevel: "debug" });
if (!worker) return;
worker.on("died", () => {
@@ -91,17 +93,6 @@ export class Server {
clockRate: 48000,
channels: 2
},
- {
- kind: "video",
- mimeType: "video/H264",
- clockRate: 90000,
- parameters:
- {
- "packetization-mode": 1,
- "profile-level-id": "42e01f",
- "level-asymmetry-allowed": 1
- }
- }
]
});
diff --git a/webrtc/src/opcodes/Identify.ts b/webrtc/src/opcodes/Identify.ts
index c31870c8..82f327be 100644
--- a/webrtc/src/opcodes/Identify.ts
+++ b/webrtc/src/opcodes/Identify.ts
@@ -5,7 +5,7 @@ import { Server } from "../Server";
export async function onIdentify(this: Server, socket: WebSocket, data: Payload) {
var transport = await this.mediasoupRouters[0].createWebRtcTransport({
- listenIps: [{ ip: "127.0.0.1" }],
+ listenIps: [{ ip: "0.0.0.0", announcedIp: "127.0.0.1" }],
enableUdp: true,
enableTcp: true,
preferUdp: true,
@@ -40,10 +40,9 @@ export async function onIdentify(this: Server, socket: WebSocket, data: Payload)
socket.send(JSON.stringify({
op: VoiceOPCodes.READY,
d: {
+ streams: [],
ssrc: 1,
- ip: "127.0.0.1",
-
- //@ts-ignore
+ ip: transport.iceCandidates[0].ip,
port: transport.iceCandidates[0].port,
modes: [
"aead_aes256_gcm_rtpsize",
diff --git a/webrtc/src/opcodes/SelectProtocol.ts b/webrtc/src/opcodes/SelectProtocol.ts
index 08335ade..36527a8b 100644
--- a/webrtc/src/opcodes/SelectProtocol.ts
+++ b/webrtc/src/opcodes/SelectProtocol.ts
@@ -68,6 +68,8 @@ import * as sdpTransform from 'sdp-transform';
}
*/
+var test_hasMadeProducer = false;
+
export async function onSelectProtocol(this: Server, socket: WebSocket, data: Payload) {
const rtpCapabilities = this.mediasoupRouters[0].rtpCapabilities;
const codecs = rtpCapabilities.codecs as RtpCodecCapability[];
@@ -85,23 +87,33 @@ export async function onSelectProtocol(this: Server, socket: WebSocket, data: Pa
})),
*/
- const producer = await transport.produce({
- kind: "audio",
- rtpParameters: {
- mid: "audio",
- codecs: [{
- clockRate: 48000,
- payloadType: 111,
- mimeType: "audio/opus",
- channels: 2,
- }],
- headerExtensions: res.ext?.map(x => ({
- id: x.value,
- uri: x.uri,
- }))
- },
- paused: false,
- });
+ if (!test_hasMadeProducer) {
+ const producer = await transport.produce({
+ kind: "audio",
+ rtpParameters: {
+ mid: "audio",
+ codecs: [{
+ clockRate: 48000,
+ payloadType: 111,
+ mimeType: "audio/opus",
+ channels: 2,
+ }],
+ headerExtensions: res.ext?.map(x => ({
+ id: x.value,
+ uri: x.uri,
+ }))
+ },
+ paused: false,
+ });
+
+ const consumer = await transport.consume({
+ producerId: producer.id,
+ paused: false,
+ rtpCapabilities,
+ })
+
+ test_hasMadeProducer = true;
+ }
socket.send(JSON.stringify({
op: VoiceOPCodes.SESSION_DESCRIPTION,
|