Skip to content

Commit

Permalink
feat: add PeerService.resume()
Browse files Browse the repository at this point in the history
  • Loading branch information
woody146 committed Jun 13, 2023
1 parent 430c6a5 commit e3f6175
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 3 deletions.
4 changes: 4 additions & 0 deletions examples/rooms/src/components/Consumer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,10 @@ export function Consumer({
case 'connected':
if (ref.current) {
ref.current.srcObject = await stream;
fetchApi({
path: `/api/peers/${data.id}/resume`,
method: 'POST',
});
}
setLog('subscribed');
break;
Expand Down
7 changes: 7 additions & 0 deletions src/apis/master.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,13 @@ export default [
return new PeerService(getDataSource()).connect(data);
},
},
{
method: 'POST',
url: '/peers/:peerId/resume',
handler: (data) => {
return new PeerService(getDataSource()).resume(data);
},
},
{
method: 'POST',
url: '/peers/:peerId/produce',
Expand Down
7 changes: 7 additions & 0 deletions src/apis/slave.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,11 @@ export default [
return mediasoupConsumerManager.create(data);
},
},
{
method: 'POST',
url: '/consumers/:consumerId/resume',
handler: (data) => {
return mediasoupConsumerManager.resume(data);
},
},
] as RouteConfig[];
19 changes: 16 additions & 3 deletions src/services/mediasoup/consumer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,7 @@ class MediasoupConsumerManager {
rtpCapabilities: data.rtpCapabilities,
paused: true,
});
setTimeout(() => {
consumer.resume();
}, 2000);

MediasoupConsumerManager.consumers.push(consumer);

return {
Expand All @@ -48,6 +46,21 @@ class MediasoupConsumerManager {
producerPaused: consumer.producerPaused,
};
}

resume(data: { consumerId: string }) {
const consumer = this.get(data);
if (consumer) {
consumer.resume();
return {};
}
throw new ServiceError(404, 'Consumer not found');
}

get(data: { consumerId: string }) {
return MediasoupConsumerManager.consumers.find(
(item) => item.id === data.consumerId
);
}
}

export const mediasoupConsumerManager = new MediasoupConsumerManager();
17 changes: 17 additions & 0 deletions src/services/peer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,23 @@ export class PeerService extends BaseService {
throw new ServiceError(404, 'Peer not found');
}

async resume(data: { peerId: string }) {
const peer = await this.get({ peerId: data.peerId });
if (peer && peer.consumerId && peer.type === constants.CONSUMER) {
const result = await fetchApi({
host: peer.slave.externalHost,
port: peer.slave.apiPort,
path: '/consumers/:consumerId/resume',
method: 'POST',
data: {
consumerId: peer.consumerId,
},
});
return result;
}
throw new ServiceError(404, 'Peer not found');
}

async get(data: { peerId: string }) {
return this.dataSource.getRepository(MediaPeer).findOne({
relations: { slave: true },
Expand Down

0 comments on commit e3f6175

Please sign in to comment.