shinyoshiaki / werift-webrtc

WebRTC Implementation for TypeScript (Node.js), includes ICE/DTLS/SCTP/RTP/SRTP/WEBM/MP4

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Streams worked with v0.14.4 but fail with v0.18.5

potmat opened this issue · comments

Hello @shinyoshiaki! You may recall some time ago you helped me use your package to aid in streaming video from Nest cameras. For this I am very grateful.

I have been using v0.14.4 since, recently I tried to update to latest and couldn't get the streams to work. There is no error produced from werift, but forwarding the streams to ffmpeg causes ffmpeg to get confused somehow. Previously when we were working on this you created v0.14.4-debug for debugging purposes. Could such a thing be created for the most recent version so we could see what debug logs werift is creating?

I think the debug logs are rarely deleted, so if you set the environment variable "DEBUG" to "werift*", you will be able to see the debug logs.

Thank you, I will try.

Here is the output from 0.14.4 (working):

/Users/tpotma/.nvm/versions/node/v16.13.1/bin/node /Users/tpotma/Source/webrtctest/dist/index.js
  werift/webrtc/utils iceOptions {
  stunServer: [ 'stun.l.google.com', 19302 ],
  turnServer: undefined,
  turnUsername: undefined,
  turnPassword: undefined
} +0ms
  werift:packages/webrtc/src/peerConnection.ts iceGatheringStateChange new +0ms
  werift:packages/webrtc/src/peerConnection.ts iceConnectionStateChange new +0ms
  werift:packages/webrtc/src/peerConnection.ts signalingStateChange have-local-offer +15ms
  werift:packages/webrtc/src/peerConnection.ts iceGatheringStateChange gathering +0ms
ffmpeg version 5.0.1-5.0.1 Copyright (c) 2000-2022 the FFmpeg developers
  built with Apple clang version 13.1.6 (clang-1316.0.21.2.5)
  configuration: --enable-videotoolbox --enable-nonfree --enable-gpl --enable-openssl --enable-libx264 --enable-libx265 --enable-libvpx --enable-libxvid --enable-libvidstab --enable-libaom --enable-libzimg --enable-lv2 --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libtheora --enable-libfdk-aac --enable-libsrt --enable-libspeex --disable-debug --disable-doc --disable-shared --enable-pthreads --enable-static --enable-small --enable-version3 --extra-cflags='-I/Users/Shared/ffmpeg-for-homebridge/workspace/include -I/Users/Shared/ffmpeg-for-homebridge/workspace/include/lilv-0' --extra-ldexeflags= --extra-ldflags=-L/Users/Shared/ffmpeg-for-homebridge/workspace/lib --extra-libs='-ldl -lpthread -lm -lz' --pkgconfigdir=/Users/Shared/ffmpeg-for-homebridge/workspace/lib/pkgconfig --pkg-config-flags=--static --prefix=/Users/Shared/ffmpeg-for-homebridge/workspace --extra-version=5.0.1
  libavutil      57. 17.100 / 57. 17.100
  libavcodec     59. 18.100 / 59. 18.100
  libavformat    59. 16.100 / 59. 16.100
  libavdevice    59.  4.100 / 59.  4.100
  libavfilter     8. 24.100 /  8. 24.100
  libswscale      6.  4.100 /  6.  4.100
  libswresample   4.  3.100 /  4.  3.100
  libpostproc    56.  3.100 / 56.  3.100

[sdp @ 0x158004080] setting jitter buffer size to 500

  werift:packages/webrtc/src/peerConnection.ts iceConnectionStateChange completed +30ms
  werift:packages/webrtc/src/peerConnection.ts iceGatheringStateChange complete +0ms
  werift:packages/webrtc/src/peerConnection.ts negotiated codecs [
  RTCRtpCodecParameters {
    rtcpFeedback: [],
    mimeType: 'audio/opus',
    channels: 2,
    clockRate: 48000,
    payloadType: 96,
    parameters: 'minptime=10;useinbandfec=1'
  }
] +993ms
  werift:packages/webrtc/src/media/router.ts registerRtpReceiverBySsrc {
  muxId: '0',
  rtcp: undefined,
  codecs: [
    RTCRtpCodecParameters {
      rtcpFeedback: [],
      mimeType: 'audio/opus',
      channels: 2,
      clockRate: 48000,
      payloadType: 96,
      parameters: 'minptime=10;useinbandfec=1'
    }
  ],
  headerExtensions: [],
  encodings: [ RTCRtpCodingParameters { ssrc: 6666, payloadType: 96 } ]
} +0ms
  werift:packages/webrtc/src/media/rtpSender.ts replaceTrack ssrc 6666 rid undefined +0ms
  werift:packages/webrtc/src/media/rtpReceiver.ts twcc support false +0ms
  werift:packages/webrtc/src/peerConnection.ts negotiated codecs [
  RTCRtpCodecParameters {
    rtcpFeedback: [
      [RTCRtcpFeedback],
      [RTCRtcpFeedback],
      [RTCRtcpFeedback],
      [RTCRtcpFeedback]
    ],
    mimeType: 'video/H264',
    channels: undefined,
    clockRate: 90000,
    payloadType: 97,
    parameters: 'level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f'
  }
] +1ms
  werift:packages/webrtc/src/media/router.ts registerRtpReceiverBySsrc {
  muxId: '1',
  rtcp: undefined,
  codecs: [
    RTCRtpCodecParameters {
      rtcpFeedback: [Array],
      mimeType: 'video/H264',
      channels: undefined,
      clockRate: 90000,
      payloadType: 97,
      parameters: 'level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f'
    }
  ],
  headerExtensions: [],
  encodings: [ RTCRtpCodingParameters { ssrc: 3212739396, payloadType: 97 } ]
} +1ms
  werift:packages/webrtc/src/media/rtpSender.ts replaceTrack ssrc 3212739396 rid undefined +1ms
  werift:packages/webrtc/src/media/rtpReceiver.ts twcc support false +0ms
  werift:packages/webrtc/src/peerConnection.ts caller start connect +0ms
  werift:packages/webrtc/src/peerConnection.ts connectionStateChange connecting +0ms
  werift:packages/webrtc/src/peerConnection.ts iceConnectionStateChange checking +1ms
  werift-ice : packages/ice/src/ice.ts : log start connect ice +0ms
  werift-ice : packages/ice/src/ice.ts : log check start Candidate {
  foundation: '',
  component: 1,
  transport: 'udp',
  priority: 2113932031,
  host: '142.250.112.127',
  port: 19305,
  type: 'host',
  relatedAddress: undefined,
  relatedPort: undefined,
  tcptype: undefined,
  generation: undefined
} +0ms
  werift:packages/webrtc/src/peerConnection.ts signalingStateChange stable +1ms
answer applied
  werift-ice : packages/ice/src/ice.ts : log check start Candidate {
  foundation: '',
  component: 1,
  transport: 'udp',
  priority: 2113939711,
  host: '2607:f8b0:4023:1402::7f',
  port: 19305,
  type: 'host',
  relatedAddress: undefined,
  relatedPort: undefined,
  tcptype: undefined,
  generation: undefined
} +22ms
  werift-ice : packages/ice/src/ice.ts : log response Message {
  messageMethod: 1,
  messageClass: 256,
  transactionId: <Buffer 3a 52 1d 36 35 8f 3b 06 11 16 f4 81>,
  attributes: {
    USERNAME: 'WD3QLKAVWKTBVZR6:2bc4',
    'XOR-MAPPED-ADDRESS': [ '142.198.163.203', 50902 ],
    'MESSAGE-INTEGRITY': <Buffer 14 9c 82 44 32 ec 61 df 02 3e 03 d2 09 a1 fb f1 fd 05 bc 12>,
    FINGERPRINT: 2167966952
  }
} [ '142.250.112.127', 19305 ] +3ms
  werift-ice : packages/ice/src/ice.ts : log ICE completed +25ms
  werift:packages/webrtc/src/peerConnection.ts iceConnectionStateChange connected +65ms
  werift:packages/webrtc/src/peerConnection.ts ice connected +1ms
  werift-dtls : packages/dtls/src/socket.ts : log  support srtpProfiles [ 7, 1 ] +0ms
  werift-dtls : packages/dtls/src/client.ts : log  start client +0ms
  werift-ice:packages/ice/src/transport.ts send error [ '2607:f8b0:4023:1402::7f', 19305 ] <Buffer 00 01 00 50 21 12 a4 42 68 74 38 56 8c c2 2e 31 5f 48 68 10 00 06 00 15 57 44 33 51 4c 4b 41 56 57 4b 54 42 56 5a 52 36 3a 32 62 63 34 00 00 00 00 24 ... 50 more bytes> +0ms
  werift-ice:packages/ice/src/transport.ts send error [ '2607:f8b0:4023:1402::7f', 19305 ] <Buffer 00 01 00 50 21 12 a4 42 68 74 38 56 8c c2 2e 31 5f 48 68 10 00 06 00 15 57 44 33 51 4c 4b 41 56 57 4b 54 42 56 5a 52 36 3a 32 62 63 34 00 00 00 00 24 ... 50 more bytes> +99ms
  werift-dtls : packages/dtls/src/client.ts : log  handleHandshakes [ 2 ] +130ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  serverHello 49199 +0ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  selected cipherSuite 49199 +0ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  RenegotiationIndication +0ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  selected srtp profile 1 +0ms
  werift-dtls : packages/dtls/src/client.ts : log  handleHandshakes [ 11 ] +0ms
  werift-dtls : packages/dtls/src/client.ts : log  handleHandshakes [ 12 ] +0ms
  werift-dtls : packages/dtls/src/client.ts : log  handleHandshakes [] +0ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  handshake certificate Certificate {
  certificateList: [
    <Buffer 30 82 03 00 30 82 01 e8 a0 03 02 01 02 02 09 00 da e8 a0 77 71 9d 11 57 30 0d 06 09 2a 86 48 86 f7 0d 01 01 0b 05 00 30 13 31 11 30 0f 06 03 55 04 03 ... 722 more bytes>
  ],
  msgType: 11
} +0ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  ServerKeyExchange ServerKeyExchange {
  ellipticCurveType: 3,
  namedCurve: 29,
  publicKeyLength: 32,
  publicKey: <Buffer d7 e1 e0 a5 23 e3 6a 36 b5 d7 68 90 37 0f a5 9a bb 0e bc 66 f8 67 7a 60 e1 99 a0 bd 75 72 8b 3c>,
  hashAlgorithm: 4,
  signatureAlgorithm: 1,
  signatureLength: 256,
  signature: <Buffer 1a 73 38 c7 2b 3e 14 78 05 ad 1e f4 b7 54 11 52 56 f0 b6 40 4c 73 8f c0 e8 00 2b 20 37 ba d2 c4 d2 f8 ae c7 f3 47 96 80 80 9a 47 55 fb f4 7a 31 e2 34 ... 206 more bytes>,
  msgType: 12
} +1ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  selected curve 29 +0ms
  werift-dtls : packages/dtls/src/client.ts : log  handleHandshakes [ 13 ] +11ms
  werift-dtls : packages/dtls/src/client.ts : log  handleHandshakes [ 14 ] +0ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  certificate_request ServerCertificateRequest {
  certificateTypes: [ 1, 64 ],
  signatures: [
    [Object: null prototype] { hash: 4, signature: 3 },
    [Object: null prototype] { hash: 8, signature: 4 },
    [Object: null prototype] { hash: 4, signature: 1 },
    [Object: null prototype] { hash: 5, signature: 3 },
    [Object: null prototype] { hash: 8, signature: 5 },
    [Object: null prototype] { hash: 5, signature: 1 },
    [Object: null prototype] { hash: 8, signature: 6 },
    [Object: null prototype] { hash: 6, signature: 1 },
    [Object: null prototype] { hash: 2, signature: 1 }
  ],
  authorities: [],
  msgType: 13
} +11ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  server_hello_done ServerHelloDone { msgType: 14 } +0ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  send flight5 true +0ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  extendedMasterSecret true true +1ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  cipher {
  id: 49199,
  verifyDataLength: 12,
  keyLength: 16,
  nonceLength: 12,
  ivLength: 4,
  authTagLength: 16,
  nonceImplicitLength: 4,
  nonceExplicitLength: 8,
  name: 'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256',
  blockAlgorithm: 'aes-128-gcm',
  hashAlgorithm: 'sha256',
  clientWriteKey: '0x2a,0xf3,0xe2,0x96,0x82,0x18,0xf8,0x1f,0xd6,0xe3,0x71,0xb7,0x7b,0xfc,0xf1,0x62',
  serverWriteKey: '0x4e,0x67,0xb3,0x05,0xf3,0xa3,0xb9,0x37,0xa1,0x5b,0x08,0x5d,0x39,0x71,0xba,0xd8',
  clientNonce: '0x55,0xb0,0x5e,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00',
  serverNonce: '0x7b,0x9e,0x78,0x5f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00'
} +1ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  signatureScheme 3 1027 +1ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  raw finish packet {
  header: {
    contentType: 22,
    protocolVersion: { major: 254, minor: 253 },
    epoch: 1,
    sequenceNumber: 6,
    contentLen: 24
  },
  fragment: '0x14,0x00,0x00,0x0c,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x0c,0x6f,0x96,0x58,0x34,0xa2,0x23,0x30,0x4c,0xce,0xf4,0x73,0x85'
} [
  {
    msg_type: 1,
    length: 86,
    message_seq: 0,
    fragment_offset: 0,
    fragment_length: 86,
    fragment: '0xfe,0xfd,0x64,0x97,0x0e,0x48,0xd9,0xc2,0x01,0xcc,0xeb,0xe8,0xb9,0x4c,0x89,0xdd,0x5f,0xeb,0x93,0xfa,0x25,0x79,0x61,0x19,0x40,0xe5,0xe4,0xa4,0xa7,0xde,0xee,0xd6,0x98,0x5a,0x00,0x00,0x00,0x04,0xc0,0x2b,0xc0,0x2f,0x01,0x00,0x00,0x28,0x00,0x0e,0x00,0x07,0x00,0x04,0x00,0x07,0x00,0x01,0x00,0x00,0x0a,0x00,0x06,0x00,0x04,0x00,0x1d,0x00,0x17,0x00,0x0d,0x00,0x06,0x00,0x04,0x04,0x01,0x04,0x03,0x00,0x17,0x00,0x00,0xff,0x01,0x00,0x01,0x00'
  },
  {
    msg_type: 2,
    length: 90,
    message_seq: 0,
    fragment_offset: 0,
    fragment_length: 90,
    fragment: '0xfe,0xfd,0x64,0x97,0x0e,0x48,0x46,0x51,0x17,0x19,0x0f,0x34,0xe0,0xc3,0xed,0xbc,0xbb,0x91,0x4d,0x09,0x72,0xd0,0xe3,0x7e,0x95,0xaf,0x7e,0x9b,0x08,0x73,0x08,0x86,0x37,0x1c,0x20,0xe5,0xf1,0x5b,0xdc,0x08,0x75,0x6e,0x95,0x41,0xd1,0x22,0x52,0x90,0x25,0x17,0xf4,0x2a,0xb8,0x24,0x00,0x14,0xd3,0x1c,0xf6,0x5a,0x9b,0x13,0x5c,0x5d,0x43,0x00,0xa1,0xc0,0x2f,0x00,0x00,0x12,0x00,0x17,0x00,0x00,0xff,0x01,0x00,0x01,0x00,0x00,0x0e,0x00,0x05,0x00,0x02,0x00,0x01,0x00'
  },
  {
    msg_type: 11,
    length: 778,
    message_seq: 1,
    fragment_offset: 0,
    fragment_length: 778,
    fragment: '0x00,0x03,0x07,0x00,0x03,0x04,0x30,0x82,0x03,0x00,0x30,0x82,0x01,0xe8,0xa0,0x03,0x02,0x01,0x02,0x02,0x09,0x00,0xda,0xe8,0xa0,0x77,0x71,0x9d,0x11,0x57,0x30,0x0d,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,0x01,0x0b,0x05,0x00,0x30,0x13,0x31,0x11,0x30,0x0f,0x06,0x03,0x55,0x04,0x03,0x13,0x08,0x68,0x61,0x6e,0x67,0x6f,0x75,0x74,0x73,0x30,0x1e,0x17,0x0d,0x32,0x33,0x30,0x36,0x32,0x33,0x31,0x30,0x32,0x39,0x33,0x36,0x5a,0x17,0x0d,0x32,0x34,0x30,0x36,0x32,0x33,0x31,0x30,0x32,0x39,0x33,0x36,0x5a,0x30,0x13,0x31,0x11,0x30,0x0f,0x06,0x03,0x55,0x04,0x03,0x13,0x08,0x68,0x61,0x6e,0x67,0x6f,0x75,0x74,0x73,0x30,0x82,0x01,0x22,0x30,0x0d,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,0x01,0x01,0x05,0x00,0x03,0x82,0x01,0x0f,0x00,0x30,0x82,0x01,0x0a,0x02,0x82,0x01,0x01,0x00,0x9e,0x12,0x40,0xf5,0xe0,0xc8,0xa4,0xc6,0x99,0x9b,0x6e,0x70,0x7f,0xa1,0xe5,0x5b,0x90,0x73,0xbb,0xe8,0xc4,0xb7,0x9e,0x62,0xec,0xee,0xd1,0x65,0xf8,0x78,0x77,0x60,0xba,0xaf,0x36,0x25,0x1a,0x79,0xbf,0xbd,0xa6,0x0b,0xa3,0xc1,0xce,0x71,0x7a,0x3c,0x55,0x15,0x40,0xf2,0x5d,0x2b,0xeb,0x1d,0x79,0xf3,0xab,0x7a,0x56,0xc1,0x97,0x4c,0x8c,0x5b,0x11,0x0a,0xa9,0x8e,0x80,0x17,0x10,0x4e,0x0a,0x33,0xeb,0xc1,0x3e,0xe5,0xf5,0xfa,0xf7,0x74,0xf4,0x09,0x0b,0x6c,0xcb,0x06,0x08,0xc9,0xb3,0x4b,0x9c,0xe1,0x80,0x30,0x17,0xa8,0x58,0x33,0xf9,0xbb,0x3a,0x0c,0xbf,0x3f,0xe4,0xf9,0x39,0x49,0xc4,0x80,0xf3,0xa2,0xb2,0x5d,0xfa,0xfd,0xd6,0xae,0x0b,0x47,0x54,0xb8,0xf2,0xba,0x25,0x0c,0x25,0x30,0x18,0x95,0x6b,0x9d,0xc0,0xc9,0x2c,0x5a,0xf2,0xd1,0x4a,0x98,0x84,0xec,0x6d,0xcd,0x37,0x43,0x60,0xe5,0xcf,0x20,0x0b,0x8e,0xed,0x50,0x01,0x66,0x9d,0xd2,0x42,0x69,0x7e,0x6d,0x8f,0x8a,0x18,0x5f,0x8e,0x4f,0x1e,0xda,0x7d,0xbc,0xae,0x20,0xd3,0x5a,0xa3,0xcf,0x5c,0x6e,0x78,0x5a,0x89,0xab,0xdf,0x56,0xa8,0x49,0x4d,0x8d,0x23,0x96,0xde,0x51,0x99,0x34,0x96,0x37,0x97,0xa0,0x73,0x76,0x1a,0x12,0x3c,0x96,0xe4,0x21,0x5b,0x1f,0x03,0x1c,0x56,0x9d,0x4e,0x7f,0x71,0xc1,0x77,0x88,0xa5,0xbb,0xd8,0x25,0x70,0x94,0x0e,0x01,0x0c,0x2e,0x4c,0x54,0xb5,0x12,0xb7,0x44,0xd5,0xbd,0x3b,0xd1,0x46,0x43,0xca,0x51,0x84,0xd5,0x05,0x2a,0x99,0xb5,0xc2,0x0d,0x02,0x03,0x01,0x00,0x01,0xa3,0x57,0x30,0x55,0x30,0x0e,0x06,0x03,0x55,0x1d,0x0f,0x01,0x01,0xff,0x04,0x04,0x03,0x02,0x02,0x84,0x30,0x13,0x06,0x03,0x55,0x1d,0x25,0x04,0x0c,0x30,0x0a,0x06,0x08,0x2b,0x06,0x01,0x05,0x05,0x07,0x03,0x01,0x30,0x0f,0x06,0x03,0x55,0x1d,0x13,0x01,0x01,0xff,0x04,0x05,0x30,0x03,0x01,0x01,0xff,0x30,0x1d,0x06,0x03,0x55,0x1d,0x0e,0x04,0x16,0x04,0x14,0xa3,0xe4,0x4a,0xa7,0x9c,0x2b,0x4f,0x4d,0x3f,0x12,0xf6,0xcc,0x29,0xa9,0xd0,0x3e,0x07,0x68,0x88,0x53,0x30,0x0d,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,0x01,0x0b,0x05,0x00,0x03,0x82,0x01,0x01,0x00,0x34,0x44,0x33,0x6a,0x58,0xad,0xef,0x1d,0x75,0xb2,0x93,0xb5,0xbe,0x49,0xc7,0x74,0x3f,0x96,0xa4,0xa1,0x01,0x77,0xb7,0x0e,0xe6,0x31,0x21,0x8f,0xa1,0x06,0xa1,0x16,0x04,0x6d,0x34,0xc1,0x42,0x87,0xb1,0xce,0x07,0x17,0x61,0x1a,0x38,0x37,0xec,0x50,0x3d,0xb2,0x66,0xfc,0xe8,0xbe,0xe4,0x76,0x35,0xe2,0x73,0xb2,0x76,0x93,0x05,0x91,0x8e,0xb1,0x89,0xd9,0x98,0x63,0xc2,0x9b,0x54,0x54,0xeb,0x94,0x69,0xc3,0xca,0x75,0x45,0x97,0xc8,0x94,0xe1,0xb5,0x5c,0xc7,0xbf,0x3c,0xa8,0xfb,0x05,0x75,0x51,0xef,0xc8,0xe8,0x59,0x8c,0xb7,0x25,0xfc,0xde,0x57,0xda,0xad,0x6b,0x09,0xcc,0x62,0xda,0x0a,0xd4,0xe8,0x3f,0xc1,0x06,0x6d,0x95,0x27,0x77,0xdd,0x78,0xa0,0x3b,0xdf,0x9c,0xc4,0x87,0x83,0x43,0x81,0xd6,0x02,0x5b,0xa1,0x60,0x57,0x4b,0x55,0x6a,0x1d,0xa3,0x9f,0x9b,0x17,0xe3,0x06,0xb5,0x8d,0xa4,0x6d,0x66,0x22,0xe0,0xd6,0x59,0xc4,0xf0,0x48,0x23,0xf0,0x22,0xca,0xe7,0xdf,0xe9,0x44,0xa3,0x2e,0xa3,0x5a,0x7f,0x93,0x55,0x9f,0x6f,0x50,0x44,0x33,0x3e,0x4b,0x90,0x92,0x0f,0x9b,0x69,0x58,0xf2,0xba,0x17,0xe6,0xb4,0x24,0x33,0x06,0x31,0xe4,0x26,0xe2,0xa6,0x5b,0x9d,0xc3,0xe3,0x8a,0xb3,0xeb,0x88,0x8e,0xde,0x30,0xe5,0x6e,0xf6,0xd7,0xd4,0x22,0xde,0xc2,0x65,0x95,0x66,0x5b,0x8a,0xde,0x3e,0xdf,0x8a,0x04,0x0c,0xb3,0x06,0x3c,0x39,0xe4,0xc2,0x7c,0x33,0x01,0xbe,0x12,0x37,0x62,0xb5,0x96,0xe7,0xa4,0xc2,0x05,0x2b,0x80,0xa6,0x57,0x5b'
  },
  {
    msg_type: 12,
    length: 296,
    message_seq: 2,
    fragment_offset: 0,
    fragment_length: 296,
    fragment: '0x03,0x00,0x1d,0x20,0xd7,0xe1,0xe0,0xa5,0x23,0xe3,0x6a,0x36,0xb5,0xd7,0x68,0x90,0x37,0x0f,0xa5,0x9a,0xbb,0x0e,0xbc,0x66,0xf8,0x67,0x7a,0x60,0xe1,0x99,0xa0,0xbd,0x75,0x72,0x8b,0x3c,0x04,0x01,0x01,0x00,0x1a,0x73,0x38,0xc7,0x2b,0x3e,0x14,0x78,0x05,0xad,0x1e,0xf4,0xb7,0x54,0x11,0x52,0x56,0xf0,0xb6,0x40,0x4c,0x73,0x8f,0xc0,0xe8,0x00,0x2b,0x20,0x37,0xba,0xd2,0xc4,0xd2,0xf8,0xae,0xc7,0xf3,0x47,0x96,0x80,0x80,0x9a,0x47,0x55,0xfb,0xf4,0x7a,0x31,0xe2,0x34,0xfc,0xab,0x2a,0xc7,0x13,0x1f,0x31,0xc4,0x09,0xa7,0x14,0x1b,0x2e,0x6f,0x98,0xae,0xf1,0x51,0x46,0xab,0x59,0xa9,0x3f,0x9a,0xbb,0x7f,0xa5,0x34,0xb9,0x0f,0xba,0x1c,0x6a,0x8f,0x13,0xdc,0x31,0xe8,0x3c,0x41,0x2b,0x97,0x3d,0xc6,0xad,0xbd,0x9d,0x5c,0x63,0x8e,0xaa,0x51,0x16,0x8a,0x57,0xb8,0xbf,0x0d,0x4c,0x15,0xcf,0xcf,0x40,0x13,0x8f,0x22,0xb5,0x9f,0x38,0x8d,0x6e,0xa9,0x80,0x2a,0xc8,0x80,0x50,0x37,0xc1,0x3e,0x6d,0xa8,0x4c,0xd4,0x8b,0x82,0x77,0x78,0x1f,0xda,0x7a,0x74,0x90,0x34,0xcb,0x42,0xa1,0xf1,0x4e,0xc4,0x95,0xba,0x10,0x95,0x8d,0x7f,0x57,0x3a,0x12,0x89,0xbb,0xcd,0xe1,0xfa,0xc8,0xab,0x59,0x47,0x1d,0x20,0xb7,0xd0,0xec,0x50,0xc6,0xd3,0x28,0x5b,0x58,0x39,0x1b,0x08,0x64,0x7c,0x46,0xc4,0x31,0x4a,0x8a,0x27,0x15,0x36,0x40,0x7e,0x58,0xc4,0x47,0x1c,0x56,0x86,0xe3,0x26,0x86,0xa0,0x75,0x19,0x46,0xcf,0xb1,0x12,0xd7,0xfd,0xf9,0xdd,0x3f,0xc9,0x42,0xf3,0x76,0x46,0x35,0xe1,0xa2,0x3a,0x44,0xed,0x32,0x0b,0x6a,0xde,0x8b,0xff,0x11,0x99,0x48,0x1a,0xbe,0xc1,0xd9,0x69,0xbd,0x17,0x07,0x00,0xc7,0xd6,0x7d,0xae,0xc5,0xc1,0x08,0x6e,0xb2,0x1b,0x1f,0xd4'
  },
  {
    msg_type: 13,
    length: 25,
    message_seq: 3,
    fragment_offset: 0,
    fragment_length: 25,
    fragment: '0x02,0x01,0x40,0x00,0x12,0x04,0x03,0x08,0x04,0x04,0x01,0x05,0x03,0x08,0x05,0x05,0x01,0x08,0x06,0x06,0x01,0x02,0x01,0x00,0x00'
  },
  {
    msg_type: 14,
    length: 0,
    message_seq: 4,
    fragment_offset: 0,
    fragment_length: 0,
    fragment: '0x'
  },
  {
    msg_type: 11,
    length: 390,
    message_seq: 1,
    fragment_offset: 0,
    fragment_length: 390,
    fragment: '0x00,0x01,0x83,0x00,0x01,0x80,0x30,0x82,0x01,0x7c,0x30,0x82,0x01,0x21,0xa0,0x03,0x02,0x01,0x02,0x02,0x01,0x01,0x30,0x0a,0x06,0x08,0x2a,0x86,0x48,0xce,0x3d,0x04,0x03,0x02,0x30,0x45,0x31,0x0b,0x30,0x09,0x06,0x03,0x55,0x04,0x06,0x13,0x02,0x41,0x55,0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x08,0x13,0x0a,0x53,0x6f,0x6d,0x65,0x2d,0x53,0x74,0x61,0x74,0x65,0x31,0x21,0x30,0x1f,0x06,0x03,0x55,0x04,0x0a,0x13,0x18,0x49,0x6e,0x74,0x65,0x72,0x6e,0x65,0x74,0x20,0x57,0x69,0x64,0x67,0x69,0x74,0x73,0x20,0x50,0x74,0x79,0x20,0x4c,0x74,0x64,0x30,0x1e,0x17,0x0d,0x32,0x33,0x30,0x36,0x32,0x34,0x31,0x35,0x33,0x39,0x35,0x31,0x5a,0x17,0x0d,0x33,0x33,0x30,0x36,0x32,0x34,0x31,0x35,0x33,0x39,0x35,0x31,0x5a,0x30,0x45,0x31,0x0b,0x30,0x09,0x06,0x03,0x55,0x04,0x06,0x13,0x02,0x41,0x55,0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x08,0x13,0x0a,0x53,0x6f,0x6d,0x65,0x2d,0x53,0x74,0x61,0x74,0x65,0x31,0x21,0x30,0x1f,0x06,0x03,0x55,0x04,0x0a,0x13,0x18,0x49,0x6e,0x74,0x65,0x72,0x6e,0x65,0x74,0x20,0x57,0x69,0x64,0x67,0x69,0x74,0x73,0x20,0x50,0x74,0x79,0x20,0x4c,0x74,0x64,0x30,0x59,0x30,0x13,0x06,0x07,0x2a,0x86,0x48,0xce,0x3d,0x02,0x01,0x06,0x08,0x2a,0x86,0x48,0xce,0x3d,0x03,0x01,0x07,0x03,0x42,0x00,0x04,0x92,0x7c,0xf6,0x75,0x49,0xee,0x3b,0x93,0x87,0x2b,0xff,0x49,0xb0,0xdc,0x24,0x0d,0x53,0xfd,0x81,0x9d,0x96,0x7f,0xce,0x34,0xa7,0x82,0x6b,0xde,0xd7,0x57,0x6a,0x46,0xee,0xb9,0x49,0x09,0x1e,0xd1,0xf0,0xba,0x90,0x76,0xb0,0x87,0x66,0x49,0xcc,0xa9,0x24,0x43,0x74,0x8b,0xc1,0xd2,0x2d,0xc3,0xa5,0x03,0x94,0xd7,0x4e,0x1e,0x7d,0x99,0xa3,0x02,0x30,0x00,0x30,0x0a,0x06,0x08,0x2a,0x86,0x48,0xce,0x3d,0x04,0x03,0x02,0x03,0x49,0x00,0x30,0x46,0x02,0x21,0x00,0x93,0x76,0xf0,0x41,0xf7,0x37,0x27,0x8f,0x3e,0x9e,0xec,0xe2,0xf5,0x65,0xe8,0x81,0xf3,0x73,0xd4,0x07,0xac,0x29,0x69,0xc7,0x8e,0xeb,0x15,0xe2,0xc6,0x70,0xc7,0x9a,0x02,0x21,0x00,0xf8,0x4d,0xf3,0x5f,0xd7,0x8b,0x10,0x1a,0xf0,0xf5,0x13,0x7e,0xbf,0x54,0xc4,0x67,0x6e,0xfe,0xf1,0x0b,0xdb,0x67,0x59,0xb4,0x42,0x2a,0xb7,0xf3,0xd5,0x46,0x9d,0x1d'
  },
  {
    msg_type: 16,
    length: 33,
    message_seq: 2,
    fragment_offset: 0,
    fragment_length: 33,
    fragment: '0x20,0x9e,0xf8,0x95,0xa8,0x61,0xac,0xf3,0xcd,0xf6,0x77,0x37,0x02,0x33,0x27,0x9b,0x34,0x04,0x43,0xf2,0xd2,0x18,0x45,0xec,0xa4,0xd5,0x90,0x50,0xcb,0x0a,0xbf,0x04,0x11'
  },
  {
    msg_type: 15,
    length: 75,
    message_seq: 3,
    fragment_offset: 0,
    fragment_length: 75,
    fragment: '0x04,0x03,0x00,0x47,0x30,0x45,0x02,0x20,0x68,0x6a,0x4a,0xa2,0x86,0xa9,0x8c,0xcc,0xe0,0xce,0x09,0x30,0x72,0x35,0xb4,0x89,0xc9,0x2b,0xf1,0x3b,0x88,0xc0,0xba,0x8a,0x1a,0x8e,0x70,0x5c,0xc2,0x8d,0x3d,0xa2,0x02,0x21,0x00,0x83,0xcc,0x5d,0x19,0xf6,0xce,0x63,0x7b,0x10,0x87,0x11,0xcb,0x4c,0xf4,0x47,0xfa,0xc9,0x39,0x81,0xe0,0x82,0x16,0xb8,0x80,0x07,0x19,0x69,0xa0,0xfe,0x78,0xa8,0xc8'
  },
  {
    msg_type: 20,
    length: 12,
    message_seq: 4,
    fragment_offset: 0,
    fragment_length: 12,
    fragment: '0x6f,0x96,0x58,0x34,0xa2,0x23,0x30,0x4c,0xce,0xf4,0x73,0x85'
  }
] +1ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  finished {
  id: 49199,
  verifyDataLength: 12,
  keyLength: 16,
  nonceLength: 12,
  ivLength: 4,
  authTagLength: 16,
  nonceImplicitLength: 4,
  nonceExplicitLength: 8,
  name: 'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256',
  blockAlgorithm: 'aes-128-gcm',
  hashAlgorithm: 'sha256',
  clientWriteKey: '0x2a,0xf3,0xe2,0x96,0x82,0x18,0xf8,0x1f,0xd6,0xe3,0x71,0xb7,0x7b,0xfc,0xf1,0x62',
  serverWriteKey: '0x4e,0x67,0xb3,0x05,0xf3,0xa3,0xb9,0x37,0xa1,0x5b,0x08,0x5d,0x39,0x71,0xba,0xd8',
  clientNonce: '0x55,0xb0,0x5e,0x36,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x06',
  serverNonce: '0x7b,0x9e,0x78,0x5f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00'
} +3ms
  werift-dtls : packages/dtls/record/receive.ts : log  change cipher spec +0ms
  werift-dtls : packages/dtls/record/receive.ts : log  decrypt handshake +0ms
  werift-dtls : packages/dtls/src/client.ts : log  handleHandshakes [ 20 ] +33ms
  werift-dtls : packages/dtls/src/client.ts : log  dtls connected +0ms
  werift:packages/webrtc/src/transport/dtls.ts selected SRTP Profile 1 +0ms
  werift:packages/webrtc/src/transport/dtls.ts dtls connected +2ms
  werift:packages/webrtc/src/peerConnection.ts dtls connected +179ms
  werift/sctp/sctp setConnectionState connecting +0ms
  werift/sctp/sctp send init InitChunk {
  flags: 0,
  _body: <Buffer >,
  initiateTag: 2879500446,
  advertisedRwnd: 1048576,
  outboundStreams: 65535,
  inboundStreams: 65535,
  initialTsn: 2236997994,
  params: [ [ 49152, <Buffer > ], [ 32776, <Buffer c0 82> ] ]
} +0ms
  werift-ice:packages/ice/src/transport.ts send error [ '2607:f8b0:4023:1402::7f', 19305 ] <Buffer 00 01 00 50 21 12 a4 42 68 74 38 56 8c c2 2e 31 5f 48 68 10 00 06 00 15 57 44 33 51 4c 4b 41 56 57 4b 54 42 56 5a 52 36 3a 32 62 63 34 00 00 00 00 24 ... 50 more bytes> +202ms
  werift-ice:packages/ice/src/transport.ts send error [ '2607:f8b0:4023:1402::7f', 19305 ] <Buffer 00 01 00 50 21 12 a4 42 68 74 38 56 8c c2 2e 31 5f 48 68 10 00 06 00 15 57 44 33 51 4c 4b 41 56 57 4b 54 42 56 5a 52 36 3a 32 62 63 34 00 00 00 00 24 ... 50 more bytes> +401ms
    Last message repeated 1 times
[h264 @ 0x158004e60] Reinit context to 1920x1088, pix_fmt: yuv420p

  werift-ice:packages/ice/src/transport.ts send error [ '2607:f8b0:4023:1402::7f', 19305 ] <Buffer 00 01 00 50 21 12 a4 42 68 74 38 56 8c c2 2e 31 5f 48 68 10 00 06 00 15 57 44 33 51 4c 4b 41 56 57 4b 54 42 56 5a 52 36 3a 32 62 63 34 00 00 00 00 24 ... 50 more bytes> +803ms
[sdp @ 0x158004080] Empty H.264 RTP packet

    Last message repeated 76 times
Input #0, sdp, from '/Users/tpotma/Source/webrtctest/src/ffmpeg.sdp':
  Metadata:
    title           : -

  Duration: N/A, start: 0.000000, bitrate: N/A
  Stream #0:0: Audio: opus, 48000 Hz, stereo, fltp
  Stream #0:1: Video: h264, 1 reference frame, yuv420p(progressive, left), 1920x1080 (1920x1088), 30 fps, 15 tbr, 90k tbn

Stream mapping:
  Stream #0:1 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:0 -> #0:1 (opus (native) -> opus (libopus))
Press [q] to stop, [?] for help

[graph_1_in_0_0 @ 0x600000c084d0] tb:1/48000 samplefmt:fltp samplerate:48000 chlayout:0x3

[format_out_0_1 @ 0x600000c08630] auto-inserting filter 'auto_aresample_0' between the filter 'Parsed_anull_0' and the filter 'format_out_0_1'

[auto_aresample_0 @ 0x600000c086e0] ch:2 chl:stereo fmt:fltp r:48000Hz -> ch:2 chl:stereo fmt:flt r:48000Hz

[libopus @ 0x128808400] No bit rate set. Defaulting to 96000 bps.

[h264 @ 0x12880b0c0] Reinit context to 1920x1088, pix_fmt: yuv420p

[graph 0 input from stream 0:1 @ 0x600000c1cc60] w:1920 h:1080 pixfmt:yuv420p tb:1/90000 fr:15/1 sar:0/1

[libx264 @ 0x128807080] using cpu capabilities: ARMv8 NEON

[libx264 @ 0x128807080] profile High, level 4.0, 4:2:0, 8-bit

[libx264 @ 0x128807080] 264 - core 163 - H.264/MPEG-4 AVC codec - Copyleft 2003-2021 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=15 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=15 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00

Output #0, matroska, to '/users/tpotma/Desktop/output.mkv':
  Metadata:
    title           : 
-
    encoder         : Lavf59.16.100
  Stream #0:0: Video: h264, 1 reference frame (H264 / 0x34363248), yuv420p(progressive, left), 1920x1080 (0x0), q=2-31, 15 fps, 1k tbn
    Metadata:
      encoder         : Lavc59.18.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A

  Stream #0:1: Audio: opus ([255][255][255][255] / 0xFFFFFFFF), 48000 Hz, stereo, flt, delay 312, 96 kb/s
    Metadata:
      encoder         : Lavc59.18.100 libopus

frame=    1 fps=0.0 q=0.0 size=       1kB time=00:00:01.05 bitrate=   6.3kbits/s speed=62.4x    
frame=   18 fps=0.0 q=0.0 size=       1kB time=00:00:02.75 bitrate=   2.4kbits/s speed=5.08x    
  werift-ice:packages/ice/src/transport.ts send error [ '2607:f8b0:4023:1402::7f', 19305 ] <Buffer 00 01 00 50 21 12 a4 42 68 74 38 56 8c c2 2e 31 5f 48 68 10 00 06 00 15 57 44 33 51 4c 4b 41 56 57 4b 54 42 56 5a 52 36 3a 32 62 63 34 00 00 00 00 24 ... 50 more bytes> +2s
frame=   19 fps= 17 q=0.0 size=       1kB time=00:00:03.29 bitrate=   2.0kbits/s speed=2.86x    
frame=   30 fps= 18 q=0.0 size=       1kB time=00:00:03.89 bitrate=   1.7kbits/s speed=2.29x    
frame=   33 fps= 15 q=0.0 size=       1kB time=00:00:04.41 bitrate=   1.5kbits/s speed=   2x    
frame=   34 fps= 12 q=0.0 size=       1kB time=00:00:04.95 bitrate=   1.3kbits/s speed= 1.8x    
frame=   46 fps= 14 q=0.0 size=       1kB time=00:00:05.45 bitrate=   1.2kbits/s speed=1.67x    
frame=   56 fps= 15 q=0.0 size=       1kB time=00:00:06.01 bitrate=   1.1kbits/s speed=1.58x

Here is the output from 0.18.3 (not working):

/Users/tpotma/.nvm/versions/node/v16.13.1/bin/node /Users/tpotma/Source/webrtctest/dist/index.js
  werift:packages/webrtc/src/utils.ts iceOptions {
  stunServer: [ 'stun.l.google.com', 19302 ],
  turnServer: undefined,
  turnUsername: undefined,
  turnPassword: undefined
} +0ms
  werift:packages/webrtc/src/utils.ts iceOptions {
  stunServer: [ 'stun.l.google.com', 19302 ],
  turnServer: undefined,
  turnUsername: undefined,
  turnPassword: undefined
} +3ms
  werift:packages/webrtc/src/utils.ts iceOptions {
  stunServer: [ 'stun.l.google.com', 19302 ],
  turnServer: undefined,
  turnUsername: undefined,
  turnPassword: undefined
} +0ms
(node:3189) ExperimentalWarning: stream/web is an experimental feature. This feature could change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
  werift:packages/webrtc/src/peerConnection.ts signalingStateChange have-local-offer +0ms
  werift:packages/webrtc/src/peerConnection.ts iceGatheringStateChange gathering +0ms
ffmpeg version 5.0.1-5.0.1 Copyright (c) 2000-2022 the FFmpeg developers
  built with Apple clang version 13.1.6 (clang-1316.0.21.2.5)
  configuration: --enable-videotoolbox --enable-nonfree --enable-gpl --enable-openssl --enable-libx264 --enable-libx265 --enable-libvpx --enable-libxvid --enable-libvidstab --enable-libaom --enable-libzimg --enable-lv2 --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libtheora --enable-libfdk-aac --enable-libsrt --enable-libspeex --disable-debug --disable-doc --disable-shared --enable-pthreads --enable-static --enable-small --enable-version3 --extra-cflags='-I/Users/Shared/ffmpeg-for-homebridge/workspace/include -I/Users/Shared/ffmpeg-for-homebridge/workspace/include/lilv-0' --extra-ldexeflags= --extra-ldflags=-L/Users/Shared/ffmpeg-for-homebridge/workspace/lib --extra-libs='-ldl -lpthread -lm -lz' --pkgconfigdir=/Users/Shared/ffmpeg-for-homebridge/workspace/lib/pkgconfig --pkg-config-flags=--static --prefix=/Users/Shared/ffmpeg-for-homebridge/workspace --extra-version=5.0.1
  libavutil      57. 17.100 / 57. 17.100
  libavcodec     59. 18.100 / 59. 18.100
  libavformat    59. 16.100 / 59. 16.100
  libavdevice    59.  4.100 / 59.  4.100
  libavfilter     8. 24.100 /  8. 24.100
  libswscale      6.  4.100 /  6.  4.100
  libswresample   4.  3.100 /  4.  3.100
  libpostproc    56.  3.100 / 56.  3.100
[sdp @ 0x122704080] setting jitter buffer size to 500

  werift:packages/webrtc/src/peerConnection.ts iceConnectionStateChange completed +42ms
  werift:packages/webrtc/src/peerConnection.ts iceGatheringStateChange complete +0ms
  werift:packages/webrtc/src/utils.ts iceOptions {
  stunServer: [ 'stun.l.google.com', 19302 ],
  turnServer: undefined,
  turnUsername: undefined,
  turnPassword: undefined
} +1s
  werift:packages/webrtc/src/peerConnection.ts iceConnectionStateChange new +1s
  werift:packages/webrtc/src/peerConnection.ts negotiated codecs [
  RTCRtpCodecParameters {
    payloadType: 96,
    mimeType: 'audio/opus',
    clockRate: 48000,
    channels: 2,
    rtcpFeedback: [],
    parameters: 'minptime=10;useinbandfec=1',
    direction: 'all'
  }
] +0ms
  werift:packages/webrtc/src/media/router.ts registerRtpReceiverBySsrc {
  muxId: '0',
  rtcp: undefined,
  codecs: [
    RTCRtpCodecParameters {
      payloadType: 96,
      mimeType: 'audio/opus',
      clockRate: 48000,
      channels: 2,
      rtcpFeedback: [],
      parameters: 'minptime=10;useinbandfec=1',
      direction: 'all'
    }
  ],
  headerExtensions: [],
  encodings: [
    RTCRtpCodingParameters {
      ssrc: 6666,
      payloadType: 96,
      rtx: undefined
    }
  ]
} +0ms
  werift:packages/webrtc/src/media/router.ts registerRtpReceiver 6666 +1ms
  werift-ice : packages/ice/src/ice.ts : log setRemoteParams {
  iceLite: true,
  usernameFragment: '7RCTGZCOB7FMMWMN',
  password: 'OI0FDLVWUH3074/ACSSVJCUA'
} +0ms
  werift-ice : packages/ice/src/ice.ts : log addRemoteCandidate Candidate {
  foundation: '',
  component: 1,
  transport: 'udp',
  priority: 2113939711,
  host: '2607:f8b0:4023:1402::7f',
  port: 19305,
  type: 'host',
  relatedAddress: undefined,
  relatedPort: undefined,
  tcptype: undefined,
  generation: undefined
} +0ms
  werift-ice : packages/ice/src/ice.ts : log addRemoteCandidate Candidate {
  foundation: '',
  component: 1,
  transport: 'tcp',
  priority: 2113939710,
  host: '2607:f8b0:4023:1402::7f',
  port: 19305,
  type: 'host',
  relatedAddress: undefined,
  relatedPort: undefined,
  tcptype: 'passive',
  generation: undefined
} +0ms
  werift-ice : packages/ice/src/ice.ts : log addRemoteCandidate Candidate {
  foundation: '',
  component: 1,
  transport: 'ssltcp',
  priority: 2113939709,
  host: '2607:f8b0:4023:1402::7f',
  port: 443,
  type: 'host',
  relatedAddress: undefined,
  relatedPort: undefined,
  tcptype: undefined,
  generation: undefined
} +0ms
  werift-ice : packages/ice/src/ice.ts : log addRemoteCandidate Candidate {
  foundation: '',
  component: 1,
  transport: 'udp',
  priority: 2113932031,
  host: '142.250.112.127',
  port: 19305,
  type: 'host',
  relatedAddress: undefined,
  relatedPort: undefined,
  tcptype: undefined,
  generation: undefined
} +0ms
  werift-ice : packages/ice/src/ice.ts : log addRemoteCandidate Candidate {
  foundation: '',
  component: 1,
  transport: 'tcp',
  priority: 2113932030,
  host: '142.250.112.127',
  port: 19305,
  type: 'host',
  relatedAddress: undefined,
  relatedPort: undefined,
  tcptype: 'passive',
  generation: undefined
} +0ms
  werift-ice : packages/ice/src/ice.ts : log addRemoteCandidate Candidate {
  foundation: '',
  component: 1,
  transport: 'ssltcp',
  priority: 2113932029,
  host: '142.250.112.127',
  port: 443,
  type: 'host',
  relatedAddress: undefined,
  relatedPort: undefined,
  tcptype: undefined,
  generation: undefined
} +0ms
  werift:packages/webrtc/src/utils.ts iceOptions {
  stunServer: [ 'stun.l.google.com', 19302 ],
  turnServer: undefined,
  turnUsername: undefined,
  turnPassword: undefined
} +2ms
  werift:packages/webrtc/src/peerConnection.ts iceGatheringStateChange new +2ms
  werift:packages/webrtc/src/peerConnection.ts negotiated codecs [
  RTCRtpCodecParameters {
    payloadType: 97,
    mimeType: 'video/H264',
    clockRate: 90000,
    channels: undefined,
    rtcpFeedback: [
      [RTCRtcpFeedback],
      [RTCRtcpFeedback],
      [RTCRtcpFeedback],
      [RTCRtcpFeedback]
    ],
    parameters: 'level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f',
    direction: 'all'
  }
] +0ms
  werift:packages/webrtc/src/media/router.ts registerRtpReceiverBySsrc {
  muxId: '1',
  rtcp: undefined,
  codecs: [
    RTCRtpCodecParameters {
      payloadType: 97,
      mimeType: 'video/H264',
      clockRate: 90000,
      channels: undefined,
      rtcpFeedback: [Array],
      parameters: 'level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f',
      direction: 'all'
    }
  ],
  headerExtensions: [],
  encodings: [
    RTCRtpCodingParameters {
      ssrc: 3212739396,
      payloadType: 97,
      rtx: undefined
    }
  ]
} +1ms
  werift:packages/webrtc/src/media/router.ts registerRtpReceiver 3212739396 +0ms
  werift-ice : packages/ice/src/ice.ts : log setRemoteParams {
  iceLite: true,
  usernameFragment: '7RCTGZCOB7FMMWMN',
  password: 'OI0FDLVWUH3074/ACSSVJCUA'
} +1ms
  werift-ice : packages/ice/src/ice.ts : log setRemoteParams {
  iceLite: true,
  usernameFragment: '7RCTGZCOB7FMMWMN',
  password: 'OI0FDLVWUH3074/ACSSVJCUA'
} +0ms
  werift:packages/webrtc/src/peerConnection.ts signalingStateChange stable +1ms
  werift:packages/webrtc/src/peerConnection.ts caller start connect +0ms
  werift:packages/webrtc/src/peerConnection.ts start connect +0ms
  werift:packages/webrtc/src/peerConnection.ts connectionStateChange connecting +0ms
  werift-ice : packages/ice/src/ice.ts : log start connect ice [] +1ms
  werift:packages/webrtc/src/peerConnection.ts iceGatheringStateChange gathering +0ms
  werift:packages/webrtc/src/peerConnection.ts iceTransport.start failed Error: remoteParams missing
    at RTCIceTransport.start (/Users/tpotma/Source/webrtctest/node_modules/werift/lib/webrtc/src/transport/ice.js:108:19)
    at /Users/tpotma/Source/webrtctest/node_modules/werift/lib/webrtc/src/peerConnection.js:798:32
    at Array.map (<anonymous>)
    at RTCPeerConnection.connect (/Users/tpotma/Source/webrtctest/node_modules/werift/lib/webrtc/src/peerConnection.js:796:47)
    at RTCPeerConnection.setRemoteDescription (/Users/tpotma/Source/webrtctest/node_modules/werift/lib/webrtc/src/peerConnection.js:969:18)
    at doIt (/Users/tpotma/Source/webrtctest/dist/rtc.js:127:14)
    at processTicksAndRejections (node:internal/process/task_queues:96:5) +0ms
  werift:packages/webrtc/src/peerConnection.ts iceTransport.start failed Error: remoteParams missing
    at RTCIceTransport.start (/Users/tpotma/Source/webrtctest/node_modules/werift/lib/webrtc/src/transport/ice.js:108:19)
    at /Users/tpotma/Source/webrtctest/node_modules/werift/lib/webrtc/src/peerConnection.js:798:32
    at Array.map (<anonymous>)
    at RTCPeerConnection.connect (/Users/tpotma/Source/webrtctest/node_modules/werift/lib/webrtc/src/peerConnection.js:796:47)
    at RTCPeerConnection.setRemoteDescription (/Users/tpotma/Source/webrtctest/node_modules/werift/lib/webrtc/src/peerConnection.js:969:18)
    at doIt (/Users/tpotma/Source/webrtctest/dist/rtc.js:127:14)
    at processTicksAndRejections (node:internal/process/task_queues:96:5) +1ms
  werift:packages/webrtc/src/peerConnection.ts iceTransport.start failed Error: Local candidates gathering was not performed
    at Connection.connect (/Users/tpotma/Source/webrtctest/node_modules/werift/lib/ice/src/ice.js:525:23)
    at RTCIceTransport.start (/Users/tpotma/Source/webrtctest/node_modules/werift/lib/webrtc/src/transport/ice.js:114:35)
    at /Users/tpotma/Source/webrtctest/node_modules/werift/lib/webrtc/src/peerConnection.js:798:32
    at Array.map (<anonymous>)
    at RTCPeerConnection.connect (/Users/tpotma/Source/webrtctest/node_modules/werift/lib/webrtc/src/peerConnection.js:796:47)
    at RTCPeerConnection.setRemoteDescription (/Users/tpotma/Source/webrtctest/node_modules/werift/lib/webrtc/src/peerConnection.js:969:18)
    at doIt (/Users/tpotma/Source/webrtctest/dist/rtc.js:127:14)
    at processTicksAndRejections (node:internal/process/task_queues:96:5) +0ms
  werift:packages/webrtc/src/peerConnection.ts connect failed Error: remoteParams missing
    at RTCIceTransport.start (/Users/tpotma/Source/webrtctest/node_modules/werift/lib/webrtc/src/transport/ice.js:108:19)
    at /Users/tpotma/Source/webrtctest/node_modules/werift/lib/webrtc/src/peerConnection.js:798:32
    at Array.map (<anonymous>)
    at RTCPeerConnection.connect (/Users/tpotma/Source/webrtctest/node_modules/werift/lib/webrtc/src/peerConnection.js:796:47)
    at RTCPeerConnection.setRemoteDescription (/Users/tpotma/Source/webrtctest/node_modules/werift/lib/webrtc/src/peerConnection.js:969:18)
    at doIt (/Users/tpotma/Source/webrtctest/dist/rtc.js:127:14)
    at processTicksAndRejections (node:internal/process/task_queues:96:5) +0ms
  werift:packages/webrtc/src/peerConnection.ts connectionStateChange failed +0ms
  werift:packages/webrtc/src/peerConnection.ts iceConnectionStateChange completed +26ms
  werift:packages/webrtc/src/peerConnection.ts iceGatheringStateChange complete +0ms
answer applied
    Last message repeated 1 times
[sdp @ 0x122704080] Could not find codec parameters for stream 1 (Video: h264, 1 reference frame, none): unspecified size
Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options

Input #0, sdp, from '/Users/tpotma/Source/webrtctest/src/ffmpeg.sdp':
  Metadata:
    title           : -
  Duration: N/A, bitrate: N/A
  Stream #0:0: Audio: opus, 48000 Hz, stereo, fltp
  Stream #0:1: Video: h264, 1 reference frame, none, 90k tbr, 90k tbn

Stream mapping:
  Stream #0:0 -> #0:0 (opus (native) -> opus (libopus))
Press [q] to stop, [?] for help

/Users/tpotma/Source/webrtctest/src/ffmpeg.sdp: Operation timed out

[graph_0_in_0_0 @ 0x6000006b8160] tb:1/48000 samplefmt:fltp samplerate:48000 chlayout:0x3

[format_out_0_0 @ 0x6000006b82c0] auto-inserting filter 'auto_aresample_0' between the filter 'Parsed_anull_0' and the filter 'format_out_0_0'

[auto_aresample_0 @ 0x6000006a4000] ch:2 chl:stereo fmt:fltp r:48000Hz -> ch:2 chl:stereo fmt:flt r:48000Hz

[libopus @ 0x123805cd0] No bit rate set. Defaulting to 96000 bps.

Output #0, matroska, to '/users/tpotma/Desktop/output.mkv':
  Metadata:
    title           : 
-
    encoder         : Lavf59.16.100
  Stream #0:0: Audio: opus ([255][255][255][255] / 0xFFFFFFFF), 48000 Hz, stereo, flt, delay 312, 96 kb/s
    Metadata:
      encoder         : Lavc59.18.100 libopus

No more output streams to write to, finishing.peed=   0x    
size=       1kB time=00:00:00.00 bitrate=N/A speed=   0x    
video:0kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
Input file #0 (/Users/tpotma/Source/webrtctest/src/ffmpeg.sdp):
  Input stream #0:0 (audio): 
0 packets read (0 bytes); 0 frames decoded (0 samples); 
  Input stream #0:1 (video): 0 packets read (0 bytes); 
  Total: 0 packets (0 bytes) demuxed
Output file #0 (/users/tpotma/Desktop/output.mkv):
  Output stream #0:0 (audio): 0 frames encoded (0 samples); 0 packets muxed (0 bytes); 
  Total: 0 packets (0 bytes) muxed
[AVIOContext @ 0x123805120] Statistics: 575 bytes written, 0 seeks, 1 writeouts

[AVIOContext @ 0x122704300] Statistics: 398 bytes read, 0 seeks

FFmpeg exited with code: 0 and signal: null (Error)

Looks like maybe something with ICE? In the documentation Google says that trickle ICE is supported but not required, perhaps simply turning it off?

Hi @shinyoshiaki, any updates?

I did not specifically investigate this.

I just looked at the logs and I think the major difference between v18 and v14 is that three iceTransports are created. I think this is due to the processing of the transport bundle introduced in v15. #195

When creating a RTCPeerConnection in werift, please let me know if the following setting in the constructor changes anything. {bundlePolicy: "max-bundle"}

Hi @shinyoshiaki, while the process seems to get further along, it still errors out. After the last "ice" error below ffmpeg still errors out trying to read the stream, saying there's nothing there.

Note that here I am using version 0.18.5

  werift:packages/webrtc/src/utils.ts iceOptions {
  stunServer: [ 'stun.l.google.com', 19302 ],
  turnServer: undefined,
  turnUsername: undefined,
  turnPassword: undefined
} +0ms
(node:9929) ExperimentalWarning: stream/web is an experimental feature. This feature could change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
  werift:packages/webrtc/src/peerConnection.ts signalingStateChange have-local-offer +0ms
  werift:packages/webrtc/src/peerConnection.ts iceGatheringStateChange gathering +0ms
ffmpeg version 5.0.1-5.0.1 Copyright (c) 2000-2022 the FFmpeg developers
  built with Apple clang version 13.1.6 (clang-1316.0.21.2.5)
  configuration: --enable-videotoolbox --enable-nonfree --enable-gpl --enable-openssl --enable-libx264 --enable-libx265 --enable-libvpx --enable-libxvid --enable-libvidstab --enable-libaom --enable-libzimg --enable-lv2 --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libtheora --enable-libfdk-aac --enable-libsrt --enable-libspeex --disable-debug --disable-doc --disable-shared --enable-pthreads --enable-static --enable-small --enable-version3 --extra-cflags='-I/Users/Shared/ffmpeg-for-homebridge/workspace/include -I/Users/Shared/ffmpeg-for-homebridge/workspace/include/lilv-0' --extra-ldexeflags= --extra-ldflags=-L/Users/Shared/ffmpeg-for-homebridge/workspace/lib --extra-libs='-ldl -lpthread -lm -lz' --pkgconfigdir=/Users/Shared/ffmpeg-for-homebridge/workspace/lib/pkgconfig --pkg-config-flags=--static --prefix=/Users/Shared/ffmpeg-for-homebridge/workspace --extra-version=5.0.1
  libavutil      57. 17.100 / 57. 17.100
  libavcodec     59. 18.100 / 59. 18.100
  libavformat    59. 16.100 / 59. 16.100
  libavdevice    59.  4.100 / 59.  4.100
  libavfilter     8. 24.100 /  8. 24.100
  libswscale      6.  4.100 /  6.  4.100
  libswresample   4.  3.100 /  4.  3.100
  libpostproc    56.  3.100 / 56.  3.100
[sdp @ 0x12df04080] setting jitter buffer size to 500

  werift:packages/webrtc/src/peerConnection.ts iceConnectionStateChange completed +46ms
  werift:packages/webrtc/src/peerConnection.ts iceGatheringStateChange complete +0ms
  werift:packages/webrtc/src/peerConnection.ts negotiated codecs [
  RTCRtpCodecParameters {
    payloadType: 96,
    mimeType: 'audio/opus',
    clockRate: 48000,
    channels: 2,
    rtcpFeedback: [],
    parameters: 'minptime=10;useinbandfec=1',
    direction: 'all'
  }
] +1s
  werift:packages/webrtc/src/media/router.ts registerRtpReceiverBySsrc {
  muxId: '0',
  rtcp: undefined,
  codecs: [
    RTCRtpCodecParameters {
      payloadType: 96,
      mimeType: 'audio/opus',
      clockRate: 48000,
      channels: 2,
      rtcpFeedback: [],
      parameters: 'minptime=10;useinbandfec=1',
      direction: 'all'
    }
  ],
  headerExtensions: [],
  encodings: [
    RTCRtpCodingParameters {
      ssrc: 6666,
      payloadType: 96,
      rtx: undefined
    }
  ]
} +0ms
  werift:packages/webrtc/src/media/router.ts registerRtpReceiver 6666 +1ms
  werift-ice : packages/ice/src/ice.ts : log setRemoteParams {
  iceLite: true,
  usernameFragment: 'Lydphr8nRzJ6RwoKWigaIAEQABgHARIFCJI',
  password: 'JC6+VMDLN7FSRHY5UH4NWXGH'
} +0ms
  werift-ice : packages/ice/src/ice.ts : log addRemoteCandidate Candidate {
  foundation: '',
  component: 1,
  transport: 'udp',
  priority: 2113939711,
  host: '2607:f8b0:4023:1401::7f',
  port: 19305,
  type: 'host',
  relatedAddress: undefined,
  relatedPort: undefined,
  tcptype: undefined,
  generation: undefined
} +0ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '2607:f8b0:4023:1401::7f', 19305 ] } WAITING +1ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '2607:f8b0:4023:1401::7f', 19305 ] } WAITING +0ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '2607:f8b0:4023:1401::7f', 19305 ] } WAITING +0ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '2607:f8b0:4023:1401::7f', 19305 ] } WAITING +1ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '2607:f8b0:4023:1401::7f', 19305 ] } WAITING +0ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '2607:f8b0:4023:1401::7f', 19305 ] } WAITING +1ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '2607:f8b0:4023:1401::7f', 19305 ] } WAITING +0ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '2607:f8b0:4023:1401::7f', 19305 ] } WAITING +0ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '2607:f8b0:4023:1401::7f', 19305 ] } WAITING +1ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '2607:f8b0:4023:1401::7f', 19305 ] } WAITING +0ms
  werift-ice : packages/ice/src/ice.ts : log addRemoteCandidate Candidate {
  foundation: '',
  component: 1,
  transport: 'tcp',
  priority: 2113939710,
  host: '2607:f8b0:4023:1401::7f',
  port: 19305,
  type: 'host',
  relatedAddress: undefined,
  relatedPort: undefined,
  tcptype: 'passive',
  generation: undefined
} +0ms
  werift-ice : packages/ice/src/ice.ts : log addRemoteCandidate Candidate {
  foundation: '',
  component: 1,
  transport: 'ssltcp',
  priority: 2113939709,
  host: '2607:f8b0:4023:1401::7f',
  port: 443,
  type: 'host',
  relatedAddress: undefined,
  relatedPort: undefined,
  tcptype: undefined,
  generation: undefined
} +0ms
  werift-ice : packages/ice/src/ice.ts : log addRemoteCandidate Candidate {
  foundation: '',
  component: 1,
  transport: 'udp',
  priority: 2113932031,
  host: '142.250.111.127',
  port: 19305,
  type: 'host',
  relatedAddress: undefined,
  relatedPort: undefined,
  tcptype: undefined,
  generation: undefined
} +1ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '142.250.111.127', 19305 ] } WAITING +0ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '142.250.111.127', 19305 ] } WAITING +0ms
  werift-ice : packages/ice/src/ice.ts : log addRemoteCandidate Candidate {
  foundation: '',
  component: 1,
  transport: 'tcp',
  priority: 2113932030,
  host: '142.250.111.127',
  port: 19305,
  type: 'host',
  relatedAddress: undefined,
  relatedPort: undefined,
  tcptype: 'passive',
  generation: undefined
} +0ms
  werift-ice : packages/ice/src/ice.ts : log addRemoteCandidate Candidate {
  foundation: '',
  component: 1,
  transport: 'ssltcp',
  priority: 2113932029,
  host: '142.250.111.127',
  port: 443,
  type: 'host',
  relatedAddress: undefined,
  relatedPort: undefined,
  tcptype: undefined,
  generation: undefined
} +1ms
  werift:packages/webrtc/src/peerConnection.ts negotiated codecs [
  RTCRtpCodecParameters {
    payloadType: 97,
    mimeType: 'video/H264',
    clockRate: 90000,
    channels: undefined,
    rtcpFeedback: [
      [RTCRtcpFeedback],
      [RTCRtcpFeedback],
      [RTCRtcpFeedback],
      [RTCRtcpFeedback]
    ],
    parameters: 'level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f',
    direction: 'all'
  }
] +9ms
  werift:packages/webrtc/src/media/router.ts registerRtpReceiverBySsrc {
  muxId: '1',
  rtcp: undefined,
  codecs: [
    RTCRtpCodecParameters {
      payloadType: 97,
      mimeType: 'video/H264',
      clockRate: 90000,
      channels: undefined,
      rtcpFeedback: [Array],
      parameters: 'level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f',
      direction: 'all'
    }
  ],
  headerExtensions: [],
  encodings: [
    RTCRtpCodingParameters {
      ssrc: 3212739396,
      payloadType: 97,
      rtx: undefined
    }
  ]
} +7ms
  werift:packages/webrtc/src/media/router.ts registerRtpReceiver 3212739396 +0ms
  werift-ice : packages/ice/src/ice.ts : log setRemoteParams {
  iceLite: true,
  usernameFragment: 'Lydphr8nRzJ6RwoKWigaIAEQABgHARIFCJI',
  password: 'JC6+VMDLN7FSRHY5UH4NWXGH'
} +1ms
  werift-ice : packages/ice/src/ice.ts : log setRemoteParams {
  iceLite: true,
  usernameFragment: 'Lydphr8nRzJ6RwoKWigaIAEQABgHARIFCJI',
  password: 'JC6+VMDLN7FSRHY5UH4NWXGH'
} +0ms
  werift:packages/webrtc/src/peerConnection.ts signalingStateChange stable +1ms
  werift:packages/webrtc/src/peerConnection.ts caller start connect +0ms
  werift:packages/webrtc/src/peerConnection.ts start connect +0ms
  werift:packages/webrtc/src/peerConnection.ts connectionStateChange connecting +0ms
  werift:packages/webrtc/src/peerConnection.ts iceConnectionStateChange checking +0ms
  werift-ice : packages/ice/src/ice.ts : log start connect ice [
  Candidate {
    foundation: '7b5a76d27134cc2d986b9fd4b',
    component: 1,
    transport: 'udp',
    priority: 2130706431,
    host: '192.168.2.115',
    port: 55150,
    type: 'host',
    relatedAddress: undefined,
    relatedPort: undefined,
    tcptype: undefined,
    generation: undefined
  },
  Candidate {
    foundation: '2b300d088e549faab7d69221d',
    component: 1,
    transport: 'udp',
    priority: 2130706431,
    host: '192.168.2.120',
    port: 63700,
    type: 'host',
    relatedAddress: undefined,
    relatedPort: undefined,
    tcptype: undefined,
    generation: undefined
  },
  Candidate {
    foundation: 'c4916d2b15522303f58de9e42',
    component: 1,
    transport: 'udp',
    priority: 2130706431,
    host: 'fe80::44f6:1aff:fe59:4d54',
    port: 57698,
    type: 'host',
    relatedAddress: undefined,
    relatedPort: undefined,
    tcptype: undefined,
    generation: undefined
  },
  Candidate {
    foundation: '60b713f9270fe969b3250f232',
    component: 1,
    transport: 'udp',
    priority: 2130706431,
    host: 'fe80::44f6:1aff:fe59:4d55',
    port: 59483,
    type: 'host',
    relatedAddress: undefined,
    relatedPort: undefined,
    tcptype: undefined,
    generation: undefined
  },
  Candidate {
    foundation: '44cc93593bf57942fac4dcdda',
    component: 1,
    transport: 'udp',
    priority: 2130706431,
    host: 'fe80::44f6:1aff:fe59:4d56',
    port: 54831,
    type: 'host',
    relatedAddress: undefined,
    relatedPort: undefined,
    tcptype: undefined,
    generation: undefined
  },
  Candidate {
    foundation: 'e82ecae915376c44995f42787',
    component: 1,
    transport: 'udp',
    priority: 2130706431,
    host: 'fe80::f4d4:88ff:fe81:c580',
    port: 63469,
    type: 'host',
    relatedAddress: undefined,
    relatedPort: undefined,
    tcptype: undefined,
    generation: undefined
  },
  Candidate {
    foundation: '1b2c5d72ebbb7c1b49276fe9a',
    component: 1,
    transport: 'udp',
    priority: 2130706431,
    host: 'fe80::74ec:2bff:fe52:a210',
    port: 52103,
    type: 'host',
    relatedAddress: undefined,
    relatedPort: undefined,
    tcptype: undefined,
    generation: undefined
  },
  Candidate {
    foundation: '208558dc38a9683dacba52f97',
    component: 1,
    transport: 'udp',
    priority: 2130706431,
    host: 'fe80::186a:3fec:5f9a:8709',
    port: 55878,
    type: 'host',
    relatedAddress: undefined,
    relatedPort: undefined,
    tcptype: undefined,
    generation: undefined
  },
  Candidate {
    foundation: 'd3d787f1b50b6426fd47c2225',
    component: 1,
    transport: 'udp',
    priority: 2130706431,
    host: 'fd8b:bab4:12ae:498f:1cdb:7b09:5f3b:9f90',
    port: 52599,
    type: 'host',
    relatedAddress: undefined,
    relatedPort: undefined,
    tcptype: undefined,
    generation: undefined
  },
  Candidate {
    foundation: 'f3a7c99f6565735ddd070ba77',
    component: 1,
    transport: 'udp',
    priority: 2130706431,
    host: 'fe80::1862:788a:574c:db55',
    port: 63012,
    type: 'host',
    relatedAddress: undefined,
    relatedPort: undefined,
    tcptype: undefined,
    generation: undefined
  },
  Candidate {
    foundation: 'b48559bc5000fa76f022b2b28',
    component: 1,
    transport: 'udp',
    priority: 2130706431,
    host: 'fd8b:bab4:12ae:498f:10fd:619d:5873:2279',
    port: 53698,
    type: 'host',
    relatedAddress: undefined,
    relatedPort: undefined,
    tcptype: undefined,
    generation: undefined
  },
  Candidate {
    foundation: '1b2c5d72ebbb7c1b49276fe9a',
    component: 1,
    transport: 'udp',
    priority: 2130706431,
    host: 'fe80::74ec:2bff:fe52:a210',
    port: 55752,
    type: 'host',
    relatedAddress: undefined,
    relatedPort: undefined,
    tcptype: undefined,
    generation: undefined
  },
  Candidate {
    foundation: 'f3e9524564dc3a2e1ba790ab4',
    component: 1,
    transport: 'udp',
    priority: 1694498815,
    host: '142.114.65.73',
    port: 55150,
    type: 'srflx',
    relatedAddress: '192.168.2.115',
    relatedPort: 55150,
    tcptype: undefined,
    generation: undefined
  },
  Candidate {
    foundation: '43353eb67d55c759eb9a197f8',
    component: 1,
    transport: 'udp',
    priority: 1694498815,
    host: '142.114.65.73',
    port: 63700,
    type: 'srflx',
    relatedAddress: '192.168.2.120',
    relatedPort: 63700,
    tcptype: undefined,
    generation: undefined
  }
] +0ms
  werift-ice : packages/ice/src/ice.ts : log check start { protocol: 'stun', remoteAddr: [ '142.250.111.127', 19305 ] } +3ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '142.250.111.127', 19305 ] } IN_PROGRESS +0ms
answer applied
  werift-ice : packages/ice/src/ice.ts : log check start { protocol: 'stun', remoteAddr: [ '142.250.111.127', 19305 ] } +24ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '142.250.111.127', 19305 ] } IN_PROGRESS +0ms
  werift-ice : packages/ice/src/ice.ts : log response Message {
  attributes: [
    [ 'XOR-MAPPED-ADDRESS', [Array] ],
    [
      'MESSAGE-INTEGRITY',
      <Buffer 34 6d 3b 17 0c 69 55 9b 91 0d b5 c9 71 47 74 81 83 a7 95 52>
    ],
    [ 'FINGERPRINT', 3417060885 ]
  ],
  messageMethod: 1,
  messageClass: 256,
  transactionId: <Buffer 1e d4 89 dc 24 93 a9 9a c6 61 72 97>
} [ '142.250.111.127', 19305 ] +5ms
  werift-ice : packages/ice/src/ice.ts : log check start { protocol: 'stun', remoteAddr: [ '2607:f8b0:4023:1401::7f', 19305 ] } +16ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '2607:f8b0:4023:1401::7f', 19305 ] } IN_PROGRESS +0ms
  werift-ice : packages/ice/src/ice.ts : log response Message {
  attributes: [
    [ 'XOR-MAPPED-ADDRESS', [Array] ],
    [
      'MESSAGE-INTEGRITY',
      <Buffer 96 99 59 fc d6 d4 3e 4e d9 8b 2c 9c b9 47 1f 23 d6 4a 51 78>
    ],
    [ 'FINGERPRINT', 3444483037 ]
  ],
  messageMethod: 1,
  messageClass: 256,
  transactionId: <Buffer d6 35 16 7a 8e f3 e6 81 b6 40 4e 39>
} [ '142.250.111.127', 19305 ] +7ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '142.250.111.127', 19305 ] } SUCCEEDED +1ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '142.250.111.127', 19305 ] } SUCCEEDED +2ms
  werift-ice : packages/ice/src/ice.ts : log nominated { protocol: 'stun', remoteAddr: [ '142.250.111.127', 19305 ] } +0ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '2607:f8b0:4023:1401::7f', 19305 ] } FAILED +0ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '2607:f8b0:4023:1401::7f', 19305 ] } FAILED +0ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '2607:f8b0:4023:1401::7f', 19305 ] } FAILED +0ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '2607:f8b0:4023:1401::7f', 19305 ] } FAILED +0ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '2607:f8b0:4023:1401::7f', 19305 ] } FAILED +0ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '2607:f8b0:4023:1401::7f', 19305 ] } FAILED +0ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '2607:f8b0:4023:1401::7f', 19305 ] } FAILED +0ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '2607:f8b0:4023:1401::7f', 19305 ] } FAILED +0ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '2607:f8b0:4023:1401::7f', 19305 ] } FAILED +0ms
  werift-ice : packages/ice/src/ice.ts : log ICE completed +0ms
  werift:packages/webrtc/src/peerConnection.ts iceConnectionStateChange connected +70ms
  werift-dtls : packages/dtls/src/socket.ts : log  support srtpProfiles [ 7, 1 ] +0ms
  werift-dtls : packages/dtls/src/client.ts : log  start client +0ms
  werift-ice:packages/ice/src/transport.ts send error [ '2607:f8b0:4023:1401::7f', 19305 ] <Buffer 00 01 00 60 21 12 a4 42 af 3b 06 61 e6 6a 97 8f 14 91 b0 76 00 06 00 28 4c 79 64 70 68 72 38 6e 52 7a 4a 36 52 77 6f 4b 57 69 67 61 49 41 45 51 41 42 ... 66 more bytes> +0ms
  werift-dtls : packages/dtls/src/client.ts : log  handleHandshakes [ 2 ] +129ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  serverHello 49199 +0ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  selected cipherSuite 49199 +0ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  RenegotiationIndication +0ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  selected srtp profile 1 +1ms
  werift-dtls : packages/dtls/src/client.ts : log  handleHandshakes [ 11 ] +1ms
  werift-dtls : packages/dtls/src/client.ts : log  handleHandshakes [ 12 ] +0ms
  werift-dtls : packages/dtls/src/client.ts : log  handleHandshakes [] +0ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  handshake certificate Certificate {
  certificateList: [
    <Buffer 30 82 03 00 30 82 01 e8 a0 03 02 01 02 02 09 00 e5 e6 89 2d 65 48 97 f7 30 0d 06 09 2a 86 48 86 f7 0d 01 01 0b 05 00 30 13 31 11 30 0f 06 03 55 04 03 ... 722 more bytes>
  ],
  msgType: 11,
  messageSeq: undefined
} +0ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  ServerKeyExchange ServerKeyExchange {
  ellipticCurveType: 3,
  namedCurve: 29,
  publicKeyLength: 32,
  publicKey: <Buffer 5e dd b3 77 90 97 55 48 66 f2 5c 14 e2 ba 74 0b 0c e3 95 50 b9 9f 0c 74 84 84 9e b4 a8 69 b3 77>,
  hashAlgorithm: 4,
  signatureAlgorithm: 1,
  signatureLength: 256,
  signature: <Buffer a9 dd f0 7c 7e 0f cc 2f 72 c4 69 9d 44 2c eb 5a 49 2b a3 71 d3 bc ba 6e de bd 21 3e 08 5f 22 de 47 00 e8 30 a2 68 b6 1e 8c 17 bb ab 28 1a 2e f0 dd 19 ... 206 more bytes>,
  msgType: 12,
  messageSeq: undefined
} +1ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  selected curve 29 +0ms
  werift-dtls : packages/dtls/src/client.ts : log  handleHandshakes [ 13 ] +15ms
  werift-dtls : packages/dtls/src/client.ts : log  handleHandshakes [ 14 ] +1ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  certificate_request ServerCertificateRequest {
  certificateTypes: [ 1, 64 ],
  signatures: [
    [Object: null prototype] { hash: 4, signature: 3 },
    [Object: null prototype] { hash: 8, signature: 4 },
    [Object: null prototype] { hash: 4, signature: 1 },
    [Object: null prototype] { hash: 5, signature: 3 },
    [Object: null prototype] { hash: 8, signature: 5 },
    [Object: null prototype] { hash: 5, signature: 1 },
    [Object: null prototype] { hash: 8, signature: 6 },
    [Object: null prototype] { hash: 6, signature: 1 },
    [Object: null prototype] { hash: 2, signature: 1 }
  ],
  authorities: [],
  msgType: 13,
  messageSeq: undefined
} +15ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  server_hello_done ServerHelloDone { msgType: 14, messageSeq: undefined } +0ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  send flight5 true +0ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  extendedMasterSecret true true +2ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  cipher {
  id: 49199,
  name: 'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256',
  hashAlgorithm: 'sha256',
  verifyDataLength: 12,
  blockAlgorithm: 'aes-128-gcm',
  keyLength: 16,
  nonceLength: 12,
  ivLength: 4,
  authTagLength: 16,
  nonceImplicitLength: 4,
  nonceExplicitLength: 8,
  clientWriteKey: '0x6e,0x3e,0x47,0x50,0xc2,0x2a,0xef,0xc6,0xa4,0x73,0x66,0x24,0x93,0x35,0x41,0x8c',
  serverWriteKey: '0xdf,0xdb,0x1a,0x08,0xee,0xf6,0xa8,0x17,0xc8,0x42,0x72,0x72,0x70,0x7f,0xfe,0xe0',
  clientNonce: '0x09,0xf7,0xff,0xf1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00',
  serverNonce: '0xfe,0x51,0x14,0xd9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00'
} +1ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  signatureScheme 3 1027 +0ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  raw finish packet {
  header: {
    contentType: 22,
    protocolVersion: { major: 254, minor: 253 },
    epoch: 1,
    sequenceNumber: 6,
    contentLen: 24
  },
  fragment: '0x14,0x00,0x00,0x0c,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x0c,0x94,0xe4,0x75,0xa8,0x2e,0x18,0xf5,0x93,0x7b,0x63,0xca,0x53'
} [
  {
    msg_type: 1,
    length: 86,
    message_seq: 0,
    fragment_offset: 0,
    fragment_length: 86,
    fragment: '0xfe,0xfd,0x65,0x01,0xbb,0x75,0x36,0xdf,0x02,0xba,0x14,0x56,0x5b,0xb1,0x0f,0xf0,0xac,0x15,0x8e,0xaf,0xb6,0x66,0xc7,0x3c,0x36,0x33,0x0f,0xee,0x7e,0x76,0x08,0x52,0x6a,0x43,0x00,0x00,0x00,0x04,0xc0,0x2b,0xc0,0x2f,0x01,0x00,0x00,0x28,0x00,0x0e,0x00,0x07,0x00,0x04,0x00,0x07,0x00,0x01,0x00,0x00,0x0a,0x00,0x06,0x00,0x04,0x00,0x1d,0x00,0x17,0x00,0x0d,0x00,0x06,0x00,0x04,0x04,0x01,0x04,0x03,0x00,0x17,0x00,0x00,0xff,0x01,0x00,0x01,0x00'
  },
  {
    msg_type: 2,
    length: 90,
    message_seq: 0,
    fragment_offset: 0,
    fragment_length: 90,
    fragment: '0xfe,0xfd,0x65,0x01,0xbb,0x75,0x51,0xaa,0x1c,0x8e,0xd0,0xcd,0x2a,0xa3,0x43,0x64,0xce,0xd5,0x9d,0x31,0x03,0xf3,0xbd,0xda,0x36,0x36,0x25,0x7d,0x6b,0x5f,0x1e,0xa4,0xb5,0xac,0x20,0x25,0x8c,0x07,0x74,0x17,0x87,0xfb,0xed,0x51,0x41,0x00,0xc1,0xed,0x1b,0x14,0x97,0xdb,0x6b,0xc9,0x1e,0x0a,0x24,0x1c,0x71,0xe5,0xba,0x84,0x19,0x6a,0xd4,0x8f,0xe8,0xc0,0x2f,0x00,0x00,0x12,0x00,0x17,0x00,0x00,0xff,0x01,0x00,0x01,0x00,0x00,0x0e,0x00,0x05,0x00,0x02,0x00,0x01,0x00'
  },
  {
    msg_type: 11,
    length: 778,
    message_seq: 1,
    fragment_offset: 0,
    fragment_length: 778,
    fragment: '0x00,0x03,0x07,0x00,0x03,0x04,0x30,0x82,0x03,0x00,0x30,0x82,0x01,0xe8,0xa0,0x03,0x02,0x01,0x02,0x02,0x09,0x00,0xe5,0xe6,0x89,0x2d,0x65,0x48,0x97,0xf7,0x30,0x0d,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,0x01,0x0b,0x05,0x00,0x30,0x13,0x31,0x11,0x30,0x0f,0x06,0x03,0x55,0x04,0x03,0x13,0x08,0x68,0x61,0x6e,0x67,0x6f,0x75,0x74,0x73,0x30,0x1e,0x17,0x0d,0x32,0x33,0x30,0x39,0x31,0x31,0x30,0x38,0x34,0x32,0x33,0x36,0x5a,0x17,0x0d,0x32,0x34,0x30,0x39,0x31,0x31,0x30,0x38,0x34,0x32,0x33,0x36,0x5a,0x30,0x13,0x31,0x11,0x30,0x0f,0x06,0x03,0x55,0x04,0x03,0x13,0x08,0x68,0x61,0x6e,0x67,0x6f,0x75,0x74,0x73,0x30,0x82,0x01,0x22,0x30,0x0d,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,0x01,0x01,0x05,0x00,0x03,0x82,0x01,0x0f,0x00,0x30,0x82,0x01,0x0a,0x02,0x82,0x01,0x01,0x00,0xec,0x80,0x7b,0x55,0xe6,0x3e,0xba,0x81,0xfe,0x51,0x7f,0xb6,0x33,0xf8,0xb1,0x17,0x68,0x52,0x12,0x5b,0x86,0x44,0x61,0x81,0x96,0x08,0x9d,0x2d,0x39,0x40,0x8d,0xd1,0x75,0x91,0x99,0xc8,0xa1,0xd9,0x91,0x01,0x7e,0x15,0xe0,0x1d,0xc9,0x68,0x96,0x65,0x77,0x16,0x0b,0xd0,0x37,0x5d,0x16,0xd3,0xef,0x06,0x76,0x48,0x92,0x55,0x6f,0x72,0x3d,0xb0,0x69,0xe5,0xab,0x0f,0x17,0x10,0xf8,0x36,0xae,0xe2,0xba,0x4c,0x99,0xaa,0xdd,0x22,0x99,0x35,0x10,0xd3,0xc4,0x1a,0x53,0x97,0xd0,0x17,0x29,0x99,0xb3,0x48,0xbb,0x99,0x66,0xbc,0xb9,0x46,0x71,0xf9,0xec,0x6b,0xfb,0x74,0x62,0x4f,0x70,0xf5,0xb2,0x73,0xb9,0x23,0xff,0x04,0x72,0x3f,0x77,0x59,0x24,0x4f,0x86,0xb6,0x60,0x0e,0x59,0x41,0x38,0xcd,0x42,0x15,0xb6,0x13,0x1b,0xb3,0x40,0x0b,0x0f,0xc4,0x20,0x36,0x2d,0xd8,0xb0,0xf8,0x8a,0xa0,0x21,0x03,0x98,0xa3,0xfa,0xaa,0x85,0x94,0xe7,0x7f,0x8a,0x5f,0x31,0x73,0x6b,0xdf,0xfe,0xa0,0xdb,0x03,0x88,0xa4,0x7d,0xdb,0x6e,0x0c,0x52,0x79,0x0c,0x1c,0xfa,0x4a,0x7d,0x69,0xe7,0x33,0xca,0xc6,0x97,0xba,0xd2,0xcb,0x48,0x58,0x82,0xa9,0x27,0x6a,0xe4,0x4c,0x26,0x79,0xb9,0xb9,0xc8,0xc3,0x34,0x0f,0x66,0x12,0x95,0x2c,0x33,0x9a,0x68,0x56,0xbc,0x40,0x36,0x3f,0xf2,0x68,0x43,0x1b,0x1c,0x50,0x2b,0x78,0xc6,0x88,0x97,0x84,0xeb,0x76,0xfe,0xb9,0x94,0x67,0x5c,0x34,0x8c,0x8a,0xb5,0x45,0x78,0xec,0xbb,0x3a,0x15,0x1d,0x6f,0x83,0xb8,0x8e,0x0a,0x47,0x02,0x03,0x01,0x00,0x01,0xa3,0x57,0x30,0x55,0x30,0x0e,0x06,0x03,0x55,0x1d,0x0f,0x01,0x01,0xff,0x04,0x04,0x03,0x02,0x02,0x84,0x30,0x13,0x06,0x03,0x55,0x1d,0x25,0x04,0x0c,0x30,0x0a,0x06,0x08,0x2b,0x06,0x01,0x05,0x05,0x07,0x03,0x01,0x30,0x0f,0x06,0x03,0x55,0x1d,0x13,0x01,0x01,0xff,0x04,0x05,0x30,0x03,0x01,0x01,0xff,0x30,0x1d,0x06,0x03,0x55,0x1d,0x0e,0x04,0x16,0x04,0x14,0x8a,0x83,0xb3,0x1c,0x23,0xe4,0x9c,0xdd,0xdf,0x0b,0x65,0xea,0xe0,0x89,0x39,0x05,0x26,0x1b,0x34,0x18,0x30,0x0d,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,0x01,0x0b,0x05,0x00,0x03,0x82,0x01,0x01,0x00,0x83,0x74,0xc8,0x82,0x77,0xdc,0x6e,0x50,0x16,0x9d,0x7c,0x8f,0xf8,0x45,0x7b,0x30,0xce,0x4f,0x19,0xf9,0x34,0x5a,0x54,0x27,0x1d,0x37,0x87,0x70,0x63,0x95,0x5d,0x7e,0x8b,0xcb,0x93,0x5a,0xe7,0x9b,0x6a,0x5a,0xc5,0x44,0x33,0x11,0x60,0x21,0x10,0x24,0x03,0x53,0x0e,0xb5,0x52,0xbd,0x07,0x19,0xd3,0x18,0xb1,0x6c,0xff,0x32,0xfc,0xe4,0x2c,0xbc,0xe2,0xa9,0xf1,0xdf,0x00,0x8f,0x0d,0x3a,0x50,0x21,0x06,0x4f,0x1a,0x7b,0xa4,0x7d,0x33,0xd1,0x1f,0xdf,0x31,0xf9,0x22,0x74,0xdc,0x7f,0x5d,0xfc,0xc3,0x2f,0xa0,0x1b,0x2a,0xd0,0x4f,0x5b,0x3d,0xac,0x06,0x17,0x39,0x01,0xbf,0xf0,0xe2,0xfc,0x60,0xe7,0x1a,0x1c,0x32,0x41,0x8a,0x39,0xaf,0x19,0xdf,0xa2,0x5a,0x46,0x3a,0x8d,0xf2,0x16,0xf7,0xcb,0x7d,0x93,0x08,0x92,0x70,0xfa,0x45,0x20,0x77,0xc5,0x42,0xce,0x79,0xba,0x95,0xbb,0x79,0x8b,0x87,0xe2,0x85,0x81,0xc8,0x52,0x3a,0x20,0xb3,0xaf,0x21,0xf2,0x25,0xb7,0x1c,0x19,0xd3,0x8c,0x0c,0x81,0x54,0x89,0xa1,0xb2,0x0d,0xd8,0x5d,0x9a,0x3a,0x1a,0x73,0x68,0x02,0x8b,0xf9,0x6b,0x74,0x00,0x53,0x32,0x1c,0xee,0xf1,0x34,0xe6,0xc2,0x1b,0x36,0x8a,0xb3,0x2a,0x5e,0x3c,0x7c,0xe2,0xae,0xe0,0xf8,0xbc,0x58,0x3e,0x60,0x9d,0xfd,0x8a,0xcc,0x3a,0x2d,0xc3,0xbb,0x68,0xdf,0x01,0x54,0x07,0x96,0x48,0x22,0xb3,0xdc,0x2c,0x9e,0xc0,0x73,0x89,0x85,0xda,0x94,0x9b,0x7a,0xce,0x71,0x1c,0xc4,0x92,0x9d,0x82,0x7e,0xfd,0xb8,0xe2,0x01,0x15,0x0d,0x5f,0x05'
  },
  {
    msg_type: 12,
    length: 296,
    message_seq: 2,
    fragment_offset: 0,
    fragment_length: 296,
    fragment: '0x03,0x00,0x1d,0x20,0x5e,0xdd,0xb3,0x77,0x90,0x97,0x55,0x48,0x66,0xf2,0x5c,0x14,0xe2,0xba,0x74,0x0b,0x0c,0xe3,0x95,0x50,0xb9,0x9f,0x0c,0x74,0x84,0x84,0x9e,0xb4,0xa8,0x69,0xb3,0x77,0x04,0x01,0x01,0x00,0xa9,0xdd,0xf0,0x7c,0x7e,0x0f,0xcc,0x2f,0x72,0xc4,0x69,0x9d,0x44,0x2c,0xeb,0x5a,0x49,0x2b,0xa3,0x71,0xd3,0xbc,0xba,0x6e,0xde,0xbd,0x21,0x3e,0x08,0x5f,0x22,0xde,0x47,0x00,0xe8,0x30,0xa2,0x68,0xb6,0x1e,0x8c,0x17,0xbb,0xab,0x28,0x1a,0x2e,0xf0,0xdd,0x19,0x87,0x4e,0xa5,0x05,0x38,0xb4,0x84,0xe2,0xc9,0x65,0xf0,0xe2,0xc5,0x9c,0x26,0xc9,0x65,0x2f,0x17,0xf9,0x2c,0xfb,0x7f,0x34,0xfe,0xe5,0x2b,0x13,0x53,0xc7,0x03,0x9d,0xb7,0x89,0xab,0x61,0x23,0x47,0x51,0x19,0x64,0x45,0x3a,0x75,0xbe,0xa5,0x60,0x98,0xca,0x55,0xa0,0xf3,0x08,0xba,0x41,0x4d,0xf3,0x5e,0x9c,0x48,0xc5,0xf0,0x6c,0x8d,0x83,0xa6,0x00,0x00,0x14,0x12,0x02,0x8d,0x6d,0x20,0x68,0xb7,0x29,0xf2,0xb3,0x92,0x9a,0xde,0xfa,0x57,0xe5,0x47,0x2a,0x0a,0xfa,0x00,0x4f,0xdf,0xe1,0x84,0xbe,0xdb,0xac,0x36,0xcc,0x22,0x73,0x6a,0x18,0x3a,0x16,0xa7,0xb5,0x8a,0x2a,0xd5,0xac,0xa7,0x41,0xb6,0x81,0xf8,0x63,0xda,0x00,0x3e,0x6f,0x9a,0x6d,0x79,0x5a,0xe9,0xb0,0x1d,0x22,0x61,0x73,0xdc,0x57,0xe9,0x72,0x8d,0xb9,0x91,0xf8,0x40,0xbb,0x67,0x89,0x62,0x24,0x3d,0xd9,0x2a,0x78,0x20,0x79,0x59,0x9a,0x8d,0xcd,0x08,0xef,0x29,0xe6,0xd6,0xa6,0x14,0xee,0x01,0x13,0x88,0xcc,0x18,0x86,0x3a,0xf8,0x4b,0xb1,0x5f,0x58,0xaf,0x8f,0xb7,0xfe,0x60,0x1c,0xc3,0xb4,0xbb,0xac,0x87,0x64,0x7b,0xa9,0x9b,0x05,0xf4,0xee,0x38,0x83,0x2d,0x4f,0x12,0x9f,0x5b,0xd1,0x6f,0xfe,0xae,0x47,0xd4'
  },
  {
    msg_type: 13,
    length: 25,
    message_seq: 3,
    fragment_offset: 0,
    fragment_length: 25,
    fragment: '0x02,0x01,0x40,0x00,0x12,0x04,0x03,0x08,0x04,0x04,0x01,0x05,0x03,0x08,0x05,0x05,0x01,0x08,0x06,0x06,0x01,0x02,0x01,0x00,0x00'
  },
  {
    msg_type: 14,
    length: 0,
    message_seq: 4,
    fragment_offset: 0,
    fragment_length: 0,
    fragment: '0x'
  },
  {
    msg_type: 11,
    length: 397,
    message_seq: 1,
    fragment_offset: 0,
    fragment_length: 397,
    fragment: '0x00,0x01,0x8a,0x00,0x01,0x87,0x30,0x82,0x01,0x83,0x30,0x82,0x01,0x28,0xa0,0x03,0x02,0x01,0x02,0x02,0x08,0xe4,0xf0,0x6b,0x60,0x8c,0x84,0x4b,0x03,0x30,0x0a,0x06,0x08,0x2a,0x86,0x48,0xce,0x3d,0x04,0x03,0x02,0x30,0x45,0x31,0x0b,0x30,0x09,0x06,0x03,0x55,0x04,0x06,0x13,0x02,0x41,0x55,0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x08,0x13,0x0a,0x53,0x6f,0x6d,0x65,0x2d,0x53,0x74,0x61,0x74,0x65,0x31,0x21,0x30,0x1f,0x06,0x03,0x55,0x04,0x0a,0x13,0x18,0x49,0x6e,0x74,0x65,0x72,0x6e,0x65,0x74,0x20,0x57,0x69,0x64,0x67,0x69,0x74,0x73,0x20,0x50,0x74,0x79,0x20,0x4c,0x74,0x64,0x30,0x1e,0x17,0x0d,0x32,0x33,0x30,0x39,0x31,0x33,0x31,0x33,0x33,0x39,0x30,0x30,0x5a,0x17,0x0d,0x33,0x33,0x30,0x39,0x31,0x33,0x31,0x33,0x33,0x39,0x30,0x30,0x5a,0x30,0x45,0x31,0x0b,0x30,0x09,0x06,0x03,0x55,0x04,0x06,0x13,0x02,0x41,0x55,0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x08,0x13,0x0a,0x53,0x6f,0x6d,0x65,0x2d,0x53,0x74,0x61,0x74,0x65,0x31,0x21,0x30,0x1f,0x06,0x03,0x55,0x04,0x0a,0x13,0x18,0x49,0x6e,0x74,0x65,0x72,0x6e,0x65,0x74,0x20,0x57,0x69,0x64,0x67,0x69,0x74,0x73,0x20,0x50,0x74,0x79,0x20,0x4c,0x74,0x64,0x30,0x59,0x30,0x13,0x06,0x07,0x2a,0x86,0x48,0xce,0x3d,0x02,0x01,0x06,0x08,0x2a,0x86,0x48,0xce,0x3d,0x03,0x01,0x07,0x03,0x42,0x00,0x04,0x97,0x73,0x19,0x9b,0x66,0xe5,0x62,0x67,0xd3,0xbf,0x2b,0xea,0x90,0xc2,0x2b,0xf1,0xb0,0x0c,0xd6,0x43,0x46,0xe5,0xc0,0xc3,0x9a,0x41,0xdd,0x78,0x16,0x55,0x5d,0xd1,0x90,0x88,0x8a,0x8f,0xfc,0x08,0xfa,0x9c,0x84,0xd8,0x4c,0x9f,0xfe,0x3a,0x94,0xd2,0x81,0x4e,0x80,0x16,0x6e,0x4c,0x27,0x3a,0x3c,0x18,0xe8,0xdc,0x11,0xf5,0xd6,0x3f,0xa3,0x02,0x30,0x00,0x30,0x0a,0x06,0x08,0x2a,0x86,0x48,0xce,0x3d,0x04,0x03,0x02,0x03,0x49,0x00,0x30,0x46,0x02,0x21,0x00,0xf2,0x97,0x48,0xc1,0x66,0xcf,0xc0,0xf3,0x88,0x8b,0x9a,0x13,0xea,0x7f,0x32,0xfb,0x90,0xc3,0xef,0x41,0xe9,0xc9,0xf1,0x16,0x4d,0xa9,0xda,0x70,0x56,0xe6,0xc1,0x4f,0x02,0x21,0x00,0xe3,0xc2,0x08,0x5e,0xe2,0x55,0xe5,0x00,0xf1,0x6b,0x04,0x9b,0xb5,0xf1,0xdb,0x1a,0xb9,0x32,0x0e,0x39,0x3c,0x19,0x24,0x1d,0x34,0x1e,0xae,0xea,0x2b,0x04,0xa2,0x46'
  },
  {
    msg_type: 16,
    length: 33,
    message_seq: 2,
    fragment_offset: 0,
    fragment_length: 33,
    fragment: '0x20,0x68,0x8a,0x63,0x71,0xf3,0xb8,0xee,0x5d,0x1f,0xa5,0x23,0x12,0x70,0x21,0x8e,0x21,0x9e,0x40,0xc4,0x1c,0xb0,0x31,0x47,0x75,0x44,0x46,0x20,0x0e,0xb1,0x21,0x7b,0x43'
  },
  {
    msg_type: 15,
    length: 75,
    message_seq: 3,
    fragment_offset: 0,
    fragment_length: 75,
    fragment: '0x04,0x03,0x00,0x47,0x30,0x45,0x02,0x20,0x43,0xbf,0x8b,0x6e,0x82,0x76,0x3d,0x01,0x10,0xa1,0xee,0xff,0x70,0x96,0xce,0x95,0xb9,0xa4,0x7e,0xe9,0x86,0x0d,0x0f,0x3e,0xdb,0xe2,0x53,0x6d,0x71,0xbe,0x2b,0x93,0x02,0x21,0x00,0x83,0x6e,0x74,0x9c,0x0b,0xb4,0xae,0xb6,0x7c,0xab,0x04,0x11,0x36,0x2e,0x73,0x78,0x34,0x88,0x75,0xd1,0x6a,0xb6,0x16,0x17,0x0f,0xb4,0x3a,0xf1,0x31,0x98,0x4a,0x40'
  },
  {
    msg_type: 20,
    length: 12,
    message_seq: 4,
    fragment_offset: 0,
    fragment_length: 12,
    fragment: '0x94,0xe4,0x75,0xa8,0x2e,0x18,0xf5,0x93,0x7b,0x63,0xca,0x53'
  }
] +1ms
  werift-dtls : packages/dtls/src/flight/client/flight5.ts : log  finished {
  id: 49199,
  name: 'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256',
  hashAlgorithm: 'sha256',
  verifyDataLength: 12,
  blockAlgorithm: 'aes-128-gcm',
  keyLength: 16,
  nonceLength: 12,
  ivLength: 4,
  authTagLength: 16,
  nonceImplicitLength: 4,
  nonceExplicitLength: 8,
  clientWriteKey: '0x6e,0x3e,0x47,0x50,0xc2,0x2a,0xef,0xc6,0xa4,0x73,0x66,0x24,0x93,0x35,0x41,0x8c',
  serverWriteKey: '0xdf,0xdb,0x1a,0x08,0xee,0xf6,0xa8,0x17,0xc8,0x42,0x72,0x72,0x70,0x7f,0xfe,0xe0',
  clientNonce: '0x09,0xf7,0xff,0xf1,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x06',
  serverNonce: '0xfe,0x51,0x14,0xd9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00'
} +2ms
  werift-ice:packages/ice/src/transport.ts send error [ '2607:f8b0:4023:1401::7f', 19305 ] <Buffer 00 01 00 60 21 12 a4 42 af 3b 06 61 e6 6a 97 8f 14 91 b0 76 00 06 00 28 4c 79 64 70 68 72 38 6e 52 7a 4a 36 52 77 6f 4b 57 69 67 61 49 41 45 51 41 42 ... 66 more bytes> +124ms
  werift-dtls : packages/dtls/record/receive.ts : log  change cipher spec +0ms
  werift-dtls : packages/dtls/record/receive.ts : log  decrypt handshake +0ms
  werift-dtls : packages/dtls/src/client.ts : log  handleHandshakes [ 20 ] +30ms
  werift-dtls : packages/dtls/src/client.ts : log  dtls connected +0ms
  werift:packages/webrtc/src/transport/dtls.ts selected SRTP Profile 1 +0ms
  werift:packages/webrtc/src/transport/dtls.ts dtls connected +1ms
  werift/sctp/sctp setConnectionState connecting +0ms
  werift/sctp/sctp send init InitChunk {
  flags: 0,
  _body: <Buffer >,
  initiateTag: 2739913288,
  advertisedRwnd: 1048576,
  outboundStreams: 65535,
  inboundStreams: 65535,
  initialTsn: 1043947092,
  params: [ [ 49152, <Buffer > ], [ 32776, <Buffer c0 82> ] ]
} +0ms
  werift-ice:packages/ice/src/transport.ts send error [ '2607:f8b0:4023:1401::7f', 19305 ] <Buffer 00 01 00 60 21 12 a4 42 af 3b 06 61 e6 6a 97 8f 14 91 b0 76 00 06 00 28 4c 79 64 70 68 72 38 6e 52 7a 4a 36 52 77 6f 4b 57 69 67 61 49 41 45 51 41 42 ... 66 more bytes> +202ms
  werift-ice:packages/ice/src/transport.ts send error [ '2607:f8b0:4023:1401::7f', 19305 ] <Buffer 00 01 00 60 21 12 a4 42 af 3b 06 61 e6 6a 97 8f 14 91 b0 76 00 06 00 28 4c 79 64 70 68 72 38 6e 52 7a 4a 36 52 77 6f 4b 57 69 67 61 49 41 45 51 41 42 ... 66 more bytes> +403ms
  werift-ice:packages/ice/src/stun/transaction.ts retry failed times:5 maxLimit:5 +0ms
  werift-ice : packages/ice/src/ice.ts : log failure case undefined +2s
  werift-ice : packages/ice/src/ice.ts : log CandidatePairState.FAILED { protocol: 'stun', remoteAddr: [ '2607:f8b0:4023:1401::7f', 19305 ] } +1ms
  werift-ice : packages/ice/src/ice.ts : log setPairState { protocol: 'stun', remoteAddr: [ '2607:f8b0:4023:1401::7f', 19305 ] } FAILED +0ms
    Last message repeated 1 times
[sdp @ 0x12df04080] Could not find codec parameters for stream 1 (Video: h264, 1 reference frame, none): unspecified size

@potmat

werift:packages/webrtc/src/transport/dtls.ts dtls connected +1ms

The connection is probably complete at this point.
I need to reproduce the code to investigate the media communication with FFmpeg after that.
Could you please provide a program that outputs this log?

Hi @shinyoshiaki, thanks for responding!

I have a small sample program here that I'm using to get these logs, however it needs to actually connect to Google with the appropriate credentials. If I gave it to someone, that person would have the ability to view all the cameras in my house, or even change the thermostat. I can't think of a way to reproduce the issue without this.

I can send you the code with the credentials removed, you won't be able to run it but can at least see if there's anything obviously wrong.

I'd be happy to jump on a Zoom/Facetime/etc. call and we can debug it together. Though I suspect time zones may make that somewhat difficult as I'm in Toronto and you're in Tokyo.

Let me know your thoughts....

Maybe something to do with the offer? Here's the offer produced by v14 (which works)

v=0
o=- 49835695 0 IN IP4 0.0.0.0
s=-
t=0 0
a=group:BUNDLE 0 1 2
a=extmap-allow-mixed
a=msid-semantic:WMS *
m=audio 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4 0.0.0.0
a=ice-ufrag:be11
a=ice-pwd:a51231d8164e9d578caa09
a=ice-options:trickle
a=fingerprint:sha-256 7A:3B:9F:29:D6:8A:94:94:4F:04:F3:F4:45:CC:D0:1E:F7:95:C6:74:F7:A0:6E:4C:9F:CA:49:01:D6:16:16:96
a=setup:actpass
a=recvonly
a=mid:0
a=msid:cc6a946d-ea43-42cb-892e-2343b9cfad45 07145ad5-f4a9-4a13-a379-e8e044df7b2a
a=rtcp:9 IN IP4 0.0.0.0
a=rtcp-mux
a=ssrc:519217285 cname:f86b34a3-eb71-4d3f-b70e-57b92e682213
a=rtpmap:96 opus/48000/2
m=video 9 UDP/TLS/RTP/SAVPF 97
c=IN IP4 0.0.0.0
a=ice-ufrag:be11
a=ice-pwd:a51231d8164e9d578caa09
a=ice-options:trickle
a=fingerprint:sha-256 7A:3B:9F:29:D6:8A:94:94:4F:04:F3:F4:45:CC:D0:1E:F7:95:C6:74:F7:A0:6E:4C:9F:CA:49:01:D6:16:16:96
a=setup:actpass
a=recvonly
a=mid:1
a=msid:5a2bea5a-331b-498c-ba7f-b65e63308d3c 6b08559e-0f16-4178-9570-4992ee830df8
a=rtcp:9 IN IP4 0.0.0.0
a=rtcp-mux
a=ssrc:326469523 cname:f86b34a3-eb71-4d3f-b70e-57b92e682213
a=rtpmap:97 H264/90000
a=rtcp-fb:97 transport-cc
a=rtcp-fb:97 ccm fir
a=rtcp-fb:97 nack
a=rtcp-fb:97 nack pli
a=rtcp-fb:97 goog-remb
a=fmtp:97 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=ice-ufrag:be11
a=ice-pwd:a51231d8164e9d578caa09
a=ice-options:trickle
a=fingerprint:sha-256 7A:3B:9F:29:D6:8A:94:94:4F:04:F3:F4:45:CC:D0:1E:F7:95:C6:74:F7:A0:6E:4C:9F:CA:49:01:D6:16:16:96
a=setup:actpass
a=mid:2
a=sctp-port:5000
a=max-message-size:65536

Here's the offer produced by v18 (which doesn't):

v=0
o=- 17876461 0 IN IP4 0.0.0.0
s=-
t=0 0
a=group:BUNDLE 0av 1av 0dc
a=extmap-allow-mixed
a=msid-semantic:WMS *
m=audio 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4 0.0.0.0
a=ice-ufrag:f998
a=ice-pwd:dbf9312319a461e4886394
a=ice-options:trickle
a=fingerprint:sha-256 C1:D2:78:4F:82:4E:77:6B:C5:ED:F4:D3:D0:9C:EC:9D:B9:5C:F9:0F:D3:96:93:FC:DC:64:9B:6C:25:C7:6A:AE
a=setup:actpass
a=recvonly
a=mid:0av
a=msid:6cfdbb44-19f9-4176-ab00-4b59dfaa8614 19f5cd00-0b07-4e06-93c8-5bad53c90303
a=rtcp:9 IN IP4 0.0.0.0
a=rtcp-mux
a=ssrc:1336479537 cname:fc44870d-a065-4f97-ab1f-399428c1cca0
a=rtpmap:96 opus/48000/2
m=video 9 UDP/TLS/RTP/SAVPF 97
c=IN IP4 0.0.0.0
a=ice-ufrag:f998
a=ice-pwd:dbf9312319a461e4886394
a=ice-options:trickle
a=fingerprint:sha-256 C1:D2:78:4F:82:4E:77:6B:C5:ED:F4:D3:D0:9C:EC:9D:B9:5C:F9:0F:D3:96:93:FC:DC:64:9B:6C:25:C7:6A:AE
a=setup:actpass
a=recvonly
a=mid:1av
a=msid:808e010a-235f-48b0-8af1-f5e0be6adbcc 82ffcf77-63a0-42df-a6a1-31fd87125f06
a=rtcp:9 IN IP4 0.0.0.0
a=rtcp-mux
a=ssrc:2898980530 cname:fc44870d-a065-4f97-ab1f-399428c1cca0
a=rtpmap:97 H264/90000
a=rtcp-fb:97 transport-cc
a=rtcp-fb:97 ccm fir
a=rtcp-fb:97 nack
a=rtcp-fb:97 nack pli
a=rtcp-fb:97 goog-remb
a=fmtp:97 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=ice-ufrag:f998
a=ice-pwd:dbf9312319a461e4886394
a=ice-options:trickle
a=fingerprint:sha-256 C1:D2:78:4F:82:4E:77:6B:C5:ED:F4:D3:D0:9C:EC:9D:B9:5C:F9:0F:D3:96:93:FC:DC:64:9B:6C:25:C7:6A:AE
a=setup:actpass
a=mid:0dc
a=sctp-port:5000
a=max-message-size:65536

They are slightly different... Though I don't know if that matters, Google didn't reject the offer after all. Here's their documentation on valid offers: https://developers.google.com/nest/device-access/api/camera-wired#access_a_live_stream

Just in case this helps here's the answer from Google for v14

v=0
o=- 0 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 2 1
a=msid-semantic: WMS 15796345830360132231/3212739396 virtual-6666
a=ice-lite
m=audio 19305 UDP/TLS/RTP/SAVPF 96
c=IN IP4 142.250.111.127
a=rtcp:9 IN IP4 0.0.0.0
a=candidate: 1 udp 2113939711 2607:f8b0:4023:1401::7f 19305 typ host generation 0
a=candidate: 1 tcp 2113939710 2607:f8b0:4023:1401::7f 19305 typ host tcptype passive generation 0
a=candidate: 1 ssltcp 2113939709 2607:f8b0:4023:1401::7f 443 typ host generation 0
a=candidate: 1 udp 2113932031 142.250.111.127 19305 typ host generation 0
a=candidate: 1 tcp 2113932030 142.250.111.127 19305 typ host tcptype passive generation 0
a=candidate: 1 ssltcp 2113932029 142.250.111.127 443 typ host generation 0
a=ice-ufrag:rbuDrlgNcTWkUQoKWigaIAEQABgHARIFCJI
a=ice-pwd:5VHZD8J0Z1NCX8PCH+WWY4I7
a=fingerprint:sha-256 97:97:F0:E6:60:A0:8B:52:86:DE:D5:0A:76:55:41:BA:CC:D7:4C:E7:49:19:AF:78:33:86:D6:E6:23:05:F7:CB
a=setup:passive
a=mid:0
a=sendrecv
a=msid:virtual-6666 virtual-6666
a=rtcp-mux
a=rtpmap:96 opus/48000/2
a=fmtp:96 minptime=10;useinbandfec=1
a=ssrc:6666 cname:6666
m=video 9 UDP/TLS/RTP/SAVPF 97
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:rbuDrlgNcTWkUQoKWigaIAEQABgHARIFCJI
a=ice-pwd:5VHZD8J0Z1NCX8PCH+WWY4I7
a=fingerprint:sha-256 97:97:F0:E6:60:A0:8B:52:86:DE:D5:0A:76:55:41:BA:CC:D7:4C:E7:49:19:AF:78:33:86:D6:E6:23:05:F7:CB
a=setup:passive
a=mid:1
a=sendrecv
a=msid:15796345830360132231/3212739396 15796345830360132231/3212739396
a=rtcp-mux
a=rtpmap:97 H264/90000
a=rtcp-fb:97 ccm fir
a=rtcp-fb:97 nack
a=rtcp-fb:97 nack pli
a=rtcp-fb:97 goog-remb
a=fmtp:97 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=ssrc:3212739396 cname:3212739396
m=application 9 DTLS/SCTP 5000
c=IN IP4 0.0.0.0
a=ice-ufrag:rbuDrlgNcTWkUQoKWigaIAEQABgHARIFCJI
a=ice-pwd:5VHZD8J0Z1NCX8PCH+WWY4I7
a=fingerprint:sha-256 97:97:F0:E6:60:A0:8B:52:86:DE:D5:0A:76:55:41:BA:CC:D7:4C:E7:49:19:AF:78:33:86:D6:E6:23:05:F7:CB
a=setup:passive
a=mid:2
a=sctpmap:5000 webrtc-datachannel 1024

And here's the answer for v18:

v=0
o=- 0 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 2 1
a=msid-semantic: WMS 3240798023628112241/3212739396 virtual-6666
a=ice-lite
m=audio 19305 UDP/TLS/RTP/SAVPF 96
c=IN IP4 142.250.111.127
a=rtcp:9 IN IP4 0.0.0.0
a=candidate: 1 udp 2113939711 2607:f8b0:4023:1401::7f 19305 typ host generation 0
a=candidate: 1 tcp 2113939710 2607:f8b0:4023:1401::7f 19305 typ host tcptype passive generation 0
a=candidate: 1 ssltcp 2113939709 2607:f8b0:4023:1401::7f 443 typ host generation 0
a=candidate: 1 udp 2113932031 142.250.111.127 19305 typ host generation 0
a=candidate: 1 tcp 2113932030 142.250.111.127 19305 typ host tcptype passive generation 0
a=candidate: 1 ssltcp 2113932029 142.250.111.127 443 typ host generation 0
a=ice-ufrag:RKamQfc0CAXugwoKWigaIAEQABgHARIFCJI
a=ice-pwd:ODDNSQETUKZHDINAXVK1ERFN
a=fingerprint:sha-256 D3:67:EC:0D:4F:28:61:8D:D4:01:9C:F6:9C:05:32:3B:2D:9C:98:37:A8:0D:44:6D:AD:17:F0:FA:FC:6E:2B:7C
a=setup:passive
a=mid:0
a=sendrecv
a=msid:virtual-6666 virtual-6666
a=rtcp-mux
a=rtpmap:96 opus/48000/2
a=fmtp:96 minptime=10;useinbandfec=1
a=ssrc:6666 cname:6666
m=video 9 UDP/TLS/RTP/SAVPF 97
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:RKamQfc0CAXugwoKWigaIAEQABgHARIFCJI
a=ice-pwd:ODDNSQETUKZHDINAXVK1ERFN
a=fingerprint:sha-256 D3:67:EC:0D:4F:28:61:8D:D4:01:9C:F6:9C:05:32:3B:2D:9C:98:37:A8:0D:44:6D:AD:17:F0:FA:FC:6E:2B:7C
a=setup:passive
a=mid:1
a=sendrecv
a=msid:3240798023628112241/3212739396 3240798023628112241/3212739396
a=rtcp-mux
a=rtpmap:97 H264/90000
a=rtcp-fb:97 ccm fir
a=rtcp-fb:97 nack
a=rtcp-fb:97 nack pli
a=rtcp-fb:97 goog-remb
a=fmtp:97 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=ssrc:3212739396 cname:3212739396
m=application 9 DTLS/SCTP 5000
c=IN IP4 0.0.0.0
a=ice-ufrag:RKamQfc0CAXugwoKWigaIAEQABgHARIFCJI
a=ice-pwd:ODDNSQETUKZHDINAXVK1ERFN
a=fingerprint:sha-256 D3:67:EC:0D:4F:28:61:8D:D4:01:9C:F6:9C:05:32:3B:2D:9C:98:37:A8:0D:44:6D:AD:17:F0:FA:FC:6E:2B:7C
a=setup:passive
a=mid:2
a=sctpmap:5000 webrtc-datachannel 1024

They look identical to me... but maybe you'll see something.

Here's the code with the credentials redacted:

import {ChildProcess, spawn} from 'child_process';
import * as google from 'googleapis';
import {RTCPeerConnection, RTCRtpCodecParameters} from 'werift';
import { createSocket } from "dgram";

export default async function doIt() {

    const udp = createSocket("udp4");

    let pathToFfmpeg = require('ffmpeg-for-homebridge');
    if (!pathToFfmpeg)
        pathToFfmpeg = 'ffmpeg';

    const ffmpegArgs = `-analyzeduration 15000000 -probesize 100000000 -loglevel verbose -protocol_whitelist file,crypto,udp,rtp -i /Users/tpotma/Source/webrtctest/src/ffmpeg.sdp -vcodec libx264 -acodec libopus /users/tpotma/Desktop/output.mkv`;
    const ffmpegProcess: ChildProcess = spawn(pathToFfmpeg, ffmpegArgs.split(/\s+/), { env: process.env });

    if (ffmpegProcess.stdout) {
        ffmpegProcess.stdout.on('error', (error: Error) => {
            console.log(error.message);
        });
    }
    if (ffmpegProcess.stderr) {
        ffmpegProcess.stderr.on('data', (data: any) => {
            data.toString().split(/\n/).forEach((line: string) => {
                console.log(line);
            });
        });
    }
    ffmpegProcess.on('error', (error: Error) => {
        console.log('Failed to start stream: ' + error.message);
    });
    ffmpegProcess.on('exit', (code: number, signal: NodeJS.Signals) => {
        const message = 'FFmpeg exited with code: ' + code + ' and signal: ' + signal;

        if (code == null || code === 255) {
            if (ffmpegProcess.killed) {
                console.log(message + ' (Expected)',);
            } else {
                console.log(message + ' (Unexpected)');
            }
        } else {
            console.log(message + ' (Error)');
        }
    });

    const oauth2Client = new google.Auth.OAuth2Client(
        '<redacted>',
        '<redacted>'
    );
    const projectId = '<redacted>';
    oauth2Client.setCredentials({
        refresh_token: '<redacted>'
    });
    const smartdevicemanagement = new google.smartdevicemanagement_v1.Smartdevicemanagement({
        auth: oauth2Client
    });

    const pc = new RTCPeerConnection({
        bundlePolicy: "max-bundle",
        codecs: {
            audio: [
                new RTCRtpCodecParameters({
                    mimeType: "audio/opus",
                    clockRate: 48000,
                    channels: 2,
                })
            ],
            video: [
                new RTCRtpCodecParameters({
                    mimeType: "video/H264",
                    clockRate: 90000,
                    rtcpFeedback: [
                        { type: "transport-cc" },
                        { type: "ccm", parameter: "fir" },
                        { type: "nack" },
                        { type: "nack", parameter: "pli" },
                        { type: "goog-remb" },
                    ],
                    parameters: 'level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f'
                })
            ],
        }
    });

    const audioTransceiver = pc.addTransceiver("audio", {direction: "recvonly"});
    audioTransceiver.onTrack.subscribe((track) => {
        audioTransceiver.sender.replaceTrack(track);
        track.onReceiveRtp.subscribe((rtp) => {
            udp.send(rtp.serialize(), 33301, "127.0.0.1");
        });
    });

    const videoTransceiver = pc.addTransceiver("video", {direction: "recvonly"});
    videoTransceiver.onTrack.subscribe((track) => {
        videoTransceiver.sender.replaceTrack(track);
        track.onReceiveRtp.subscribe((rtp) => {
            udp.send(rtp.serialize(), 33305, "127.0.0.1");
        });
        track.onReceiveRtp.once((rtp) => {
            setInterval(() => videoTransceiver.receiver.sendRtcpPLI(track.ssrc!), 2000);
        });
    });

    pc.createDataChannel('dataSendChannel', {id: 1});

    let offer = await pc.createOffer();
    await pc.setLocalDescription(offer);

    console.log(offer.sdp);

    const response = await smartdevicemanagement.enterprises.devices.executeCommand({
        name: `enterprises/${projectId}/devices/<redacted>`,
        requestBody: {
            command: 'sdm.devices.commands.CameraLiveStream.GenerateWebRtcStream',
            params: {
                offerSdp: offer.sdp
            }
        }
    });

    let answerSdp = (<any>response.data.results).answerSdp;

    console.log(answerSdp);

    await pc.setRemoteDescription({
            type: 'answer',
            sdp: answerSdp
        });

    console.log('answer applied');

    process.on("SIGINT", () => {
        ffmpegProcess.kill('SIGINT');
        pc.close().then(() => {
            udp.close();
        });
    });
}

Here's the SDP fed into ffmpeg:

v=0
o=- 0 0 IN IP4 127.0.0.1
s=-
c=IN IP4 127.0.0.1
t=0 0
m=audio 33301 UDP 96
a=rtpmap:96 opus/48000/2
a=fmtp:96 minptime=10;useinbandfec=1
a=rtcp-fb:96 transport-cc
a=sendrecv
m=video 33305 UDP 97
a=rtpmap:97 H264/90000
a=rtcp-fb:97 ccm fir
a=rtcp-fb:97 nack
a=rtcp-fb:97 nack pli
a=rtcp-fb:97 goog-remb
a=fmtp:97 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=sendrecv

AFAIK the main difference is that v14 is doing "something" that gets the data flowing, where's v18 is not.

I bought Google Nest Cam (indoor, wired) and will try to debug it when I have time.

@potmat

It appears that the mid suffix in the SDP of werift is being removed in GoogleNestCam Answer.

I have released a version that implements the change to remove the default suffix, please try it.

0.18.7

That did it! Thank you so much @shinyoshiaki, you have been incredibly supportive.