stop recorder throws exception, I am starting the server with gstream

w.r.t to GitHub - ethand91/mediasoup3-record-demo: Simple Record Demo using Mediasoup 3 and GStreamer

socket::message [jsonMessage:{
action: ‘start-record’,
sessionId: ‘bf620610-905e-11eb-93ec-09b099635e86’
}]
handleStartRecordRequest() [data:{
action: ‘start-record’,
sessionId: ‘bf620610-905e-11eb-93ec-09b099635e86’
}]
publishProducerRtpStream()
createTransport() [type:plain. options:{
listenIp: { ip: ‘0.0.0.0’, announcedIp: undefined },
rtcpMux: false,
comedia: false
}]
(node:23840) UnhandledPromiseRejectionWarning: UnsupportedError: no compatible media codecs
at Object.getConsumerRtpParameters (/home/nagkumar/nag/fork/mediasoup3-record-demo/server/node_modules/mediasoup/lib/ortc.js:690:15)
at PlainTransport.consume (/home/nagkumar/nag/fork/mediasoup3-record-demo/server/node_modules/mediasoup/lib/Transport.js:290:36)
at publishProducerRtpStream (/home/nagkumar/nag/fork/mediasoup3-record-demo/server/src/server.js:250:42)
at processTicksAndRejections (internal/process/task_queues.js:93:5)
at async startRecord (/home/nagkumar/nag/fork/mediasoup3-record-demo/server/src/server.js:271:33)
(node:23840) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see Command-line options | Node.js v15.12.0 Documentation). (rejection id: 14)
socket::message [jsonMessage:{
action: ‘stop-record’,
sessionId: ‘bf620610-905e-11eb-93ec-09b099635e86’
}]
handleStopRecordRequest() [data:{
action: ‘stop-record’,
sessionId: ‘bf620610-905e-11eb-93ec-09b099635e86’
}]
Failed to handle socket message [error:Error: Peer with id bf620610-905e-11eb-93ec-09b099635e86 is not recording
at handleStopRecordRequest (/home/nagkumar/nag/fork/mediasoup3-record-demo/server/src/server.js:190:11)
at handleJsonMessage (/home/nagkumar/nag/fork/mediasoup3-record-demo/server/src/server.js:99:20)
at WebSocket. (/home/nagkumar/nag/fork/mediasoup3-record-demo/server/src/server.js:63:30)
at WebSocket.emit (events.js:315:20)
at Receiver.receiverOnMessage (/home/nagkumar/nag/fork/mediasoup3-record-demo/server/node_modules/ws/lib/websocket.js:825:20)
at Receiver.emit (events.js:315:20)
at Receiver.dataMessage (/home/nagkumar/nag/fork/mediasoup3-record-demo/server/node_modules/ws/lib/receiver.js:437:14)
at Receiver.getData (/home/nagkumar/nag/fork/mediasoup3-record-demo/server/node_modules/ws/lib/receiver.js:367:17)
at Receiver.startLoop (/home/nagkumar/nag/fork/mediasoup3-record-demo/server/node_modules/ws/lib/receiver.js:143:22)
at Receiver._write (/home/nagkumar/nag/fork/mediasoup3-record-demo/server/node_modules/ws/lib/receiver.js:78:10) {
[stack]: ‘Error: Peer with id bf620610-905e-11eb-93ec-09b099635e86 is not recording\n’ +
’ at handleStopRecordRequest (/home/nagkumar/nag/fork/mediasoup3-record-demo/server/src/server.js:190:11)\n’ +
’ at handleJsonMessage (/home/nagkumar/nag/fork/mediasoup3-record-demo/server/src/server.js:99:20)\n’ +
’ at WebSocket. (/home/nagkumar/nag/fork/mediasoup3-record-demo/server/src/server.js:63:30)\n’ +
’ at WebSocket.emit (events.js:315:20)\n’ +
’ at Receiver.receiverOnMessage (/home/nagkumar/nag/fork/mediasoup3-record-demo/server/node_modules/ws/lib/websocket.js:825:20)\n’ +
’ at Receiver.emit (events.js:315:20)\n’ +
’ at Receiver.dataMessage (/home/nagkumar/nag/fork/mediasoup3-record-demo/server/node_modules/ws/lib/receiver.js:437:14)\n’ +
’ at Receiver.getData (/home/nagkumar/nag/fork/mediasoup3-record-demo/server/node_modules/ws/lib/receiver.js:367:17)\n’ +
’ at Receiver.startLoop (/home/nagkumar/nag/fork/mediasoup3-record-demo/server/node_modules/ws/lib/receiver.js:143:22)\n’ +
’ at Receiver._write (/home/nagkumar/nag/fork/mediasoup3-record-demo/server/node_modules/ws/lib/receiver.js:78:10)’,
[message]: ‘Peer with id bf620610-905e-11eb-93ec-09b099635e86 is not recording’
}]
socket::message [jsonMessage:{
action: ‘start-record’,
sessionId: ‘bf620610-905e-11eb-93ec-09b099635e86’
}]
handleStartRecordRequest() [data:{
action: ‘start-record’,
sessionId: ‘bf620610-905e-11eb-93ec-09b099635e86’
}]
publishProducerRtpStream()
createTransport() [type:plain. options:{
listenIp: { ip: ‘0.0.0.0’, announcedIp: undefined },
rtcpMux: false,
comedia: false
}]

The error seem to be from the section of your code where you are trying to consume the rtp Stream from the producer. If this is the case, did you tried matching the codec with which your rtp consumer is going to consume the stream coming from the producer.
I am talking about this part of the code in the function publishProducerRtpStream of the github repo you have referred above. Make sure that you didn’t change any part of this code without understanding what it is doing.

const codecs = [];
  // Codec passed to the RTP Consumer must match the codec in the Mediasoup router rtpCapabilities
  const routerCodec = router.rtpCapabilities.codecs.find(
    codec => codec.kind === producer.kind
  );
  codecs.push(routerCodec);

  const rtpCapabilities = {
    codecs,
    rtcpFeedback: []
  };

  // Start the consumer paused
  // Once the gstreamer process is ready to consume resume and send a keyframe
  const rtpConsumer = await rtpTransport.consume({
    producerId: producer.id,
    rtpCapabilities,
    paused: true
  });

If this part of the code is fine, then check if you have provided proper codec information in your config.js file while creating the producer or not!

Hope this helps.

1 Like