Skip to content

Commit

Permalink
feat(mediasoup): expose requestKeyframe
Browse files Browse the repository at this point in the history
  • Loading branch information
prlanzarin committed Mar 8, 2023
1 parent 036eb29 commit 8d6fd67
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 19 deletions.
4 changes: 4 additions & 0 deletions lib/base/MCSAPIWrapper.js
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,10 @@ module.exports = class MCSAPIWrapper extends EventEmitter {
}
}

async requestKeyframe (mediaId) {
return this._mcs.requestKeyframe(mediaId);
}

async createRoom (options) {
try {
const { room } = await this._mcs.createRoom(options);
Expand Down
16 changes: 16 additions & 0 deletions lib/mcs-core/lib/adapters/mediasoup/base-element.js
Original file line number Diff line number Diff line change
Expand Up @@ -569,6 +569,22 @@ module.exports = class BaseMediasoupElement extends EventEmitter {
}
}

requestKeyframe () {
this.consumers.forEach((consumer) => {
try {
consumer.requestKeyFrame();
} catch (error) {
Logger.warn('mediasoup: consumer.requestKeyFrame failed', {
errorMessage: error.message,
elementId: this.id,
type: this.type,
});
}
});

return Promise.resolve();
}

// BEGIN EVENT BLOCK

_emitIceFailureEvent () {
Expand Down
23 changes: 9 additions & 14 deletions lib/mcs-core/lib/adapters/mediasoup/mediasoup-adapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -239,22 +239,17 @@ module.exports = class MediasoupAdapter extends EventEmitter {
}
}

requestKeyframe (elementId) {
return new Promise((resolve, reject) => {
try {
const element = MediaElements.getElement(elementId);

element.requestKeyframe((error) => {
if (error) {
return reject(handleError(error));
}
async requestKeyframe (elementId) {
try {
const element = MediaElements.getElement(elementId);

return resolve();
});
} catch (error) {
return reject(handleError(error));
if (element && typeof element.requestKeyframe === 'function') {
await element.requestKeyframe();
return;
}
});
} catch (error) {
throw (handleError(error));
}
}

async restartIce (elementId) {
Expand Down
7 changes: 2 additions & 5 deletions lib/mcs-core/lib/model/media-session.js
Original file line number Diff line number Diff line change
Expand Up @@ -420,17 +420,14 @@ module.exports = class MediaSession {
requestKeyframe () {
return new Promise((resolve, reject) => {
try {
const mediasToRequest= this.medias.filter(({ mediaTypes }) => mediaTypes.video &&
mediaTypes.video !== 'recvonly');

if (mediasToRequest.length <= 0) {
if (this.medias.length <= 0) {
throw (this._handleError({
...C.ERROR.MEDIA_NOT_FOUND,
details: "MEDIA_SESSION_REQUEST_KEYFRAME_NO_AVAILABLE_MEDIA_UNIT"
}));
}

mediasToRequest.forEach(async m => {
this.medias.forEach(async m => {
try {
await m.requestKeyframe();
} catch (err) {
Expand Down

0 comments on commit 8d6fd67

Please sign in to comment.