Error sending RTP packets when trying to connect to stream which is currently being written by MediaRecorder
kolserdav opened this issue · comments
When recording a stream of one client through MediaRecorder, the second client cannot connect to it, as an error occurs when sending RTP packets
[0] [1] 03:58:14 error unhandledRejection TypeError: Cannot read properties of null (reading 'length')
[0] [1] at RTCRtpSender.sendRtp (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/webrtc/src/media/rtpSender.js:296:40)
[0] [1] at Object.execute (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/webrtc/src/media/rtpSender.js:155:24)
[0] [1] at Event.execute (/home/kol/Projects/werift-sfu-react/node_modules/rx.mini/lib/core/index.js:17:30)
[0] [1] at RTCRtpReceiver.handleRTP (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/webrtc/src/media/rtpReceiver.js:259:36)
[0] [1] at RTCRtpReceiver.handleRtpBySsrc (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/webrtc/src/media/rtpReceiver.js:49:18)
[0] [1] at RtpRouter.routeRtp (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/webrtc/src/media/router.js:29:29)
[0] [1] at Object.execute (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/webrtc/src/transport/dtls.js:172:33)
[0] [1] at Event.execute (/home/kol/Projects/werift-sfu-react/node_modules/rx.mini/lib/core/index.js:17:30)
[0] [1] at Connection.dataReceived (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/ice/src/ice.js:552:21)
[0] [1] at StunProtocol.datagramReceived (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/ice/src/stun/protocol.js:42:27)
The top element of the error stack refers to this line
Between adjacent cycles of outputs of these errors, something like the following occurs:
... previous copies of error output 8-10
[0] [1] 04:19:02 error unhandledRejection TypeError: Cannot read properties of null (reading 'length')
[0] [1] at RTCRtpSender.sendRtp (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/webrtc/src/media/rtpSender.js:296:40)
[0] [1] at Object.execute (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/webrtc/src/media/rtpSender.js:155:24)
[0] [1] at Event.execute (/home/kol/Projects/werift-sfu-react/node_modules/rx.mini/lib/core/index.js:17:30)
[0] [1] at RTCRtpReceiver.handleRTP (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/webrtc/src/media/rtpReceiver.js:259:36)
[0] [1] at RTCRtpReceiver.handleRtpBySsrc (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/webrtc/src/media/rtpReceiver.js:49:18)
[0] [1] at RtpRouter.routeRtp (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/webrtc/src/media/router.js:29:29)
[0] [1] at Object.execute (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/webrtc/src/transport/dtls.js:172:33)
[0] [1] at Event.execute (/home/kol/Projects/werift-sfu-react/node_modules/rx.mini/lib/core/index.js:17:30)
[0] [1] at Connection.dataReceived (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/ice/src/ice.js:552:21)
[0] [1] at StunProtocol.datagramReceived (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/ice/src/stun/protocol.js:42:27)
[0] [1]
[0] [1] 04:19:02 info | Closing the call {
[0] [1] peerId: '1671742236952_1_5e298b54-573a-47e0-a157-1c5bc43b3a54',
[0] [1] eventName: 'close-peer-handler'
[0] [1] }
[0] [1]
[0] [1] 04:19:03 info --> Creating answer {
[0] [1] roomId: '1671704372346',
[0] [1] userId: '1671742236952',
[0] [1] target: '1',
[0] [1] connId: '5e298b54-573a-47e0-a157-1c5bc43b3a54',
[0] [1] peerId: '1671742236952_1_5e298b54-573a-47e0-a157-1c5bc43b3a54',
[0] [1] peers: [
[0] [1] '1_0_2764d409-6496-48b1-b8f6-debb9e97edac',
[0] [1] '1671742236952_0_5e298b54-573a-47e0-a157-1c5bc43b3a54',
[0] [1] '1_1671742236952_5e298b54-573a-47e0-a157-1c5bc43b3a54',
[0] [1] '1671742236952_1_5e298b54-573a-47e0-a157-1c5bc43b3a54'
[0] [1] ],
[0] [1] is: 'new',
[0] [1] cs: 'new',
[0] [1] ss: 'stable'
[0] [1] }
[0] [1]
[0] [1] 04:19:03 info ontrack {
[0] [1] peerId: '1671742236952_1_5e298b54-573a-47e0-a157-1c5bc43b3a54',
[0] [1] isRoom: false,
[0] [1] si: '{a2e5c9f9-8eae-413f-a177-e40af6f1b8a7}',
[0] [1] isNew: true,
[0] [1] userId: '1671742236952',
[0] [1] target: '1',
[0] [1] tracks: [ 'audio' ],
[0] [1] isChanged: false
[0] [1] }
[0] [1]
[0] [1] 04:19:03 info ontrack {
[0] [1] peerId: '1671742236952_1_5e298b54-573a-47e0-a157-1c5bc43b3a54',
[0] [1] isRoom: false,
[0] [1] si: '{a2e5c9f9-8eae-413f-a177-e40af6f1b8a7}',
[0] [1] isNew: true,
[0] [1] userId: '1671742236952',
[0] [1] target: '1',
[0] [1] tracks: [ 'video' ],
[0] [1] isChanged: false
[0] [1] }
[0] [1]
[0] [1] 04:19:03 info Add tracks {
[0] [1] roomId: '1671704372346',
[0] [1] userId: '1671742236952',
[0] [1] target: '1',
[0] [1] connId: '5e298b54-573a-47e0-a157-1c5bc43b3a54',
[0] [1] _peerId: '1_0_2764d409-6496-48b1-b8f6-debb9e97edac',
[0] [1] peerId: '1671742236952_1_5e298b54-573a-47e0-a157-1c5bc43b3a54',
[0] [1] tracksL: 2,
[0] [1] tracks: [ 'audio', 'video' ],
[0] [1] ssL: 2,
[0] [1] peers: [
[0] [1] '1_0_2764d409-6496-48b1-b8f6-debb9e97edac',
[0] [1] '1671742236952_0_5e298b54-573a-47e0-a157-1c5bc43b3a54',
[0] [1] '1_1671742236952_5e298b54-573a-47e0-a157-1c5bc43b3a54',
[0] [1] '1671742236952_1_5e298b54-573a-47e0-a157-1c5bc43b3a54'
[0] [1] ],
[0] [1] cS: 'new',
[0] [1] sS: 'have-remote-offer',
[0] [1] iS: 'new'
[0] [1] }
[0] [1]
[0] [1] 04:19:03 info ! WebRTC signaling state changed to: have-remote-offer
[0] [1]
[0] [1] 04:19:03 info ---> Setting local description after creating answer {
[0] [1] roomId: '1671704372346',
[0] [1] userId: '1671742236952',
[0] [1] target: '1',
[0] [1] connId: '5e298b54-573a-47e0-a157-1c5bc43b3a54',
[0] [1] peerId: '1671742236952_1_5e298b54-573a-47e0-a157-1c5bc43b3a54',
[0] [1] peers: [
[0] [1] '1_0_2764d409-6496-48b1-b8f6-debb9e97edac',
[0] [1] '1671742236952_0_5e298b54-573a-47e0-a157-1c5bc43b3a54',
[0] [1] '1_1671742236952_5e298b54-573a-47e0-a157-1c5bc43b3a54',
[0] [1] '1671742236952_1_5e298b54-573a-47e0-a157-1c5bc43b3a54'
[0] [1] ],
[0] [1] is: 'new',
[0] [1] cs: 'new',
[0] [1] ss: 'stable'
[0] [1] }
[0] [1]
[0] [1] 04:19:03 info ! WebRTC signaling state changed to: stable
[0] [1]
[0] [1] 04:19:03 info Sending answer packet back to other peer {
[0] [1] roomId: '1671704372346',
[0] [1] userId: '1671742236952',
[0] [1] target: '1',
[0] [1] connId: '5e298b54-573a-47e0-a157-1c5bc43b3a54',
[0] [1] peerId: '1671742236952_1_5e298b54-573a-47e0-a157-1c5bc43b3a54',
[0] [1] peers: [
[0] [1] '1_0_2764d409-6496-48b1-b8f6-debb9e97edac',
[0] [1] '1671742236952_0_5e298b54-573a-47e0-a157-1c5bc43b3a54',
[0] [1] '1_1671742236952_5e298b54-573a-47e0-a157-1c5bc43b3a54',
[0] [1] '1671742236952_1_5e298b54-573a-47e0-a157-1c5bc43b3a54'
[0] [1] ],
[0] [1] is: 'new',
[0] [1] cs: 'new',
[0] [1] ss: 'stable'
[0] [1] }
[0] [1]
[0] [1] 04:19:03 error unhandledRejection TypeError: Cannot read properties of null (reading 'length')
[0] [1] at RTCRtpSender.sendRtp (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/webrtc/src/media/rtpSender.js:296:40)
[0] [1] at Object.execute (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/webrtc/src/media/rtpSender.js:155:24)
[0] [1] at Event.execute (/home/kol/Projects/werift-sfu-react/node_modules/rx.mini/lib/core/index.js:17:30)
[0] [1] at RTCRtpReceiver.handleRTP (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/webrtc/src/media/rtpReceiver.js:259:36)
[0] [1] at RTCRtpReceiver.handleRtpBySsrc (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/webrtc/src/media/rtpReceiver.js:49:18)
[0] [1] at RtpRouter.routeRtp (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/webrtc/src/media/router.js:29:29)
[0] [1] at Object.execute (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/webrtc/src/transport/dtls.js:172:33)
[0] [1] at Event.execute (/home/kol/Projects/werift-sfu-react/node_modules/rx.mini/lib/core/index.js:17:30)
[0] [1] at Connection.dataReceived (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/ice/src/ice.js:552:21)
[0] [1] at StunProtocol.datagramReceived (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/ice/src/stun/protocol.js:42:27)
subsequent copies of error output 8-10 ...
The recording is made by the client thread under id 1, the client connects under a different id. As can be seen from the logs, the error occurs not on the connection where the second client sends its media tracks to the server, but on the connection where it tries to receive incoming media tracks from client 1.
I tried to figure out how rtp.payload becomes null. This line
is referenced by the fourth element from the top of the error stack, if it is logged there, then the payload is never null. The second error stack entry from the top refers to this line , if it is logged there, then the payload is indeed null before an error is thrown.The conclusion suggests itself that the payload when recording a stream, when this stream needs to connect to another client, sometime becomes null somewhere inside rx.mini.
Roughly handling these exceptions does nothing, even if the error does not pop up, then such a stream is never played or recorded.
@shinyoshiaki , I need your help to find the reason for the RTP of stream packets crossing while recording and sending to clients at the same time.
Once again, note that this problem only occurs when trying to connect to a stream that is in the recording. But if we start recording streams of already connected clients, then everything works fine.
I've tried to fix it, please make sure it's fixed in v0.17.6
I've tried to fix it, please make sure it's fixed in v0.17.6
Cool, it works, thanks!