shinyoshiaki / werift-webrtc

WebRTC Implementation for TypeScript (Node.js), includes ICE/DTLS/SCTP/RTP/SRTP/WEBM/MP4
MIT License
469 stars 30 forks source link

MediaRecord Error: baseTime not exist #313

Closed kolserdav closed 1 year ago

kolserdav commented 1 year ago

After updating to version 0.17.7, recording through MediaRecorder stopped working with the following error:

[0] [1] 01:46:25  error  unhandledRejection  Error: baseTime not exist
[0] [1]     at ClusterTimestamp.update (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/rtp/src/processor/webm.js:246:19)
[0] [1]     at WebmStream.onFrameReceived (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/rtp/src/processor/webm.js:142:40)
[0] [1]     at WebmStream.processInput (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/rtp/src/processor/webm.js:116:14)
[0] [1]     at WebmStream.value [as processAudioInput] (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/rtp/src/processor/webm.js:87:26)
[0] [1]     at Object.write (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/rtp/src/processor/webmStream.js:39:26)
[0] [1]     at ensureIsPromise (node:internal/webstreams/util:172:19)
[0] [1]     at writableStreamDefaultControllerProcessWrite (node:internal/webstreams/writablestream:1091:5)
[0] [1]     at writableStreamDefaultControllerAdvanceQueueIfNeeded (node:internal/webstreams/writablestream:1206:5)
[0] [1]     at writableStreamDefaultControllerWrite (node:internal/webstreams/writablestream:1080:3)
[0] [1]     at writableStreamDefaultWriterWrite (node:internal/webstreams/writablestream:969:3)  
[0] [1] 
kolserdav commented 1 year ago

I print the input.frame from the processAudioInput and processVideoInput methods to the console and see that the time at the audio keyframe is still undefined:

[0] [1] {
[0] [1]   data: <Buffer fc d6 f6 e0 5d a7 3e d6 b3 94 76 ea 5b be 7f 78 8a e1 8d 65 6a 4c d1 5f af e8 27 86 8e eb 6c d3 02 eb a1 a8 bb 65 b3 f8 fd 2b 91 b8 6f c8 53 de 8d 11 ... 111 more bytes>,
[0] [1]   isKeyframe: true,
[0] [1]   time: undefined,
[0] [1]   sequence: 0,
[0] [1]   rtpSeq: 26622,
[0] [1]   timestamp: 3195314228
[0] [1] } audio
[0] [1] 2
[0] [1] 02:43:53  error  unhandledRejection  Error: baseTime not exist
[0] [1]     at ClusterTimestamp.update (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/rtp/src/processor/webm.js:249:19)
[0] [1]     at WebmStream.onFrameReceived (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/rtp/src/processor/webm.js:145:40)
[0] [1]     at WebmStream.processInput (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/rtp/src/processor/webm.js:118:14)
[0] [1]     at WebmStream.value [as processAudioInput] (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/rtp/src/processor/webm.js:88:26)
[0] [1]     at Object.write (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/rtp/src/processor/webmStream.js:39:26)
[0] [1]     at ensureIsPromise (node:internal/webstreams/util:172:19)
[0] [1]     at writableStreamDefaultControllerProcessWrite (node:internal/webstreams/writablestream:1091:5)
[0] [1]     at writableStreamDefaultControllerAdvanceQueueIfNeeded (node:internal/webstreams/writablestream:1206:5)
[0] [1]     at writableStreamDefaultControllerWrite (node:internal/webstreams/writablestream:1080:3)
[0] [1]     at writableStreamDefaultWriterWrite (node:internal/webstreams/writablestream:969:3)  
[0] [1] 
[0] [1] 1
[0] [1] {
[0] [1]   data: <Buffer d1 27 00 e3 9b 3f b8 97 f0 ed 20 62 bc e0 3d 59 bd 9b bf 64 84 71 0d ee 84 00 41 56 34 42 46 d8 82 59 3c de ac 04 97 55 55 72 b1 48 cf df 0a 81 79 a2 ... 2289 more bytes>,
[0] [1]   isKeyframe: false,
[0] [1]   time: 0,
[0] [1]   sequence: 0,
[0] [1]   rtpSeq: 9800,
[0] [1]   timestamp: 4173142451
[0] [1] } video

You can also see that the video input doesn't start at a keyframe (but that's a separate issue).

kolserdav commented 1 year ago

This is https://github.com/shinyoshiaki/werift-webrtc/blob/ab1b4d236a937d832468fe93296330aeb370eea5/packages/rtp/src/processor/depacketizer.ts#L105 where item.time is expected to be valid, but at run time the input looks like this:

[0] [1] {
[0] [1]   rtp: RtpPacket {
[0] [1]     header: RtpHeader {
[0] [1]       version: 2,
[0] [1]       padding: false,
[0] [1]       paddingSize: 0,
[0] [1]       extension: false,
[0] [1]       marker: false,
[0] [1]       payloadOffset: 12,
[0] [1]       payloadType: 109,
[0] [1]       sequenceNumber: 25080,
[0] [1]       timestamp: 1597379503,
[0] [1]       ssrc: 4085557688,
[0] [1]       csrcLength: 0,
[0] [1]       csrc: [],
[0] [1]       extensionProfile: 48862,
[0] [1]       extensionLength: undefined,
[0] [1]       extensions: []
[0] [1]     },
[0] [1]     payload: <Buffer fc 72 e2 18 37 ed 37 85 3f 94 ae d0 4e 0e dc 41 35 b0 31 3f b3 7d 07 22 65 97 9d 5c a8 e9 53 46 f4 d7 36 c1 9d 0c 39 52 d5 cd 2c 7e 21 b1 d8 31 40 a6 ... 151 more bytes>
[0] [1]   }
[0] [1] }
[0] [1] 11:38:28  error  unhandledRejection  Error: baseTime not exist
[0] [1]     at ClusterTimestamp.update (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/rtp/src/processor/webm.js:246:19)
[0] [1]     at WebmStream.onFrameReceived (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/rtp/src/processor/webm.js:142:40)
[0] [1]     at WebmStream.processInput (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/rtp/src/processor/webm.js:116:14)
[0] [1]     at WebmStream.value [as processAudioInput] (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/rtp/src/processor/webm.js:87:26)
[0] [1]     at Object.write (/home/kol/Projects/werift-sfu-react/node_modules/werift/lib/rtp/src/processor/webmStream.js:39:26)
[0] [1]     at ensureIsPromise (node:internal/webstreams/util:172:19)
[0] [1]     at writableStreamDefaultControllerProcessWrite (node:internal/webstreams/writablestream:1091:5)
[0] [1]     at writableStreamDefaultControllerAdvanceQueueIfNeeded (node:internal/webstreams/writablestream:1206:5)
[0] [1]     at writableStreamDefaultControllerWrite (node:internal/webstreams/writablestream:1080:3)
[0] [1]     at writableStreamDefaultWriterWrite (node:internal/webstreams/writablestream:969:3)  
[0] [1] 
shinyoshiaki commented 1 year ago

@kolserdav try v0.18.0

kolserdav commented 1 year ago

Build error https://github.com/shinyoshiaki/werift-webrtc/pull/317