diff --git a/app/lib/db/schema.ts b/app/lib/db/schema.ts index ab5b47c..f6d2c11 100644 --- a/app/lib/db/schema.ts +++ b/app/lib/db/schema.ts @@ -58,6 +58,33 @@ export const presetUsers = pgTable( ); // relations +export const peersRelations = relations(peers, ({ many }) => ({ + roomsAsbroadcaster: many(rooms, { relationName: "broadcaster" }), + roomViewersAsViewer: many(roomViewers, { relationName: "viewer" }), +})); + +export const roomsRelations = relations(rooms, ({ one, many }) => ({ + broadcasterPeer: one(peers, { + fields: [rooms.broadcaster], + references: [peers.id], + relationName: "broadcaster", + }), + viewers: many(roomViewers, { relationName: "room" }), +})); + +export const roomViewersRelations = relations(roomViewers, ({ one }) => ({ + room: one(rooms, { + fields: [roomViewers.roomId], + references: [rooms.id], + relationName: "room", + }), + viewer: one(peers, { + fields: [roomViewers.viewerId], + references: [peers.id], + relationName: "viewer", + }), +})); + export const presetsRelations = relations(presets, ({ many }) => ({ presetUsers: many(presetUsers), })); diff --git a/app/pages/index.vue b/app/pages/index.vue index 3796f78..7f5b6cc 100644 --- a/app/pages/index.vue +++ b/app/pages/index.vue @@ -45,7 +45,9 @@ const { send } = useWebSocket(wsUrl, { const message = JSON.parse(ev.data); if (message.event === "offer") { viewerStore.setConnectionStatus("creating rtc peer connections..."); - const peerConnection = new RTCPeerConnection(); + const peerConnection = new RTCPeerConnection({ + iceServers: message.iceServers, + }); viewerStore.setPeerConnection(peerConnection); peerConnection.ontrack = (event) => { diff --git a/app/pages/stream.vue b/app/pages/stream.vue index e89a15a..42abb47 100644 --- a/app/pages/stream.vue +++ b/app/pages/stream.vue @@ -37,7 +37,6 @@ const { send } = useWebSocket(wsUrl, { if (message.event === "viewer-joined") { const peerConnection = new RTCPeerConnection({ iceServers: streamerStore.iceServers, - iceTransportPolicy: "relay", }); streamerStore.addPeerConnection(message.viewerId, peerConnection); @@ -59,6 +58,12 @@ const { send } = useWebSocket(wsUrl, { } }; + peerConnection.onconnectionstatechange = () => { + console.log( + `connection state with ${message.viewerId}: ${peerConnection.connectionState}`, + ); + }; + const offer = await peerConnection.createOffer(); await peerConnection.setLocalDescription(offer); @@ -67,6 +72,7 @@ const { send } = useWebSocket(wsUrl, { event: "offer", targetId: message.viewerId, sdp: offer, + iceServers: streamerStore.iceServers, }), ); } diff --git a/server/routes/ws/signaling.ts b/server/routes/ws/signaling.ts index 50b0cd6..ddc69fc 100644 --- a/server/routes/ws/signaling.ts +++ b/server/routes/ws/signaling.ts @@ -124,6 +124,7 @@ export default defineWebSocketHandler({ event: 'offer', sdp: msg.sdp, senderId: peer.id, + iceServers: msg.iceServers, })); } }