werift 0.20.1 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/lib/common/src/event.js +0 -3
  2. package/lib/common/src/event.js.map +1 -1
  3. package/lib/dtls/src/flight/server/flight2.js +5 -3
  4. package/lib/dtls/src/flight/server/flight2.js.map +1 -1
  5. package/lib/dtls/src/index.d.ts +1 -1
  6. package/lib/dtls/src/index.js.map +1 -1
  7. package/lib/dtls/src/record/receive.js +1 -1
  8. package/lib/dtls/src/record/receive.js.map +1 -1
  9. package/lib/ice/src/candidate.d.ts +2 -1
  10. package/lib/ice/src/candidate.js +17 -4
  11. package/lib/ice/src/candidate.js.map +1 -1
  12. package/lib/ice/src/helper.d.ts +6 -6
  13. package/lib/ice/src/helper.js +18 -15
  14. package/lib/ice/src/helper.js.map +1 -1
  15. package/lib/ice/src/ice.d.ts +28 -75
  16. package/lib/ice/src/ice.js +388 -418
  17. package/lib/ice/src/ice.js.map +1 -1
  18. package/lib/ice/src/iceBase.d.ts +109 -0
  19. package/lib/ice/src/iceBase.js +166 -0
  20. package/lib/ice/src/iceBase.js.map +1 -0
  21. package/lib/ice/src/index.d.ts +1 -0
  22. package/lib/ice/src/index.js +1 -0
  23. package/lib/ice/src/index.js.map +1 -1
  24. package/lib/ice/src/stun/message.d.ts +6 -0
  25. package/lib/ice/src/stun/message.js +4 -0
  26. package/lib/ice/src/stun/message.js.map +1 -1
  27. package/lib/ice/src/stun/protocol.d.ts +5 -6
  28. package/lib/ice/src/stun/protocol.js +18 -18
  29. package/lib/ice/src/stun/protocol.js.map +1 -1
  30. package/lib/ice/src/stun/transaction.js +6 -1
  31. package/lib/ice/src/stun/transaction.js.map +1 -1
  32. package/lib/ice/src/turn/protocol.d.ts +6 -5
  33. package/lib/ice/src/turn/protocol.js +54 -36
  34. package/lib/ice/src/turn/protocol.js.map +1 -1
  35. package/lib/ice/src/types/model.d.ts +4 -0
  36. package/lib/ice/src/types/model.js.map +1 -1
  37. package/lib/rtp/src/extra/container/webm/container.d.ts +3 -1
  38. package/lib/rtp/src/extra/container/webm/container.js +8 -2
  39. package/lib/rtp/src/extra/container/webm/container.js.map +1 -1
  40. package/lib/rtp/src/extra/container/webm/ebml/id.d.ts +6 -0
  41. package/lib/rtp/src/extra/container/webm/ebml/id.js +6 -0
  42. package/lib/rtp/src/extra/container/webm/ebml/id.js.map +1 -1
  43. package/lib/rtp/src/extra/processor/webm.d.ts +11 -16
  44. package/lib/rtp/src/extra/processor/webm.js.map +1 -1
  45. package/lib/rtp/src/extra/processor/webmCallback.d.ts +1 -10
  46. package/lib/rtp/src/extra/processor/webmCallback.js.map +1 -1
  47. package/lib/rtp/src/rtp/headerExtension.d.ts +45 -3
  48. package/lib/rtp/src/rtp/headerExtension.js +15 -0
  49. package/lib/rtp/src/rtp/headerExtension.js.map +1 -1
  50. package/lib/sctp/src/index.d.ts +1 -1
  51. package/lib/sctp/src/index.js.map +1 -1
  52. package/lib/webrtc/src/const.d.ts +2 -2
  53. package/lib/webrtc/src/const.js.map +1 -1
  54. package/lib/webrtc/src/media/extension/rtpExtension.d.ts +1 -0
  55. package/lib/webrtc/src/media/extension/rtpExtension.js +6 -0
  56. package/lib/webrtc/src/media/extension/rtpExtension.js.map +1 -1
  57. package/lib/webrtc/src/media/router.d.ts +0 -3
  58. package/lib/webrtc/src/media/router.js.map +1 -1
  59. package/lib/webrtc/src/media/rtpReceiver.d.ts +1 -2
  60. package/lib/webrtc/src/media/rtpReceiver.js +2 -2
  61. package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
  62. package/lib/webrtc/src/media/track.d.ts +2 -2
  63. package/lib/webrtc/src/media/track.js.map +1 -1
  64. package/lib/webrtc/src/nonstandard/recorder/index.d.ts +1 -0
  65. package/lib/webrtc/src/nonstandard/recorder/index.js.map +1 -1
  66. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js +1 -0
  67. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
  68. package/lib/webrtc/src/peerConnection.d.ts +12 -6
  69. package/lib/webrtc/src/peerConnection.js +94 -82
  70. package/lib/webrtc/src/peerConnection.js.map +1 -1
  71. package/lib/webrtc/src/sdp.js +15 -3
  72. package/lib/webrtc/src/sdp.js.map +1 -1
  73. package/lib/webrtc/src/transport/dtls.d.ts +5 -5
  74. package/lib/webrtc/src/transport/dtls.js +7 -18
  75. package/lib/webrtc/src/transport/dtls.js.map +1 -1
  76. package/lib/webrtc/src/transport/ice.d.ts +20 -9
  77. package/lib/webrtc/src/transport/ice.js +97 -32
  78. package/lib/webrtc/src/transport/ice.js.map +1 -1
  79. package/package.json +1 -1
  80. package/src/const.ts +2 -2
  81. package/src/media/extension/rtpExtension.ts +6 -0
  82. package/src/media/router.ts +2 -3
  83. package/src/media/rtpReceiver.ts +4 -3
  84. package/src/media/track.ts +7 -2
  85. package/src/nonstandard/recorder/index.ts +1 -0
  86. package/src/nonstandard/recorder/writer/webm.ts +47 -43
  87. package/src/peerConnection.ts +118 -88
  88. package/src/sdp.ts +16 -3
  89. package/src/transport/dtls.ts +11 -9
  90. package/src/transport/ice.ts +73 -26
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../../../ice/src/turn/protocol.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"crypto\";\nimport { jspack } from \"@shinyoshiaki/jspack\";\nimport debug from \"debug\";\nimport PCancelable from \"p-cancelable\";\nimport { setTimeout } from \"timers/promises\";\nimport { Event, EventDisposer } from \"../imports/common\";\n\nimport { bufferReader, int } from \"../../../common/src\";\nimport type { InterfaceAddresses } from \"../../../common/src/network\";\nimport type { Candidate } from \"../candidate\";\nimport { TransactionFailed } from \"../exceptions\";\nimport { type Future, future, randomTransactionId } from \"../helper\";\nimport type { Connection } from \"../ice\";\nimport { classes, methods } from \"../stun/const\";\nimport { Message, paddingLength, parseMessage } from \"../stun/message\";\nimport { Transaction } from \"../stun/transaction\";\nimport { TcpTransport, type Transport, UdpTransport } from \"../transport\";\nimport type { Address, Protocol } from \"../types/model\";\n\nconst log = debug(\"werift-ice:packages/ice/src/turn/protocol.ts\");\n\nconst DEFAULT_CHANNEL_REFRESH_TIME = 500;\nconst DEFAULT_ALLOCATION_LIFETIME = 600;\nconst UDP_TRANSPORT = 0x11000000;\n\nexport class StunOverTurnProtocol implements Protocol {\n static type = \"turn\";\n readonly type = StunOverTurnProtocol.type;\n localCandidate!: Candidate;\n private disposer = new EventDisposer();\n\n constructor(\n public turn: TurnProtocol,\n private ice: Connection,\n ) {\n turn.onData\n .subscribe((data, addr) => {\n this.handleStunMessage(data, addr);\n })\n .disposer(this.disposer);\n }\n\n private handleStunMessage = (data: Buffer, addr: Address) => {\n try {\n const message = parseMessage(data);\n if (!message) {\n this.ice.dataReceived(data, this.localCandidate.component);\n return;\n }\n\n if (\n message.messageClass === classes.RESPONSE ||\n message.messageClass === classes.ERROR\n ) {\n const transaction = this.turn.transactions[message.transactionIdHex];\n if (transaction) {\n transaction.responseReceived(message, addr);\n }\n } else if (message.messageClass === classes.REQUEST) {\n this.ice.requestReceived(message, addr, this, data);\n }\n } catch (error) {\n log(\"datagramReceived error\", error);\n }\n };\n\n async request(request: Message, addr: Address, integrityKey?: Buffer) {\n if (this.turn.transactions[request.transactionIdHex]) {\n throw new Error(\"exist\");\n }\n\n if (integrityKey) {\n request.addMessageIntegrity(integrityKey);\n request.addFingerprint();\n }\n\n const transaction = new Transaction(request, addr, this);\n this.turn.transactions[request.transactionIdHex] = transaction;\n\n try {\n return await transaction.run();\n } catch (e) {\n throw e;\n } finally {\n delete this.turn.transactions[request.transactionIdHex];\n }\n }\n async connectionMade() {}\n async sendData(data: Buffer, addr: Address) {\n await this.turn.sendData(data, addr);\n }\n async sendStun(message: Message, addr: Address) {\n await this.turn.sendData(message.bytes, addr);\n }\n async close() {\n this.disposer.dispose();\n return this.turn.close();\n }\n}\n\nexport class TurnProtocol implements Protocol {\n static type = \"turn\";\n readonly type = TurnProtocol.type;\n readonly onData = new Event<[Buffer, Address]>();\n integrityKey?: Buffer;\n nonce?: Buffer;\n realm?: string;\n relayedAddress!: Address;\n mappedAddress!: Address;\n localCandidate!: Candidate;\n transactions: { [hexId: string]: Transaction } = {};\n private refreshHandle?: Future;\n private channelNumber = 0x4000;\n private channelByAddr: {\n [addr: string]: { number: number; address: Address };\n } = {};\n private addrByChannel: { [channel: number]: Address } = {};\n /**sec */\n private channelRefreshTime: number;\n private channelBinding?: Promise<void>;\n private channelRefreshAt = 0;\n private tcpBuffer: Buffer = Buffer.alloc(0);\n private permissionByAddr: { [addr: string]: boolean } = {};\n private creatingPermission: Promise<void> = Promise.resolve();\n\n constructor(\n public server: Address,\n public username: string,\n public password: string,\n public lifetime: number,\n public transport: Transport,\n public options: {\n /**sec */\n channelRefreshTime?: number;\n } = {},\n ) {\n this.channelRefreshTime =\n this.options.channelRefreshTime ?? DEFAULT_CHANNEL_REFRESH_TIME;\n }\n\n async connectionMade() {\n this.transport.onData = (data, addr) => {\n this.dataReceived(data, addr);\n };\n\n const request = new Message(methods.ALLOCATE, classes.REQUEST);\n request\n .setAttribute(\"LIFETIME\", this.lifetime)\n .setAttribute(\"REQUESTED-TRANSPORT\", UDP_TRANSPORT);\n\n const [response] = await this.requestWithRetry(request, this.server).catch(\n (e) => {\n log(\"connect error\", e);\n throw e;\n },\n );\n this.relayedAddress = response.getAttributeValue(\"XOR-RELAYED-ADDRESS\");\n this.mappedAddress = response.getAttributeValue(\"XOR-MAPPED-ADDRESS\");\n const exp = response.getAttributeValue(\"LIFETIME\");\n log(\"connect\", this.relayedAddress, this.mappedAddress, { exp });\n\n this.refreshHandle = future(this.refresh(exp));\n }\n\n private handleChannelData(data: Buffer) {\n const [channel, length] = jspack.Unpack(\"!HH\", data.slice(0, 4));\n const addr = this.addrByChannel[channel];\n\n if (addr) {\n const payload = data.subarray(4, 4 + length);\n this.onData.execute(payload, addr);\n }\n }\n\n private handleSTUNMessage(data: Buffer, addr: Address) {\n try {\n const message = parseMessage(data);\n if (!message) {\n throw new Error(\"not stun message\");\n }\n\n if (\n message.messageClass === classes.RESPONSE ||\n message.messageClass === classes.ERROR\n ) {\n const transaction = this.transactions[message.transactionIdHex];\n if (transaction) {\n transaction.responseReceived(message, addr);\n }\n } else if (message.messageClass === classes.REQUEST) {\n this.onData.execute(data, addr);\n }\n\n if (message.getAttributeValue(\"DATA\")) {\n const buf: Buffer = message.getAttributeValue(\"DATA\");\n this.onData.execute(buf, addr);\n }\n } catch (error) {\n log(\"parse error\", data.toString());\n }\n }\n\n private dataReceived(data: Buffer, addr: Address) {\n const datagramReceived = (data: Buffer, addr: Address) => {\n if (data.length >= 4 && isChannelData(data)) {\n this.handleChannelData(data);\n } else {\n this.handleSTUNMessage(data, addr);\n }\n };\n\n if (this.transport.type === \"tcp\") {\n this.tcpBuffer = Buffer.concat([this.tcpBuffer, data]);\n while (this.tcpBuffer.length >= 4) {\n let [, length] = bufferReader(this.tcpBuffer.subarray(0, 4), [2, 2]);\n length += paddingLength(length);\n const fullLength = isChannelData(this.tcpBuffer)\n ? 4 + length\n : 20 + length;\n if (this.tcpBuffer.length < fullLength) {\n break;\n }\n\n datagramReceived(this.tcpBuffer.subarray(0, fullLength), addr);\n this.tcpBuffer = this.tcpBuffer.subarray(fullLength);\n }\n } else {\n datagramReceived(data, addr);\n }\n }\n\n private async send(data: Buffer, addr: Address) {\n if (this.transport.type === \"tcp\") {\n const padding = paddingLength(data.length);\n await this.transport.send(\n padding > 0 ? Buffer.concat([data, Buffer.alloc(padding)]) : data,\n addr,\n );\n } else {\n await this.transport.send(data, addr);\n }\n }\n\n private async createPermission(peerAddress: Address) {\n const request = new Message(methods.CREATE_PERMISSION, classes.REQUEST);\n request\n .setAttribute(\"XOR-PEER-ADDRESS\", peerAddress)\n .setAttribute(\"USERNAME\", this.username)\n .setAttribute(\"REALM\", this.realm)\n .setAttribute(\"NONCE\", this.nonce);\n await this.request(request, this.server).catch((e) => {\n request;\n throw e;\n });\n }\n\n private refresh = (exp: number) =>\n new PCancelable(async (_, f, onCancel) => {\n let run = true;\n onCancel(() => {\n run = false;\n f(\"cancel\");\n });\n\n while (run) {\n // refresh before expire\n const delay = (5 / 6) * exp * 1000;\n log(\"refresh delay\", delay, { exp });\n await setTimeout(delay);\n\n const request = new Message(methods.REFRESH, classes.REQUEST);\n request.setAttribute(\"LIFETIME\", exp);\n\n try {\n const [message] = await this.requestWithRetry(request, this.server);\n exp = message.getAttributeValue(\"LIFETIME\");\n log(\"refresh\", { exp });\n } catch (error) {\n log(\"refresh error\", error);\n }\n }\n });\n\n async request(request: Message, addr: Address): Promise<[Message, Address]> {\n if (this.transactions[request.transactionIdHex]) {\n throw new Error(\"exist\");\n }\n if (this.integrityKey) {\n request\n .setAttribute(\"USERNAME\", this.username)\n .setAttribute(\"REALM\", this.realm)\n .setAttribute(\"NONCE\", this.nonce)\n .addMessageIntegrity(this.integrityKey)\n .addFingerprint();\n }\n\n const transaction = new Transaction(request, addr, this);\n this.transactions[request.transactionIdHex] = transaction;\n\n try {\n return await transaction.run();\n } catch (e) {\n throw e;\n } finally {\n delete this.transactions[request.transactionIdHex];\n }\n }\n\n async requestWithRetry(\n request: Message,\n addr: Address,\n ): Promise<[Message, Address]> {\n let message: Message, address: Address;\n try {\n [message, address] = await this.request(request, addr);\n } catch (error) {\n if (error instanceof TransactionFailed == false) {\n log(\"requestWithRetry error\", error);\n throw error;\n }\n\n // resolve dns address\n this.server = error.addr;\n\n const [errorCode] = error.response.getAttributeValue(\"ERROR-CODE\");\n const nonce = error.response.getAttributeValue(\"NONCE\");\n const realm = error.response.getAttributeValue(\"REALM\");\n\n if (\n ((errorCode === 401 && realm) || (errorCode === 438 && this.realm)) &&\n nonce\n ) {\n log(\"retry with nonce\", errorCode);\n\n this.nonce = nonce;\n if (errorCode === 401) {\n this.realm = realm;\n }\n this.integrityKey = makeIntegrityKey(\n this.username,\n this.realm!,\n this.password,\n );\n\n request.transactionId = randomTransactionId();\n [message, address] = await this.request(request, this.server);\n } else {\n throw error;\n }\n }\n return [message!, address!];\n }\n\n async sendData(data: Buffer, addr: Address) {\n const channel = await this.getChannel(addr).catch((e) => {\n return new Error(\"channelBind error\");\n });\n\n if (channel instanceof Error) {\n await this.getPermission(addr);\n const indicate = new Message(methods.SEND, classes.INDICATION)\n .setAttribute(\"DATA\", data)\n .setAttribute(\"XOR-PEER-ADDRESS\", addr);\n\n await this.sendStun(indicate, this.server);\n return;\n }\n\n const header = jspack.Pack(\"!HH\", [channel.number, data.length]);\n await this.send(Buffer.concat([Buffer.from(header), data]), this.server);\n }\n\n async getPermission(addr: Address) {\n await this.creatingPermission;\n\n const permitted = this.permissionByAddr[addr.join(\":\")];\n if (!permitted) {\n this.creatingPermission = this.createPermission(addr);\n this.permissionByAddr[addr.join(\":\")] = true;\n await this.creatingPermission.catch((e) => {\n log(\"createPermission error\", e);\n throw e;\n });\n }\n }\n\n async getChannel(addr: Address) {\n if (this.channelBinding) {\n await this.channelBinding;\n }\n\n let channel = this.channelByAddr[addr.join(\":\")];\n\n if (!channel) {\n this.channelByAddr[addr.join(\":\")] = {\n number: this.channelNumber++,\n address: addr,\n };\n channel = this.channelByAddr[addr.join(\":\")];\n this.addrByChannel[channel.number] = addr;\n\n this.channelBinding = this.channelBind(channel.number, addr);\n await this.channelBinding.catch((e) => {\n log(\"channelBind error\", e);\n throw e;\n });\n this.channelRefreshAt = int(Date.now() / 1000) + this.channelRefreshTime;\n this.channelBinding = undefined;\n log(\"channelBind\", channel);\n } else if (this.channelRefreshAt < int(Date.now() / 1000)) {\n this.channelBinding = this.channelBind(channel.number, addr);\n this.channelRefreshAt = int(Date.now() / 1000) + this.channelRefreshTime;\n await this.channelBinding.catch((e) => {\n log(\"channelBind error\", e);\n throw e;\n });\n this.channelBinding = undefined;\n log(\"channelBind refresh\", channel);\n }\n return channel;\n }\n\n private async channelBind(channelNumber: number, addr: Address) {\n const request = new Message(methods.CHANNEL_BIND, classes.REQUEST);\n request\n .setAttribute(\"CHANNEL-NUMBER\", channelNumber)\n .setAttribute(\"XOR-PEER-ADDRESS\", addr);\n const [response] = await this.requestWithRetry(request, this.server);\n if (response.messageMethod !== methods.CHANNEL_BIND) {\n throw new Error(\"should be CHANNEL_BIND\");\n }\n }\n\n async sendStun(message: Message, addr: Address) {\n await this.send(message.bytes, addr);\n }\n\n async close() {\n this.refreshHandle?.cancel();\n await this.transport.close();\n }\n}\n\nexport interface TurnClientConfig {\n address: Address;\n username: string;\n password: string;\n}\nexport interface TurnClientOptions {\n lifetime?: number;\n ssl?: boolean;\n transport?: \"udp\" | \"tcp\";\n portRange?: [number, number];\n interfaceAddresses?: InterfaceAddresses;\n}\n\nexport async function createTurnClient(\n { address, username, password }: TurnClientConfig,\n {\n lifetime,\n portRange,\n interfaceAddresses,\n transport: transportType,\n }: TurnClientOptions = {},\n) {\n lifetime ??= DEFAULT_ALLOCATION_LIFETIME;\n transportType ??= \"udp\";\n\n const transport =\n transportType === \"udp\"\n ? await UdpTransport.init(\"udp4\", portRange, interfaceAddresses)\n : await TcpTransport.init(address);\n\n const turn = new TurnProtocol(\n address,\n username,\n password,\n lifetime,\n transport,\n );\n\n await turn.connectionMade();\n return turn;\n}\n\nexport async function createStunOverTurnClient(\n {\n address,\n username,\n password,\n ice,\n }: {\n address: Address;\n username: string;\n password: string;\n ice: Connection;\n },\n {\n lifetime,\n portRange,\n interfaceAddresses,\n transport: transportType,\n }: {\n lifetime?: number;\n ssl?: boolean;\n transport?: \"udp\" | \"tcp\";\n portRange?: [number, number];\n interfaceAddresses?: InterfaceAddresses;\n } = {},\n) {\n const turn = await createTurnClient(\n {\n address,\n username,\n password,\n },\n {\n lifetime,\n portRange,\n interfaceAddresses,\n transport: transportType,\n },\n );\n const turnTransport = new StunOverTurnProtocol(turn, ice);\n return turnTransport;\n}\n\nexport function makeIntegrityKey(\n username: string,\n realm: string,\n password: string,\n) {\n return createHash(\"md5\")\n .update(Buffer.from([username, realm, password].join(\":\")))\n .digest();\n}\n\nfunction isChannelData(data: Buffer) {\n return (data[0] & 0xc0) == 0x40;\n}\n"]}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../../../ice/src/turn/protocol.ts"],"names":[],"mappings":";;;;;;AAucA,4CA2BC;AAED,4DAsCC;AAED,4CAQC;AAphBD,mCAAoC;AACpC,iDAA8C;AAC9C,kDAA0B;AAC1B,8CAA6C;AAC7C,8CAAyD;AAEzD,6CAAwD;AAGxD,8CAAkD;AAClD,sCAA6E;AAC7E,yCAAiD;AACjD,6CAAuE;AACvE,qDAAkD;AAClD,4CAA0E;AAG1E,MAAM,GAAG,GAAG,IAAA,eAAK,EAAC,8CAA8C,CAAC,CAAC;AAElE,MAAM,4BAA4B,GAAG,GAAG,CAAC;AACzC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AACxC,MAAM,aAAa,GAAG,UAAU,CAAC;AAEjC,MAAa,oBAAoB;IAQ/B,YAAmB,IAAkB;QAAzB;;;;mBAAO,IAAI;WAAc;QAN5B;;;;mBAAO,oBAAoB,CAAC,IAAI;WAAC;QAC1C;;;;;WAA2B;QACnB;;;;mBAAW,IAAI,sBAAa,EAAE;WAAC;QACvC;;;;mBAAuD,IAAI,cAAK,EAAE;WAAC;QACnE;;;;mBAAkC,IAAI,cAAK,EAAE;WAAC;QAUtC;;;;mBAAoB,CAAC,IAAY,EAAE,IAAa,EAAE,EAAE;gBAC1D,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,IAAA,sBAAY,EAAC,IAAI,CAAC,CAAC;oBACnC,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBAClC,OAAO;oBACT,CAAC;oBAED,IACE,OAAO,CAAC,YAAY,KAAK,eAAO,CAAC,QAAQ;wBACzC,OAAO,CAAC,YAAY,KAAK,eAAO,CAAC,KAAK,EACtC,CAAC;wBACD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;wBACrE,IAAI,WAAW,EAAE,CAAC;4BAChB,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;wBAC9C,CAAC;oBACH,CAAC;yBAAM,IAAI,OAAO,CAAC,YAAY,KAAK,eAAO,CAAC,OAAO,EAAE,CAAC;wBACpD,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBACtD,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,GAAG,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;WAAC;QA7BA,IAAI,CAAC,MAAM;aACR,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;YACxB,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC,CAAC;aACD,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IA0BD,KAAK,CAAC,OAAO,CAAC,OAAgB,EAAE,IAAa,EAAE,YAAqB;QAClE,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;YAC1C,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3B,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,yBAAW,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,WAAW,CAAC;QAE/D,IAAI,CAAC;YACH,OAAO,MAAM,WAAW,CAAC,GAAG,EAAE,CAAC;QACjC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,CAAC;QACV,CAAC;gBAAS,CAAC;YACT,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IACD,KAAK,CAAC,cAAc,KAAI,CAAC;IACzB,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,IAAa;QACxC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IACD,KAAK,CAAC,QAAQ,CAAC,OAAgB,EAAE,IAAa;QAC5C,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;;AAvEH,oDAwEC;AAvEQ;;;;WAAO,MAAM;EAAT,CAAU;AAyEvB,MAAa,YAAY;IA2BvB,YACS,MAAe,EACf,QAAgB,EAChB,QAAgB,EAChB,QAAgB,EAChB,SAAoB,EACpB,UAGH,EAAE;QARN;;;;mBAAO,MAAM;WAAS;QACtB;;;;mBAAO,QAAQ;WAAQ;QACvB;;;;mBAAO,QAAQ;WAAQ;QACvB;;;;mBAAO,QAAQ;WAAQ;QACvB;;;;mBAAO,SAAS;WAAW;QAC3B;;;;mBAAO,OAAO;WAGR;QAlCC;;;;mBAAO,YAAY,CAAC,IAAI;WAAC;QACzB;;;;mBAAS,IAAI,cAAK,EAAqB;WAAC;QACjD;;;;mBAAuD,IAAI,cAAK,EAAE;WAAC;QACnE;;;;mBAAkC,IAAI,cAAK,EAAE;WAAC;QAC9C;;;;;WAAsB;QACtB;;;;;WAAe;QACf;;;;;WAAe;QACf;;;;;WAAyB;QACzB;;;;;WAAwB;QACxB;;;;;WAA2B;QAC3B;;;;mBAAiD,EAAE;WAAC;QAC5C;;;;;WAAiC;QACjC;;;;mBAAgB,MAAM;WAAC;QACvB;;;;mBAEJ,EAAE;WAAC;QACC;;;;mBAAgD,EAAE;WAAC;QAC3D,SAAS;QACD;;;;;WAA2B;QAC3B;;;;;WAA+B;QAC/B;;;;mBAAmB,CAAC;WAAC;QACrB;;;;mBAAoB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;WAAC;QACpC;;;;mBAAgD,EAAE;WAAC;QACnD;;;;mBAAoC,OAAO,CAAC,OAAO,EAAE;WAAC;QAqItD;;;;mBAAU,CAAC,GAAW,EAAE,EAAE;gBAChC,IAAI,CAAC,aAAa,GAAG,IAAA,mBAAU,EAAO,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE;oBAC9D,IAAI,GAAG,GAAG,IAAI,CAAC;oBACf,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;wBACjB,GAAG,GAAG,KAAK,CAAC;oBACd,CAAC,CAAC,CAAC;oBAEH,OAAO,GAAG,EAAE,CAAC;wBACX,wBAAwB;wBACxB,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;wBACnC,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;wBACrC,MAAM,IAAA,qBAAU,EAAC,KAAK,CAAC,CAAC;wBAExB,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,eAAO,CAAC,OAAO,EAAE,eAAO,CAAC,OAAO,CAAC,CAAC;wBAC9D,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;wBAEtC,IAAI,CAAC;4BACH,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;4BACpE,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;4BAC5C,GAAG,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;wBAC1B,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;wBAC9B,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;WAAC;QAjJA,IAAI,CAAC,kBAAkB;YACrB,IAAI,CAAC,OAAO,CAAC,kBAAkB,IAAI,4BAA4B,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;YACrC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,eAAO,CAAC,QAAQ,EAAE,eAAO,CAAC,OAAO,CAAC,CAAC;QAC/D,OAAO;aACJ,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;aACvC,YAAY,CAAC,qBAAqB,EAAE,aAAa,CAAC,CAAC;QAEtD,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CACxE,CAAC,CAAC,EAAE,EAAE;YACJ,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;YACxB,MAAM,CAAC,CAAC;QACV,CAAC,CACF,CAAC;QACF,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,CAAC;QACxE,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;QACtE,MAAM,GAAG,GAAG,QAAQ,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QACnD,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAEjE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IAEO,iBAAiB,CAAC,IAAY;QACpC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,eAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAEzC,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,IAAY,EAAE,IAAa;QACnD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAA,sBAAY,EAAC,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACtC,CAAC;YAED,IACE,OAAO,CAAC,YAAY,KAAK,eAAO,CAAC,QAAQ;gBACzC,OAAO,CAAC,YAAY,KAAK,eAAO,CAAC,KAAK,EACtC,CAAC;gBACD,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;gBAChE,IAAI,WAAW,EAAE,CAAC;oBAChB,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;iBAAM,IAAI,OAAO,CAAC,YAAY,KAAK,eAAO,CAAC,OAAO,EAAE,CAAC;gBACpD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAClC,CAAC;YAED,IAAI,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtC,MAAM,GAAG,GAAW,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBACtD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,IAAY,EAAE,IAAa;QAC9C,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,IAAa,EAAE,EAAE;YACvD,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACrC,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAClC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,IAAA,kBAAY,EAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACrE,MAAM,IAAI,IAAA,uBAAa,EAAC,MAAM,CAAC,CAAC;gBAChC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;oBAC9C,CAAC,CAAC,CAAC,GAAG,MAAM;oBACZ,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC;gBAChB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;oBACvC,MAAM;gBACR,CAAC;gBAED,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC/D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,IAAa;QAC5C,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,IAAA,uBAAa,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3C,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CACvB,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EACjE,IAAI,CACL,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,WAAoB;QACjD,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,eAAO,CAAC,iBAAiB,EAAE,eAAO,CAAC,OAAO,CAAC,CAAC;QACxE,OAAO;aACJ,YAAY,CAAC,kBAAkB,EAAE,WAAW,CAAC;aAC7C,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;aACvC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;aACjC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACnD,OAAO,CAAC;YACR,MAAM,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;IACL,CAAC;IA6BD,KAAK,CAAC,OAAO,CAAC,OAAgB,EAAE,IAAa;QAC3C,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO;iBACJ,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;iBACvC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;iBACjC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;iBACjC,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC;iBACtC,cAAc,EAAE,CAAC;QACtB,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,yBAAW,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,WAAW,CAAC;QAE1D,IAAI,CAAC;YACH,OAAO,MAAM,WAAW,CAAC,GAAG,EAAE,CAAC;QACjC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,CAAC;QACV,CAAC;gBAAS,CAAC;YACT,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,OAAgB,EAChB,IAAa;QAEb,IAAI,OAAgB,EAAE,OAAgB,CAAC;QACvC,IAAI,CAAC;YACH,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,8BAAiB,IAAI,KAAK,EAAE,CAAC;gBAChD,GAAG,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;gBACrC,MAAM,KAAK,CAAC;YACd,CAAC;YAED,sBAAsB;YACtB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;YAEzB,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YACnE,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACxD,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAExD,IACE,CAAC,CAAC,SAAS,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnE,KAAK,EACL,CAAC;gBACD,GAAG,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;gBAEnC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;oBACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACrB,CAAC;gBACD,IAAI,CAAC,YAAY,GAAG,gBAAgB,CAClC,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,KAAM,EACX,IAAI,CAAC,QAAQ,CACd,CAAC;gBAEF,OAAO,CAAC,aAAa,GAAG,IAAA,4BAAmB,GAAE,CAAC;gBAC9C,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,CAAC,OAAQ,EAAE,OAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,IAAa;QACxC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACtD,OAAO,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,YAAY,KAAK,EAAE,CAAC;YAC7B,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,QAAQ,GAAG,IAAI,iBAAO,CAAC,eAAO,CAAC,IAAI,EAAE,eAAO,CAAC,UAAU,CAAC;iBAC3D,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC;iBAC1B,YAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;YAE1C,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,eAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACjE,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAa;QAC/B,MAAM,IAAI,CAAC,kBAAkB,CAAC;QAE9B,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACtD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;YAC7C,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBACxC,GAAG,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC;gBACjC,MAAM,CAAC,CAAC;YACV,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAa;QAC5B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,cAAc,CAAC;QAC5B,CAAC;QAED,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAEjD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG;gBACnC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE;gBAC5B,OAAO,EAAE,IAAI;aACd,CAAC;YACF,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;YAE1C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC7D,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBACpC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;gBAC5B,MAAM,CAAC,CAAC;YACV,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,gBAAgB,GAAG,IAAA,SAAG,EAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC;YACzE,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YAChC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC9B,CAAC;aAAM,IAAI,IAAI,CAAC,gBAAgB,GAAG,IAAA,SAAG,EAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC7D,IAAI,CAAC,gBAAgB,GAAG,IAAA,SAAG,EAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC;YACzE,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBACpC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;gBAC5B,MAAM,CAAC,CAAC;YACV,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YAChC,GAAG,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,aAAqB,EAAE,IAAa;QAC5D,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,eAAO,CAAC,YAAY,EAAE,eAAO,CAAC,OAAO,CAAC,CAAC;QACnE,OAAO;aACJ,YAAY,CAAC,gBAAgB,EAAE,aAAa,CAAC;aAC7C,YAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACrE,IAAI,QAAQ,CAAC,aAAa,KAAK,eAAO,CAAC,YAAY,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAgB,EAAE,IAAa;QAC5C,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE,CAAC;QAChC,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;;AAtVH,oCAuVC;AAtVQ;;;;WAAO,MAAM;EAAT,CAAU;AAqWhB,KAAK,UAAU,gBAAgB,CACpC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAoB,EACjD,EACE,QAAQ,EACR,SAAS,EACT,kBAAkB,EAClB,SAAS,EAAE,aAAa,MACH,EAAE;IAEzB,QAAQ,KAAR,QAAQ,GAAK,2BAA2B,EAAC;IACzC,aAAa,KAAb,aAAa,GAAK,KAAK,EAAC;IAExB,MAAM,SAAS,GACb,aAAa,KAAK,KAAK;QACrB,CAAC,CAAC,MAAM,wBAAY,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,kBAAkB,CAAC;QAChE,CAAC,CAAC,MAAM,wBAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEvC,MAAM,IAAI,GAAG,IAAI,YAAY,CAC3B,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,SAAS,CACV,CAAC;IAEF,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;IAC5B,OAAO,IAAI,CAAC;AACd,CAAC;AAEM,KAAK,UAAU,wBAAwB,CAC5C,EACE,OAAO,EACP,QAAQ,EACR,QAAQ,GAKT,EACD,EACE,QAAQ,EACR,SAAS,EACT,kBAAkB,EAClB,SAAS,EAAE,aAAa,MAOtB,EAAE;IAEN,MAAM,IAAI,GAAG,MAAM,gBAAgB,CACjC;QACE,OAAO;QACP,QAAQ;QACR,QAAQ;KACT,EACD;QACE,QAAQ;QACR,SAAS;QACT,kBAAkB;QAClB,SAAS,EAAE,aAAa;KACzB,CACF,CAAC;IACF,MAAM,aAAa,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACrD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAgB,gBAAgB,CAC9B,QAAgB,EAChB,KAAa,EACb,QAAgB;IAEhB,OAAO,IAAA,mBAAU,EAAC,KAAK,CAAC;SACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;SAC1D,MAAM,EAAE,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC;AAClC,CAAC","sourcesContent":["import { createHash } from \"crypto\";\nimport { jspack } from \"@shinyoshiaki/jspack\";\nimport debug from \"debug\";\nimport { setTimeout } from \"timers/promises\";\nimport { Event, EventDisposer } from \"../imports/common\";\n\nimport { bufferReader, int } from \"../../../common/src\";\nimport type { InterfaceAddresses } from \"../../../common/src/network\";\nimport type { Candidate } from \"../candidate\";\nimport { TransactionFailed } from \"../exceptions\";\nimport { type Cancelable, cancelable, randomTransactionId } from \"../helper\";\nimport { classes, methods } from \"../stun/const\";\nimport { Message, paddingLength, parseMessage } from \"../stun/message\";\nimport { Transaction } from \"../stun/transaction\";\nimport { TcpTransport, type Transport, UdpTransport } from \"../transport\";\nimport type { Address, Protocol } from \"../types/model\";\n\nconst log = debug(\"werift-ice:packages/ice/src/turn/protocol.ts\");\n\nconst DEFAULT_CHANNEL_REFRESH_TIME = 500;\nconst DEFAULT_ALLOCATION_LIFETIME = 600;\nconst UDP_TRANSPORT = 0x11000000;\n\nexport class StunOverTurnProtocol implements Protocol {\n static type = \"turn\";\n readonly type = StunOverTurnProtocol.type;\n localCandidate!: Candidate;\n private disposer = new EventDisposer();\n onRequestReceived: Event<[Message, Address, Buffer]> = new Event();\n onDataReceived: Event<[Buffer]> = new Event();\n\n constructor(public turn: TurnProtocol) {\n turn.onData\n .subscribe((data, addr) => {\n this.handleStunMessage(data, addr);\n })\n .disposer(this.disposer);\n }\n\n private handleStunMessage = (data: Buffer, addr: Address) => {\n try {\n const message = parseMessage(data);\n if (!message) {\n this.onDataReceived.execute(data);\n return;\n }\n\n if (\n message.messageClass === classes.RESPONSE ||\n message.messageClass === classes.ERROR\n ) {\n const transaction = this.turn.transactions[message.transactionIdHex];\n if (transaction) {\n transaction.responseReceived(message, addr);\n }\n } else if (message.messageClass === classes.REQUEST) {\n this.onRequestReceived.execute(message, addr, data);\n }\n } catch (error) {\n log(\"datagramReceived error\", error);\n }\n };\n\n async request(request: Message, addr: Address, integrityKey?: Buffer) {\n if (this.turn.transactions[request.transactionIdHex]) {\n throw new Error(\"exist\");\n }\n\n if (integrityKey) {\n request.addMessageIntegrity(integrityKey);\n request.addFingerprint();\n }\n\n const transaction = new Transaction(request, addr, this);\n this.turn.transactions[request.transactionIdHex] = transaction;\n\n try {\n return await transaction.run();\n } catch (e) {\n throw e;\n } finally {\n delete this.turn.transactions[request.transactionIdHex];\n }\n }\n async connectionMade() {}\n async sendData(data: Buffer, addr: Address) {\n await this.turn.sendData(data, addr);\n }\n async sendStun(message: Message, addr: Address) {\n await this.turn.sendData(message.bytes, addr);\n }\n async close() {\n this.disposer.dispose();\n return this.turn.close();\n }\n}\n\nexport class TurnProtocol implements Protocol {\n static type = \"turn\";\n readonly type = TurnProtocol.type;\n readonly onData = new Event<[Buffer, Address]>();\n onRequestReceived: Event<[Message, Address, Buffer]> = new Event();\n onDataReceived: Event<[Buffer]> = new Event();\n integrityKey?: Buffer;\n nonce?: Buffer;\n realm?: string;\n relayedAddress!: Address;\n mappedAddress!: Address;\n localCandidate!: Candidate;\n transactions: { [hexId: string]: Transaction } = {};\n private refreshHandle?: Cancelable<void>;\n private channelNumber = 0x4000;\n private channelByAddr: {\n [addr: string]: { number: number; address: Address };\n } = {};\n private addrByChannel: { [channel: number]: Address } = {};\n /**sec */\n private channelRefreshTime: number;\n private channelBinding?: Promise<void>;\n private channelRefreshAt = 0;\n private tcpBuffer: Buffer = Buffer.alloc(0);\n private permissionByAddr: { [addr: string]: boolean } = {};\n private creatingPermission: Promise<void> = Promise.resolve();\n\n constructor(\n public server: Address,\n public username: string,\n public password: string,\n public lifetime: number,\n public transport: Transport,\n public options: {\n /**sec */\n channelRefreshTime?: number;\n } = {},\n ) {\n this.channelRefreshTime =\n this.options.channelRefreshTime ?? DEFAULT_CHANNEL_REFRESH_TIME;\n }\n\n async connectionMade() {\n this.transport.onData = (data, addr) => {\n this.dataReceived(data, addr);\n };\n\n const request = new Message(methods.ALLOCATE, classes.REQUEST);\n request\n .setAttribute(\"LIFETIME\", this.lifetime)\n .setAttribute(\"REQUESTED-TRANSPORT\", UDP_TRANSPORT);\n\n const [response] = await this.requestWithRetry(request, this.server).catch(\n (e) => {\n log(\"connect error\", e);\n throw e;\n },\n );\n this.relayedAddress = response.getAttributeValue(\"XOR-RELAYED-ADDRESS\");\n this.mappedAddress = response.getAttributeValue(\"XOR-MAPPED-ADDRESS\");\n const exp = response.getAttributeValue(\"LIFETIME\");\n log(\"connect\", this.relayedAddress, this.mappedAddress, { exp });\n\n this.refresh(exp);\n }\n\n private handleChannelData(data: Buffer) {\n const [channel, length] = jspack.Unpack(\"!HH\", data.slice(0, 4));\n const addr = this.addrByChannel[channel];\n\n if (addr) {\n const payload = data.subarray(4, 4 + length);\n this.onData.execute(payload, addr);\n }\n }\n\n private handleSTUNMessage(data: Buffer, addr: Address) {\n try {\n const message = parseMessage(data);\n if (!message) {\n throw new Error(\"not stun message\");\n }\n\n if (\n message.messageClass === classes.RESPONSE ||\n message.messageClass === classes.ERROR\n ) {\n const transaction = this.transactions[message.transactionIdHex];\n if (transaction) {\n transaction.responseReceived(message, addr);\n }\n } else if (message.messageClass === classes.REQUEST) {\n this.onData.execute(data, addr);\n }\n\n if (message.getAttributeValue(\"DATA\")) {\n const buf: Buffer = message.getAttributeValue(\"DATA\");\n this.onData.execute(buf, addr);\n }\n } catch (error) {\n log(\"parse error\", data.toString());\n }\n }\n\n private dataReceived(data: Buffer, addr: Address) {\n const datagramReceived = (data: Buffer, addr: Address) => {\n if (data.length >= 4 && isChannelData(data)) {\n this.handleChannelData(data);\n } else {\n this.handleSTUNMessage(data, addr);\n }\n };\n\n if (this.transport.type === \"tcp\") {\n this.tcpBuffer = Buffer.concat([this.tcpBuffer, data]);\n while (this.tcpBuffer.length >= 4) {\n let [, length] = bufferReader(this.tcpBuffer.subarray(0, 4), [2, 2]);\n length += paddingLength(length);\n const fullLength = isChannelData(this.tcpBuffer)\n ? 4 + length\n : 20 + length;\n if (this.tcpBuffer.length < fullLength) {\n break;\n }\n\n datagramReceived(this.tcpBuffer.subarray(0, fullLength), addr);\n this.tcpBuffer = this.tcpBuffer.subarray(fullLength);\n }\n } else {\n datagramReceived(data, addr);\n }\n }\n\n private async send(data: Buffer, addr: Address) {\n if (this.transport.type === \"tcp\") {\n const padding = paddingLength(data.length);\n await this.transport.send(\n padding > 0 ? Buffer.concat([data, Buffer.alloc(padding)]) : data,\n addr,\n );\n } else {\n await this.transport.send(data, addr);\n }\n }\n\n private async createPermission(peerAddress: Address) {\n const request = new Message(methods.CREATE_PERMISSION, classes.REQUEST);\n request\n .setAttribute(\"XOR-PEER-ADDRESS\", peerAddress)\n .setAttribute(\"USERNAME\", this.username)\n .setAttribute(\"REALM\", this.realm)\n .setAttribute(\"NONCE\", this.nonce);\n await this.request(request, this.server).catch((e) => {\n request;\n throw e;\n });\n }\n\n private refresh = (exp: number) => {\n this.refreshHandle = cancelable<void>(async (_, __, onCancel) => {\n let run = true;\n onCancel.once(() => {\n run = false;\n });\n\n while (run) {\n // refresh before expire\n const delay = (5 / 6) * exp * 1000;\n log(\"refresh delay\", delay, { exp });\n await setTimeout(delay);\n\n const request = new Message(methods.REFRESH, classes.REQUEST);\n request.setAttribute(\"LIFETIME\", exp);\n\n try {\n const [message] = await this.requestWithRetry(request, this.server);\n exp = message.getAttributeValue(\"LIFETIME\");\n log(\"refresh\", { exp });\n } catch (error) {\n log(\"refresh error\", error);\n }\n }\n });\n };\n\n async request(request: Message, addr: Address): Promise<[Message, Address]> {\n if (this.transactions[request.transactionIdHex]) {\n throw new Error(\"exist\");\n }\n if (this.integrityKey) {\n request\n .setAttribute(\"USERNAME\", this.username)\n .setAttribute(\"REALM\", this.realm)\n .setAttribute(\"NONCE\", this.nonce)\n .addMessageIntegrity(this.integrityKey)\n .addFingerprint();\n }\n\n const transaction = new Transaction(request, addr, this);\n this.transactions[request.transactionIdHex] = transaction;\n\n try {\n return await transaction.run();\n } catch (e) {\n throw e;\n } finally {\n delete this.transactions[request.transactionIdHex];\n }\n }\n\n async requestWithRetry(\n request: Message,\n addr: Address,\n ): Promise<[Message, Address]> {\n let message: Message, address: Address;\n try {\n [message, address] = await this.request(request, addr);\n } catch (error) {\n if (error instanceof TransactionFailed == false) {\n log(\"requestWithRetry error\", error);\n throw error;\n }\n\n // resolve dns address\n this.server = error.addr;\n\n const [errorCode] = error.response.getAttributeValue(\"ERROR-CODE\");\n const nonce = error.response.getAttributeValue(\"NONCE\");\n const realm = error.response.getAttributeValue(\"REALM\");\n\n if (\n ((errorCode === 401 && realm) || (errorCode === 438 && this.realm)) &&\n nonce\n ) {\n log(\"retry with nonce\", errorCode);\n\n this.nonce = nonce;\n if (errorCode === 401) {\n this.realm = realm;\n }\n this.integrityKey = makeIntegrityKey(\n this.username,\n this.realm!,\n this.password,\n );\n\n request.transactionId = randomTransactionId();\n [message, address] = await this.request(request, this.server);\n } else {\n throw error;\n }\n }\n return [message!, address!];\n }\n\n async sendData(data: Buffer, addr: Address) {\n const channel = await this.getChannel(addr).catch((e) => {\n return new Error(\"channelBind error\");\n });\n\n if (channel instanceof Error) {\n await this.getPermission(addr);\n const indicate = new Message(methods.SEND, classes.INDICATION)\n .setAttribute(\"DATA\", data)\n .setAttribute(\"XOR-PEER-ADDRESS\", addr);\n\n await this.sendStun(indicate, this.server);\n return;\n }\n\n const header = jspack.Pack(\"!HH\", [channel.number, data.length]);\n await this.send(Buffer.concat([Buffer.from(header), data]), this.server);\n }\n\n async getPermission(addr: Address) {\n await this.creatingPermission;\n\n const permitted = this.permissionByAddr[addr.join(\":\")];\n if (!permitted) {\n this.creatingPermission = this.createPermission(addr);\n this.permissionByAddr[addr.join(\":\")] = true;\n await this.creatingPermission.catch((e) => {\n log(\"createPermission error\", e);\n throw e;\n });\n }\n }\n\n async getChannel(addr: Address) {\n if (this.channelBinding) {\n await this.channelBinding;\n }\n\n let channel = this.channelByAddr[addr.join(\":\")];\n\n if (!channel) {\n this.channelByAddr[addr.join(\":\")] = {\n number: this.channelNumber++,\n address: addr,\n };\n channel = this.channelByAddr[addr.join(\":\")];\n this.addrByChannel[channel.number] = addr;\n\n this.channelBinding = this.channelBind(channel.number, addr);\n await this.channelBinding.catch((e) => {\n log(\"channelBind error\", e);\n throw e;\n });\n this.channelRefreshAt = int(Date.now() / 1000) + this.channelRefreshTime;\n this.channelBinding = undefined;\n log(\"channelBind\", channel);\n } else if (this.channelRefreshAt < int(Date.now() / 1000)) {\n this.channelBinding = this.channelBind(channel.number, addr);\n this.channelRefreshAt = int(Date.now() / 1000) + this.channelRefreshTime;\n await this.channelBinding.catch((e) => {\n log(\"channelBind error\", e);\n throw e;\n });\n this.channelBinding = undefined;\n log(\"channelBind refresh\", channel);\n }\n return channel;\n }\n\n private async channelBind(channelNumber: number, addr: Address) {\n const request = new Message(methods.CHANNEL_BIND, classes.REQUEST);\n request\n .setAttribute(\"CHANNEL-NUMBER\", channelNumber)\n .setAttribute(\"XOR-PEER-ADDRESS\", addr);\n const [response] = await this.requestWithRetry(request, this.server);\n if (response.messageMethod !== methods.CHANNEL_BIND) {\n throw new Error(\"should be CHANNEL_BIND\");\n }\n }\n\n async sendStun(message: Message, addr: Address) {\n await this.send(message.bytes, addr);\n }\n\n async close() {\n this.refreshHandle?.resolve?.();\n await this.transport.close();\n }\n}\n\nexport interface TurnClientConfig {\n address: Address;\n username: string;\n password: string;\n}\nexport interface TurnClientOptions {\n lifetime?: number;\n ssl?: boolean;\n transport?: \"udp\" | \"tcp\";\n portRange?: [number, number];\n interfaceAddresses?: InterfaceAddresses;\n}\n\nexport async function createTurnClient(\n { address, username, password }: TurnClientConfig,\n {\n lifetime,\n portRange,\n interfaceAddresses,\n transport: transportType,\n }: TurnClientOptions = {},\n) {\n lifetime ??= DEFAULT_ALLOCATION_LIFETIME;\n transportType ??= \"udp\";\n\n const transport =\n transportType === \"udp\"\n ? await UdpTransport.init(\"udp4\", portRange, interfaceAddresses)\n : await TcpTransport.init(address);\n\n const turn = new TurnProtocol(\n address,\n username,\n password,\n lifetime,\n transport,\n );\n\n await turn.connectionMade();\n return turn;\n}\n\nexport async function createStunOverTurnClient(\n {\n address,\n username,\n password,\n }: {\n address: Address;\n username: string;\n password: string;\n },\n {\n lifetime,\n portRange,\n interfaceAddresses,\n transport: transportType,\n }: {\n lifetime?: number;\n ssl?: boolean;\n transport?: \"udp\" | \"tcp\";\n portRange?: [number, number];\n interfaceAddresses?: InterfaceAddresses;\n } = {},\n) {\n const turn = await createTurnClient(\n {\n address,\n username,\n password,\n },\n {\n lifetime,\n portRange,\n interfaceAddresses,\n transport: transportType,\n },\n );\n const turnTransport = new StunOverTurnProtocol(turn);\n return turnTransport;\n}\n\nexport function makeIntegrityKey(\n username: string,\n realm: string,\n password: string,\n) {\n return createHash(\"md5\")\n .update(Buffer.from([username, realm, password].join(\":\")))\n .digest();\n}\n\nfunction isChannelData(data: Buffer) {\n return (data[0] & 0xc0) == 0x40;\n}\n"]}
@@ -1,8 +1,11 @@
1
1
  import type { Candidate } from "../candidate";
2
+ import type { Event } from "../imports/common";
2
3
  import type { Message } from "../stun/message";
3
4
  export type Address = Readonly<[string, number]>;
4
5
  export interface Protocol {
5
6
  type: string;
7
+ onRequestReceived: Event<[Message, Address, Buffer]>;
8
+ onDataReceived: Event<[Buffer]>;
6
9
  request: (message: Message, addr: Address, integrityKey?: Buffer, retransmissions?: any) => Promise<[Message, Address]>;
7
10
  close: () => Promise<void>;
8
11
  connectionMade: (...args: any) => Promise<void>;
@@ -12,4 +15,5 @@ export interface Protocol {
12
15
  sentMessage?: Message;
13
16
  responseAddr?: Address;
14
17
  responseMessage?: string;
18
+ localIp?: string;
15
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../../ice/src/types/model.ts"],"names":[],"mappings":"","sourcesContent":["import type { Candidate } from \"../candidate\";\nimport type { Message } from \"../stun/message\";\n\nexport type Address = Readonly<[string, number]>;\n\nexport interface Protocol {\n type: string;\n request: (\n message: Message,\n addr: Address,\n integrityKey?: Buffer,\n retransmissions?: any,\n ) => Promise<[Message, Address]>;\n close: () => Promise<void>;\n connectionMade: (...args: any) => Promise<void>;\n sendStun: (message: Message, addr: Address) => Promise<void>;\n sendData: (data: Buffer, addr: Address) => Promise<void>;\n localCandidate?: Candidate;\n sentMessage?: Message;\n responseAddr?: Address;\n responseMessage?: string;\n}\n"]}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../../ice/src/types/model.ts"],"names":[],"mappings":"","sourcesContent":["import type { Candidate } from \"../candidate\";\nimport type { Event } from \"../imports/common\";\nimport type { Message } from \"../stun/message\";\n\nexport type Address = Readonly<[string, number]>;\n\nexport interface Protocol {\n type: string;\n onRequestReceived: Event<[Message, Address, Buffer]>;\n onDataReceived: Event<[Buffer]>;\n request: (\n message: Message,\n addr: Address,\n integrityKey?: Buffer,\n retransmissions?: any,\n ) => Promise<[Message, Address]>;\n close: () => Promise<void>;\n connectionMade: (...args: any) => Promise<void>;\n sendStun: (message: Message, addr: Address) => Promise<void>;\n sendData: (data: Buffer, addr: Address) => Promise<void>;\n localCandidate?: Candidate;\n sentMessage?: Message;\n responseAddr?: Address;\n responseMessage?: string;\n localIp?: string;\n}\n"]}
@@ -11,13 +11,15 @@ export declare class WEBMContainer {
11
11
  constructor(tracks: {
12
12
  width?: number;
13
13
  height?: number;
14
+ roll?: number;
14
15
  kind: "audio" | "video";
15
16
  codec: SupportedCodec;
16
17
  trackNumber: number;
17
18
  }[], encryptionKey?: Buffer);
18
- createTrackEntry(kind: string, trackNumber: number, codec: string, { width, height, }?: Partial<{
19
+ createTrackEntry(kind: string, trackNumber: number, codec: string, { width, height, roll, }?: Partial<{
19
20
  kind: string;
20
21
  width: number;
22
+ roll: number;
21
23
  height: number;
22
24
  }>): EBML.EBMLData;
23
25
  createSegment(
@@ -75,10 +75,11 @@ class WEBMContainer {
75
75
  value: (0, crypto_1.randomBytes)(16)
76
76
  });
77
77
  this.encryptionKey = encryptionKey;
78
- this.trackEntries = tracks.map(({ width, height, kind, codec, trackNumber }) => {
78
+ this.trackEntries = tracks.map(({ width, height, kind, codec, trackNumber, roll }) => {
79
79
  const track = this.createTrackEntry(kind, trackNumber, codec, {
80
80
  width,
81
81
  height,
82
+ roll,
82
83
  });
83
84
  const ivCounter = new Uint32Array(2);
84
85
  (0, crypto_1.randomFillSync)(ivCounter);
@@ -86,14 +87,19 @@ class WEBMContainer {
86
87
  return track;
87
88
  });
88
89
  }
89
- createTrackEntry(kind, trackNumber, codec, { width, height, } = {}) {
90
+ createTrackEntry(kind, trackNumber, codec, { width, height, roll, } = {}) {
90
91
  const trackElements = [];
91
92
  if (kind === "video") {
92
93
  width ?? (width = 640);
93
94
  height ?? (height = 360);
95
+ roll ?? (roll = 0);
94
96
  trackElements.push(EBML.element(EBML.ID.Video, [
95
97
  EBML.element(EBML.ID.PixelWidth, EBML.number(width)),
96
98
  EBML.element(EBML.ID.PixelHeight, EBML.number(height)),
99
+ EBML.element(EBML.ID.Projection, [
100
+ EBML.element(EBML.ID.ProjectionType, EBML.number(0)),
101
+ EBML.element(EBML.ID.ProjectionPoseRoll, EBML.float(roll)),
102
+ ]),
97
103
  ]));
98
104
  }
99
105
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"container.js","sourceRoot":"","sources":["../../../../../../../rtp/src/extra/container/webm/container.ts"],"names":[],"mappings":"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","sourcesContent":["import { createCipheriv, randomBytes, randomFillSync } from \"crypto\";\n\nimport { BitWriter2, BufferChain } from \"../../../../../common/src\";\nimport { OpusRtpPayload } from \"../../../codec\";\nimport * as EBML from \"./ebml\";\n\nexport class WEBMContainer {\n readonly ebmlHeader = EBML.build(\n EBML.element(EBML.ID.EBML, [\n EBML.element(EBML.ID.EBMLVersion, EBML.number(1)),\n EBML.element(EBML.ID.EBMLReadVersion, EBML.number(1)),\n EBML.element(EBML.ID.EBMLMaxIDLength, EBML.number(4)),\n EBML.element(EBML.ID.EBMLMaxSizeLength, EBML.number(8)),\n EBML.element(EBML.ID.DocType, EBML.string(\"webm\")),\n EBML.element(EBML.ID.DocTypeVersion, EBML.number(2)),\n EBML.element(EBML.ID.DocTypeReadVersion, EBML.number(2)),\n ]),\n );\n trackEntries: EBML.EBMLData[] = [];\n private trackIvs: { [trackNumber: number]: Uint32Array } = {};\n trackKeyIds: { [trackNumber: number]: Buffer } = {};\n encryptionKey?: Buffer;\n readonly encryptionKeyID = randomBytes(16);\n\n constructor(\n tracks: {\n width?: number;\n height?: number;\n kind: \"audio\" | \"video\";\n codec: SupportedCodec;\n trackNumber: number;\n }[],\n encryptionKey?: Buffer,\n ) {\n this.encryptionKey = encryptionKey;\n\n this.trackEntries = tracks.map(\n ({ width, height, kind, codec, trackNumber }) => {\n const track = this.createTrackEntry(kind, trackNumber, codec, {\n width,\n height,\n });\n const ivCounter = new Uint32Array(2);\n randomFillSync(ivCounter);\n this.trackIvs[trackNumber] = ivCounter;\n\n return track;\n },\n );\n }\n\n createTrackEntry(\n kind: string,\n trackNumber: number,\n codec: string,\n {\n width,\n height,\n }: Partial<{\n kind: string;\n width: number;\n height: number;\n }> = {},\n ) {\n const trackElements: EBML.EBMLData[] = [];\n\n if (kind === \"video\") {\n width ??= 640;\n height ??= 360;\n trackElements.push(\n EBML.element(EBML.ID.Video, [\n EBML.element(EBML.ID.PixelWidth, EBML.number(width)),\n EBML.element(EBML.ID.PixelHeight, EBML.number(height)),\n ]),\n );\n } else {\n trackElements.push(\n EBML.element(EBML.ID.Audio, [\n EBML.element(EBML.ID.SamplingFrequency, EBML.float(48000.0)),\n EBML.element(EBML.ID.Channels, EBML.number(2)),\n ]),\n );\n // only support OPUS\n trackElements.push(\n EBML.element(\n EBML.ID.CodecPrivate,\n EBML.bytes(OpusRtpPayload.createCodecPrivate()),\n ),\n );\n }\n\n if (this.encryptionKey) {\n const encryptionKeyID = this.encryptionKeyID;\n this.trackKeyIds[trackNumber] = encryptionKeyID;\n\n trackElements.push(\n EBML.element(\n EBML.ID.ContentEncodings,\n EBML.element(EBML.ID.ContentEncoding, [\n EBML.element(EBML.ID.ContentEncodingOrder, EBML.number(0)),\n EBML.element(EBML.ID.ContentEncodingScope, EBML.number(1)),\n EBML.element(EBML.ID.ContentEncodingType, EBML.number(1)),\n EBML.element(EBML.ID.ContentEncryption, [\n EBML.element(EBML.ID.EncryptionAlgorithm, EBML.number(5)),\n EBML.element(\n EBML.ID.EncryptionKeyID,\n EBML.bytes(encryptionKeyID),\n ),\n EBML.element(\n EBML.ID.ContentEncAESSettings,\n EBML.element(EBML.ID.AESSettingsCipherMode, EBML.number(1)),\n ),\n ]),\n ]),\n ),\n );\n }\n\n const trackEntry = EBML.element(EBML.ID.TrackEntry, [\n EBML.element(EBML.ID.TrackNumber, EBML.number(trackNumber)),\n EBML.element(EBML.ID.TrackUID, EBML.number(trackNumber)),\n EBML.element(EBML.ID.CodecName, EBML.string(codec)),\n EBML.element(EBML.ID.TrackType, EBML.number(kind === \"video\" ? 1 : 2)),\n EBML.element(\n EBML.ID.CodecID,\n EBML.string(`${kind === \"video\" ? \"V\" : \"A\"}_${codec}`),\n ),\n ...trackElements,\n ]);\n return trackEntry;\n }\n\n createSegment(\n /**ms */\n duration?: number,\n ) {\n const elements = [\n EBML.element(EBML.ID.TimecodeScale, EBML.number(millisecond)),\n EBML.element(EBML.ID.MuxingApp, EBML.string(\"webrtc\")),\n EBML.element(EBML.ID.WritingApp, EBML.string(\"webrtc\")),\n ];\n if (duration != undefined) {\n elements.push(EBML.element(EBML.ID.Duration, EBML.float(duration)));\n }\n return EBML.build(\n EBML.unknownSizeElement(EBML.ID.Segment, [\n EBML.element(EBML.ID.SeekHead, []),\n EBML.element(EBML.ID.Info, elements),\n EBML.element(EBML.ID.Tracks, this.trackEntries),\n ]),\n );\n }\n\n createDuration(\n /**ms */\n duration: number,\n ) {\n return EBML.build(EBML.element(EBML.ID.Duration, EBML.float(duration)));\n }\n\n createCuePoint(\n relativeTimestamp: number,\n trackNumber: number,\n clusterPosition: number,\n blockNumber: number,\n ) {\n return EBML.element(EBML.ID.CuePoint, [\n EBML.element(EBML.ID.CueTime, EBML.number(relativeTimestamp)),\n EBML.element(EBML.ID.CueTrackPositions, [\n EBML.element(EBML.ID.CueTrack, EBML.number(trackNumber)),\n EBML.element(EBML.ID.CueClusterPosition, EBML.number(clusterPosition)),\n EBML.element(EBML.ID.CueBlockNumber, EBML.number(blockNumber)),\n ]),\n ]);\n }\n\n createCues(cuePoints: EBML.EBMLData[]) {\n return EBML.build(EBML.element(EBML.ID.Cues, cuePoints));\n }\n\n createCluster(timecode: number) {\n return EBML.build(\n EBML.unknownSizeElement(EBML.ID.Cluster, [\n EBML.element(EBML.ID.Timecode, EBML.number(timecode)),\n ]),\n );\n }\n\n createSimpleBlock(\n frame: Buffer,\n isKeyframe: boolean,\n trackNumber: number,\n relativeTimestamp: number,\n ) {\n const elementId = Buffer.from([0xa3]);\n\n if (this.encryptionKey) {\n // 4.7 Signal Byte Format\n // 0 1 2 3 4 5 6 7\n // +-+-+-+-+-+-+-+-+\n // |X| RSV |P|E|\n // +-+-+-+-+-+-+-+-+\n const singleByte = new BitWriter2(8).set(0).set(0, 5).set(0).set(1);\n\n const iv = Buffer.alloc(16);\n const ivCounter = this.trackIvs[trackNumber];\n iv.writeUInt32BE(ivCounter[0], 0);\n iv.writeUInt32BE(ivCounter[1], 4);\n ivCounter[1]++;\n if (ivCounter[1] === 0) {\n ivCounter[0]++;\n }\n\n const cipher = createCipheriv(\"AES-128-CTR\", this.encryptionKey, iv);\n\n frame = Buffer.concat([\n singleByte.buffer,\n iv.subarray(0, 8),\n cipher.update(frame),\n cipher.final(),\n ]);\n }\n\n const contentSize: Uint8Array = EBML.vintEncodedNumber(\n 1 + 2 + 1 + frame.length,\n ).bytes;\n\n const keyframe = isKeyframe ? 1 : 0;\n const flags = new BitWriter2(8)\n .set(keyframe)\n .set(0, 3)\n .set(0)\n .set(0, 2)\n .set(0);\n\n const simpleBlock = Buffer.concat([\n elementId,\n contentSize,\n EBML.vintEncodedNumber(trackNumber).bytes,\n new BufferChain(2).writeInt16BE(relativeTimestamp).buffer,\n new BufferChain(1).writeUInt8(flags.value).buffer,\n frame,\n ]);\n return simpleBlock;\n }\n}\n\nexport const supportedCodecs = [\n \"MPEG4/ISO/AVC\",\n \"VP8\",\n \"VP9\",\n \"AV1\",\n \"OPUS\",\n] as const;\nexport type SupportedCodec = (typeof supportedCodecs)[number];\nconst millisecond = 1000000;\n"]}
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../../../../../../rtp/src/extra/container/webm/container.ts"],"names":[],"mappings":"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","sourcesContent":["import { createCipheriv, randomBytes, randomFillSync } from \"crypto\";\n\nimport { BitWriter2, BufferChain } from \"../../../../../common/src\";\nimport { OpusRtpPayload } from \"../../../codec\";\nimport * as EBML from \"./ebml\";\n\nexport class WEBMContainer {\n readonly ebmlHeader = EBML.build(\n EBML.element(EBML.ID.EBML, [\n EBML.element(EBML.ID.EBMLVersion, EBML.number(1)),\n EBML.element(EBML.ID.EBMLReadVersion, EBML.number(1)),\n EBML.element(EBML.ID.EBMLMaxIDLength, EBML.number(4)),\n EBML.element(EBML.ID.EBMLMaxSizeLength, EBML.number(8)),\n EBML.element(EBML.ID.DocType, EBML.string(\"webm\")),\n EBML.element(EBML.ID.DocTypeVersion, EBML.number(2)),\n EBML.element(EBML.ID.DocTypeReadVersion, EBML.number(2)),\n ]),\n );\n trackEntries: EBML.EBMLData[] = [];\n private trackIvs: { [trackNumber: number]: Uint32Array } = {};\n trackKeyIds: { [trackNumber: number]: Buffer } = {};\n encryptionKey?: Buffer;\n readonly encryptionKeyID = randomBytes(16);\n\n constructor(\n tracks: {\n width?: number;\n height?: number;\n roll?: number;\n kind: \"audio\" | \"video\";\n codec: SupportedCodec;\n trackNumber: number;\n }[],\n encryptionKey?: Buffer,\n ) {\n this.encryptionKey = encryptionKey;\n\n this.trackEntries = tracks.map(\n ({ width, height, kind, codec, trackNumber, roll }) => {\n const track = this.createTrackEntry(kind, trackNumber, codec, {\n width,\n height,\n roll,\n });\n const ivCounter = new Uint32Array(2);\n randomFillSync(ivCounter);\n this.trackIvs[trackNumber] = ivCounter;\n\n return track;\n },\n );\n }\n\n createTrackEntry(\n kind: string,\n trackNumber: number,\n codec: string,\n {\n width,\n height,\n roll,\n }: Partial<{\n kind: string;\n width: number;\n roll: number;\n height: number;\n }> = {},\n ) {\n const trackElements: EBML.EBMLData[] = [];\n\n if (kind === \"video\") {\n width ??= 640;\n height ??= 360;\n roll ??= 0;\n trackElements.push(\n EBML.element(EBML.ID.Video, [\n EBML.element(EBML.ID.PixelWidth, EBML.number(width)),\n EBML.element(EBML.ID.PixelHeight, EBML.number(height)),\n EBML.element(EBML.ID.Projection, [\n EBML.element(EBML.ID.ProjectionType, EBML.number(0)),\n EBML.element(EBML.ID.ProjectionPoseRoll, EBML.float(roll)),\n ]),\n ]),\n );\n } else {\n trackElements.push(\n EBML.element(EBML.ID.Audio, [\n EBML.element(EBML.ID.SamplingFrequency, EBML.float(48000.0)),\n EBML.element(EBML.ID.Channels, EBML.number(2)),\n ]),\n );\n // only support OPUS\n trackElements.push(\n EBML.element(\n EBML.ID.CodecPrivate,\n EBML.bytes(OpusRtpPayload.createCodecPrivate()),\n ),\n );\n }\n\n if (this.encryptionKey) {\n const encryptionKeyID = this.encryptionKeyID;\n this.trackKeyIds[trackNumber] = encryptionKeyID;\n\n trackElements.push(\n EBML.element(\n EBML.ID.ContentEncodings,\n EBML.element(EBML.ID.ContentEncoding, [\n EBML.element(EBML.ID.ContentEncodingOrder, EBML.number(0)),\n EBML.element(EBML.ID.ContentEncodingScope, EBML.number(1)),\n EBML.element(EBML.ID.ContentEncodingType, EBML.number(1)),\n EBML.element(EBML.ID.ContentEncryption, [\n EBML.element(EBML.ID.EncryptionAlgorithm, EBML.number(5)),\n EBML.element(\n EBML.ID.EncryptionKeyID,\n EBML.bytes(encryptionKeyID),\n ),\n EBML.element(\n EBML.ID.ContentEncAESSettings,\n EBML.element(EBML.ID.AESSettingsCipherMode, EBML.number(1)),\n ),\n ]),\n ]),\n ),\n );\n }\n\n const trackEntry = EBML.element(EBML.ID.TrackEntry, [\n EBML.element(EBML.ID.TrackNumber, EBML.number(trackNumber)),\n EBML.element(EBML.ID.TrackUID, EBML.number(trackNumber)),\n EBML.element(EBML.ID.CodecName, EBML.string(codec)),\n EBML.element(EBML.ID.TrackType, EBML.number(kind === \"video\" ? 1 : 2)),\n EBML.element(\n EBML.ID.CodecID,\n EBML.string(`${kind === \"video\" ? \"V\" : \"A\"}_${codec}`),\n ),\n ...trackElements,\n ]);\n return trackEntry;\n }\n\n createSegment(\n /**ms */\n duration?: number,\n ) {\n const elements = [\n EBML.element(EBML.ID.TimecodeScale, EBML.number(millisecond)),\n EBML.element(EBML.ID.MuxingApp, EBML.string(\"webrtc\")),\n EBML.element(EBML.ID.WritingApp, EBML.string(\"webrtc\")),\n ];\n if (duration != undefined) {\n elements.push(EBML.element(EBML.ID.Duration, EBML.float(duration)));\n }\n return EBML.build(\n EBML.unknownSizeElement(EBML.ID.Segment, [\n EBML.element(EBML.ID.SeekHead, []),\n EBML.element(EBML.ID.Info, elements),\n EBML.element(EBML.ID.Tracks, this.trackEntries),\n ]),\n );\n }\n\n createDuration(\n /**ms */\n duration: number,\n ) {\n return EBML.build(EBML.element(EBML.ID.Duration, EBML.float(duration)));\n }\n\n createCuePoint(\n relativeTimestamp: number,\n trackNumber: number,\n clusterPosition: number,\n blockNumber: number,\n ) {\n return EBML.element(EBML.ID.CuePoint, [\n EBML.element(EBML.ID.CueTime, EBML.number(relativeTimestamp)),\n EBML.element(EBML.ID.CueTrackPositions, [\n EBML.element(EBML.ID.CueTrack, EBML.number(trackNumber)),\n EBML.element(EBML.ID.CueClusterPosition, EBML.number(clusterPosition)),\n EBML.element(EBML.ID.CueBlockNumber, EBML.number(blockNumber)),\n ]),\n ]);\n }\n\n createCues(cuePoints: EBML.EBMLData[]) {\n return EBML.build(EBML.element(EBML.ID.Cues, cuePoints));\n }\n\n createCluster(timecode: number) {\n return EBML.build(\n EBML.unknownSizeElement(EBML.ID.Cluster, [\n EBML.element(EBML.ID.Timecode, EBML.number(timecode)),\n ]),\n );\n }\n\n createSimpleBlock(\n frame: Buffer,\n isKeyframe: boolean,\n trackNumber: number,\n relativeTimestamp: number,\n ) {\n const elementId = Buffer.from([0xa3]);\n\n if (this.encryptionKey) {\n // 4.7 Signal Byte Format\n // 0 1 2 3 4 5 6 7\n // +-+-+-+-+-+-+-+-+\n // |X| RSV |P|E|\n // +-+-+-+-+-+-+-+-+\n const singleByte = new BitWriter2(8).set(0).set(0, 5).set(0).set(1);\n\n const iv = Buffer.alloc(16);\n const ivCounter = this.trackIvs[trackNumber];\n iv.writeUInt32BE(ivCounter[0], 0);\n iv.writeUInt32BE(ivCounter[1], 4);\n ivCounter[1]++;\n if (ivCounter[1] === 0) {\n ivCounter[0]++;\n }\n\n const cipher = createCipheriv(\"AES-128-CTR\", this.encryptionKey, iv);\n\n frame = Buffer.concat([\n singleByte.buffer,\n iv.subarray(0, 8),\n cipher.update(frame),\n cipher.final(),\n ]);\n }\n\n const contentSize: Uint8Array = EBML.vintEncodedNumber(\n 1 + 2 + 1 + frame.length,\n ).bytes;\n\n const keyframe = isKeyframe ? 1 : 0;\n const flags = new BitWriter2(8)\n .set(keyframe)\n .set(0, 3)\n .set(0)\n .set(0, 2)\n .set(0);\n\n const simpleBlock = Buffer.concat([\n elementId,\n contentSize,\n EBML.vintEncodedNumber(trackNumber).bytes,\n new BufferChain(2).writeInt16BE(relativeTimestamp).buffer,\n new BufferChain(1).writeUInt8(flags.value).buffer,\n frame,\n ]);\n return simpleBlock;\n }\n}\n\nexport const supportedCodecs = [\n \"MPEG4/ISO/AVC\",\n \"VP8\",\n \"VP9\",\n \"AV1\",\n \"OPUS\",\n] as const;\nexport type SupportedCodec = (typeof supportedCodecs)[number];\nconst millisecond = 1000000;\n"]}
@@ -218,4 +218,10 @@ export declare const ID: {
218
218
  TagDefault: Uint8Array;
219
219
  TagString: Uint8Array;
220
220
  TagBinary: Uint8Array;
221
+ Projection: Uint8Array;
222
+ ProjectionType: Uint8Array;
223
+ ProjectionPrivate: Uint8Array;
224
+ ProjectionPoseYaw: Uint8Array;
225
+ ProjectionPosePitch: Uint8Array;
226
+ ProjectionPoseRoll: Uint8Array;
221
227
  };
@@ -221,5 +221,11 @@ exports.ID = {
221
221
  TagDefault: Uint8Array.of(0x44, 0x84),
222
222
  TagString: Uint8Array.of(0x44, 0x87),
223
223
  TagBinary: Uint8Array.of(0x44, 0x85),
224
+ Projection: Uint8Array.of(0x76, 0x70),
225
+ ProjectionType: Uint8Array.of(0x76, 0x71),
226
+ ProjectionPrivate: Uint8Array.of(0x76, 0x72),
227
+ ProjectionPoseYaw: Uint8Array.of(0x76, 0x73),
228
+ ProjectionPosePitch: Uint8Array.of(0x76, 0x74),
229
+ ProjectionPoseRoll: Uint8Array.of(0x76, 0x75),
224
230
  };
225
231
  //# sourceMappingURL=id.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"id.js","sourceRoot":"","sources":["../../../../../../../../rtp/src/extra/container/webm/ebml/id.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,EAAE,GAAG;IAChB,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC3C,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACtC,eAAe,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC1C,eAAe,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC1C,iBAAiB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC5C,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAClC,cAAc,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACzC,kBAAkB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC7C,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IACzB,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC1B,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC9C,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC/C,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC/B,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACjC,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACvC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC3C,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACrC,eAAe,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC1C,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACxC,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC7C,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACxC,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC7C,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACxC,gBAAgB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC3C,0BAA0B,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACrD,qBAAqB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAChD,kBAAkB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC7C,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC9C,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAClC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAChC,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACpC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACrC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC9C,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC7B,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACvC,iBAAiB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC5C,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC7B,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC7B,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAChC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC/B,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC1B,cAAc,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACzC,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC9B,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC/B,eAAe,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IACpC,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAClC,iBAAiB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IACtC,cAAc,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IACnC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC/B,cAAc,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACzC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC3B,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC9B,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC/B,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC7C,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC/B,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAChC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC9B,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAChC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAChC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACrC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC/B,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,eAAe,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAChD,2BAA2B,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC5D,kBAAkB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC7C,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC/B,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACzC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC5B,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACvC,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC1C,cAAc,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACzC,cAAc,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IACnC,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACvC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACrC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACtC,cAAc,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACzC,wBAAwB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACnD,mBAAmB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC9C,qBAAqB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAChD,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC1B,cAAc,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IACnC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC/B,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACrC,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACpC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC/B,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAChC,eAAe,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC1C,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACvC,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACxC,cAAc,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACzC,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACvC,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACxC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACtC,eAAe,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC1C,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC5C,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACjC,kBAAkB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC7C,cAAc,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACzC,qBAAqB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAChD,qBAAqB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAChD,iBAAiB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC5C,iBAAiB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC5C,gBAAgB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC3C,gBAAgB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC3C,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAChC,uBAAuB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAClD,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACpC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACjC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAClC,iBAAiB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC5C,qBAAqB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAChD,qBAAqB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAChD,qBAAqB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAChD,qBAAqB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAChD,qBAAqB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAChD,qBAAqB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAChD,uBAAuB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAClD,uBAAuB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAClD,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACvC,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACvC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC1B,iBAAiB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IACtC,uBAAuB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAClD,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC7B,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,cAAc,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IACnC,kBAAkB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IACvC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC/B,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAClC,cAAc,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IACnC,eAAe,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IACpC,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IACjC,gBAAgB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC3C,eAAe,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC1C,oBAAoB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC/C,oBAAoB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC/C,mBAAmB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC9C,kBAAkB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC7C,eAAe,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC1C,mBAAmB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC9C,iBAAiB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC5C,cAAc,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACzC,eAAe,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC1C,gBAAgB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC3C,eAAe,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC1C,cAAc,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACzC,kBAAkB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC7C,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC3C,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC7B,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC5B,iBAAiB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IACtC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC7B,kBAAkB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IACvC,mBAAmB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IACxC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAChC,cAAc,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACzC,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAClC,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IACjC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC/B,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAClD,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACvC,eAAe,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC1C,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACvC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAClC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC/C,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACvC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACrC,iBAAiB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC5C,kBAAkB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC7C,kBAAkB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC7C,mBAAmB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC9C,eAAe,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC1C,qBAAqB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAChD,qBAAqB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAChD,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAChC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACrC,gBAAgB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC3C,gBAAgB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IACrC,cAAc,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IACnC,iBAAiB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IACtC,kBAAkB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC7C,iBAAiB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC5C,wBAAwB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACnD,oBAAoB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC/C,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IACjC,kBAAkB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IACvC,cAAc,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IACnC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;IAC/B,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACvC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACtC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACtC,kBAAkB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC7C,kBAAkB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC7C,kBAAkB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC7C,eAAe,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC1C,eAAe,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC1C,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC3C,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC9B,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAClC,eAAe,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC1C,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACrC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACtC,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACxC,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACxC,gBAAgB,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC3C,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACpC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAClC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACtC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACrC,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACpC,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;CACrC,CAAC","sourcesContent":["/**\n * @see https://www.matroska.org/technical/specs/index.html\n */\nexport const ID = {\n EBML: Uint8Array.of(0x1a, 0x45, 0xdf, 0xa3),\n EBMLVersion: Uint8Array.of(0x42, 0x86),\n EBMLReadVersion: Uint8Array.of(0x42, 0xf7),\n EBMLMaxIDLength: Uint8Array.of(0x42, 0xf2),\n EBMLMaxSizeLength: Uint8Array.of(0x42, 0xf3),\n DocType: Uint8Array.of(0x42, 0x82),\n DocTypeVersion: Uint8Array.of(0x42, 0x87),\n DocTypeReadVersion: Uint8Array.of(0x42, 0x85),\n Void: Uint8Array.of(0xec),\n CRC32: Uint8Array.of(0xbf),\n Segment: Uint8Array.of(0x18, 0x53, 0x80, 0x67),\n SeekHead: Uint8Array.of(0x11, 0x4d, 0x9b, 0x74),\n Seek: Uint8Array.of(0x4d, 0xbb),\n SeekID: Uint8Array.of(0x53, 0xab),\n SeekPosition: Uint8Array.of(0x53, 0xac),\n Info: Uint8Array.of(0x15, 0x49, 0xa9, 0x66),\n SegmentUID: Uint8Array.of(0x73, 0xa4),\n SegmentFilename: Uint8Array.of(0x73, 0x84),\n PrevUID: Uint8Array.of(0x3c, 0xb9, 0x23),\n PrevFilename: Uint8Array.of(0x3c, 0x83, 0xab),\n NextUID: Uint8Array.of(0x3e, 0xb9, 0x23),\n NextFilename: Uint8Array.of(0x3e, 0x83, 0xbb),\n SegmentFamily: Uint8Array.of(0x44, 0x44),\n ChapterTranslate: Uint8Array.of(0x69, 0x24),\n ChapterTranslateEditionUID: Uint8Array.of(0x69, 0xfc),\n ChapterTranslateCodec: Uint8Array.of(0x69, 0xbf),\n ChapterTranslateID: Uint8Array.of(0x69, 0xa5),\n TimecodeScale: Uint8Array.of(0x2a, 0xd7, 0xb1),\n Duration: Uint8Array.of(0x44, 0x89),\n DateUTC: Uint8Array.of(0x44, 0x61),\n Title: Uint8Array.of(0x7b, 0xa9),\n MuxingApp: Uint8Array.of(0x4d, 0x80),\n WritingApp: Uint8Array.of(0x57, 0x41),\n Cluster: Uint8Array.of(0x1f, 0x43, 0xb6, 0x75),\n Timecode: Uint8Array.of(0xe7),\n SilentTracks: Uint8Array.of(0x58, 0x54),\n SilentTrackNumber: Uint8Array.of(0x58, 0xd7),\n Position: Uint8Array.of(0xa7),\n PrevSize: Uint8Array.of(0xab),\n SimpleBlock: Uint8Array.of(0xa3),\n BlockGroup: Uint8Array.of(0xa0),\n Block: Uint8Array.of(0xa1),\n BlockAdditions: Uint8Array.of(0x75, 0xa1),\n BlockMore: Uint8Array.of(0xa6),\n BlockAddID: Uint8Array.of(0xee),\n BlockAdditional: Uint8Array.of(0xa5),\n BlockDuration: Uint8Array.of(0x9b),\n ReferencePriority: Uint8Array.of(0xfa),\n ReferenceBlock: Uint8Array.of(0xfb),\n CodecState: Uint8Array.of(0xa4),\n DiscardPadding: Uint8Array.of(0x75, 0xa2),\n Slices: Uint8Array.of(0x8e),\n TimeSlice: Uint8Array.of(0xe8),\n LaceNumber: Uint8Array.of(0xcc),\n Tracks: Uint8Array.of(0x16, 0x54, 0xae, 0x6b),\n TrackEntry: Uint8Array.of(0xae),\n TrackNumber: Uint8Array.of(0xd7),\n TrackUID: Uint8Array.of(0x73, 0xc5),\n TrackType: Uint8Array.of(0x83),\n FlagEnabled: Uint8Array.of(0xb9),\n FlagDefault: Uint8Array.of(0x88),\n FlagForced: Uint8Array.of(0x55, 0xaa),\n FlagLacing: Uint8Array.of(0x9c),\n MinCache: Uint8Array.of(0x6d, 0xe7),\n MaxCache: Uint8Array.of(0x6d, 0xf8),\n DefaultDuration: Uint8Array.of(0x23, 0xe3, 0x83),\n DefaultDecodedFieldDuration: Uint8Array.of(0x23, 0x4e, 0x7a),\n MaxBlockAdditionID: Uint8Array.of(0x55, 0xee),\n Name: Uint8Array.of(0x53, 0x6e),\n Language: Uint8Array.of(0x22, 0xb5, 0x9c),\n CodecID: Uint8Array.of(0x86),\n CodecPrivate: Uint8Array.of(0x63, 0xa2),\n CodecName: Uint8Array.of(0x25, 0x86, 0x88),\n AttachmentLink: Uint8Array.of(0x74, 0x46),\n CodecDecodeAll: Uint8Array.of(0xaa),\n TrackOverlay: Uint8Array.of(0x6f, 0xab),\n CodecDelay: Uint8Array.of(0x56, 0xaa),\n SeekPreRoll: Uint8Array.of(0x56, 0xbb),\n TrackTranslate: Uint8Array.of(0x66, 0x24),\n TrackTranslateEditionUID: Uint8Array.of(0x66, 0xfc),\n TrackTranslateCodec: Uint8Array.of(0x66, 0xbf),\n TrackTranslateTrackID: Uint8Array.of(0x66, 0xa5),\n Video: Uint8Array.of(0xe0),\n FlagInterlaced: Uint8Array.of(0x9a),\n FieldOrder: Uint8Array.of(0x9d),\n StereoMode: Uint8Array.of(0x53, 0xb8),\n AlphaMode: Uint8Array.of(0x53, 0xc0),\n PixelWidth: Uint8Array.of(0xb0),\n PixelHeight: Uint8Array.of(0xba),\n PixelCropBottom: Uint8Array.of(0x54, 0xaa),\n PixelCropTop: Uint8Array.of(0x54, 0xbb),\n PixelCropLeft: Uint8Array.of(0x54, 0xcc),\n PixelCropRight: Uint8Array.of(0x54, 0xdd),\n DisplayWidth: Uint8Array.of(0x54, 0xb0),\n DisplayHeight: Uint8Array.of(0x54, 0xba),\n DisplayUnit: Uint8Array.of(0x54, 0xb2),\n AspectRatioType: Uint8Array.of(0x54, 0xb3),\n ColourSpace: Uint8Array.of(0x2e, 0xb5, 0x24),\n Colour: Uint8Array.of(0x55, 0xb0),\n MatrixCoefficients: Uint8Array.of(0x55, 0xb1),\n BitsPerChannel: Uint8Array.of(0x55, 0xb2),\n ChromaSubsamplingHorz: Uint8Array.of(0x55, 0xb3),\n ChromaSubsamplingVert: Uint8Array.of(0x55, 0xb4),\n CbSubsamplingHorz: Uint8Array.of(0x55, 0xb5),\n CbSubsamplingVert: Uint8Array.of(0x55, 0xb6),\n ChromaSitingHorz: Uint8Array.of(0x55, 0xb7),\n ChromaSitingVert: Uint8Array.of(0x55, 0xb8),\n Range: Uint8Array.of(0x55, 0xb9),\n TransferCharacteristics: Uint8Array.of(0x55, 0xba),\n Primaries: Uint8Array.of(0x55, 0xbb),\n MaxCLL: Uint8Array.of(0x55, 0xbc),\n MaxFALL: Uint8Array.of(0x55, 0xbd),\n MasteringMetadata: Uint8Array.of(0x55, 0xd0),\n PrimaryRChromaticityX: Uint8Array.of(0x55, 0xd1),\n PrimaryRChromaticityY: Uint8Array.of(0x55, 0xd2),\n PrimaryGChromaticityX: Uint8Array.of(0x55, 0xd3),\n PrimaryGChromaticityY: Uint8Array.of(0x55, 0xd4),\n PrimaryBChromaticityX: Uint8Array.of(0x55, 0xd5),\n PrimaryBChromaticityY: Uint8Array.of(0x55, 0xd6),\n WhitePointChromaticityX: Uint8Array.of(0x55, 0xd7),\n WhitePointChromaticityY: Uint8Array.of(0x55, 0xd8),\n LuminanceMax: Uint8Array.of(0x55, 0xd9),\n LuminanceMin: Uint8Array.of(0x55, 0xda),\n Audio: Uint8Array.of(0xe1),\n SamplingFrequency: Uint8Array.of(0xb5),\n OutputSamplingFrequency: Uint8Array.of(0x78, 0xb5),\n Channels: Uint8Array.of(0x9f),\n BitDepth: Uint8Array.of(0x62, 0x64),\n TrackOperation: Uint8Array.of(0xe2),\n TrackCombinePlanes: Uint8Array.of(0xe3),\n TrackPlane: Uint8Array.of(0xe4),\n TrackPlaneUID: Uint8Array.of(0xe5),\n TrackPlaneType: Uint8Array.of(0xe6),\n TrackJoinBlocks: Uint8Array.of(0xe9),\n TrackJoinUID: Uint8Array.of(0xed),\n ContentEncodings: Uint8Array.of(0x6d, 0x80),\n ContentEncoding: Uint8Array.of(0x62, 0x40),\n ContentEncodingOrder: Uint8Array.of(0x50, 0x31),\n ContentEncodingScope: Uint8Array.of(0x50, 0x32),\n ContentEncodingType: Uint8Array.of(0x50, 0x33),\n ContentCompression: Uint8Array.of(0x50, 0x34),\n ContentCompAlgo: Uint8Array.of(0x42, 0x54),\n ContentCompSettings: Uint8Array.of(0x42, 0x55),\n ContentEncryption: Uint8Array.of(0x50, 0x35),\n ContentEncAlgo: Uint8Array.of(0x47, 0xe1),\n ContentEncKeyID: Uint8Array.of(0x47, 0xe2),\n ContentSignature: Uint8Array.of(0x47, 0xe3),\n ContentSigKeyID: Uint8Array.of(0x47, 0xe4),\n ContentSigAlgo: Uint8Array.of(0x47, 0xe5),\n ContentSigHashAlgo: Uint8Array.of(0x47, 0xe6),\n Cues: Uint8Array.of(0x1c, 0x53, 0xbb, 0x6b),\n CuePoint: Uint8Array.of(0xbb),\n CueTime: Uint8Array.of(0xb3),\n CueTrackPositions: Uint8Array.of(0xb7),\n CueTrack: Uint8Array.of(0xf7),\n CueClusterPosition: Uint8Array.of(0xf1),\n CueRelativePosition: Uint8Array.of(0xf0),\n CueDuration: Uint8Array.of(0xb2),\n CueBlockNumber: Uint8Array.of(0x53, 0x78),\n CueCodecState: Uint8Array.of(0xea),\n CueReference: Uint8Array.of(0xdb),\n CueRefTime: Uint8Array.of(0x96),\n Attachments: Uint8Array.of(0x19, 0x41, 0xa4, 0x69),\n AttachedFile: Uint8Array.of(0x61, 0xa7),\n FileDescription: Uint8Array.of(0x46, 0x7e),\n FileName: Uint8Array.of(0x46, 0x6e),\n FileMimeType: Uint8Array.of(0x46, 0x60),\n FileData: Uint8Array.of(0x46, 0x5c),\n FileUID: Uint8Array.of(0x46, 0xae),\n Chapters: Uint8Array.of(0x10, 0x43, 0xa7, 0x70),\n EditionEntry: Uint8Array.of(0x45, 0xb9),\n EditionUID: Uint8Array.of(0x45, 0xbc),\n EditionFlagHidden: Uint8Array.of(0x45, 0xbd),\n EditionFlagDefault: Uint8Array.of(0x45, 0xdb),\n EditionFlagOrdered: Uint8Array.of(0x45, 0xdd),\n EncryptionAlgorithm: Uint8Array.of(0x47, 0xe1),\n EncryptionKeyID: Uint8Array.of(0x47, 0xe2),\n ContentEncAESSettings: Uint8Array.of(0x47, 0xe7),\n AESSettingsCipherMode: Uint8Array.of(0x47, 0xe8),\n ChapterAtom: Uint8Array.of(0xb6),\n ChapterUID: Uint8Array.of(0x73, 0xc4),\n ChapterStringUID: Uint8Array.of(0x56, 0x54),\n ChapterTimeStart: Uint8Array.of(0x91),\n ChapterTimeEnd: Uint8Array.of(0x92),\n ChapterFlagHidden: Uint8Array.of(0x98),\n ChapterFlagEnabled: Uint8Array.of(0x45, 0x98),\n ChapterSegmentUID: Uint8Array.of(0x6e, 0x67),\n ChapterSegmentEditionUID: Uint8Array.of(0x6e, 0xbc),\n ChapterPhysicalEquiv: Uint8Array.of(0x63, 0xc3),\n ChapterTrack: Uint8Array.of(0x8f),\n ChapterTrackNumber: Uint8Array.of(0x89),\n ChapterDisplay: Uint8Array.of(0x80),\n ChapString: Uint8Array.of(0x85),\n ChapLanguage: Uint8Array.of(0x43, 0x7c),\n ChapCountry: Uint8Array.of(0x43, 0x7e),\n ChapProcess: Uint8Array.of(0x69, 0x44),\n ChapProcessCodecID: Uint8Array.of(0x69, 0x55),\n ChapProcessPrivate: Uint8Array.of(0x45, 0x0d),\n ChapProcessCommand: Uint8Array.of(0x69, 0x11),\n ChapProcessTime: Uint8Array.of(0x69, 0x22),\n ChapProcessData: Uint8Array.of(0x69, 0x33),\n Tags: Uint8Array.of(0x12, 0x54, 0xc3, 0x67),\n Tag: Uint8Array.of(0x73, 0x73),\n Targets: Uint8Array.of(0x63, 0xc0),\n TargetTypeValue: Uint8Array.of(0x68, 0xca),\n TargetType: Uint8Array.of(0x63, 0xca),\n TagTrackUID: Uint8Array.of(0x63, 0xc5),\n TagEditionUID: Uint8Array.of(0x63, 0xc9),\n TagChapterUID: Uint8Array.of(0x63, 0xc4),\n TagAttachmentUID: Uint8Array.of(0x63, 0xc6),\n SimpleTag: Uint8Array.of(0x67, 0xc8),\n TagName: Uint8Array.of(0x45, 0xa3),\n TagLanguage: Uint8Array.of(0x44, 0x7a),\n TagDefault: Uint8Array.of(0x44, 0x84),\n TagString: Uint8Array.of(0x44, 0x87),\n TagBinary: Uint8Array.of(0x44, 0x85),\n};\n"]}
1
+ {"version":3,"file":"id.js","sourceRoot":"","sources":["../../../../../../../../rtp/src/extra/container/webm/ebml/id.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @see https://www.matroska.org/technical/specs/index.html\n */\nexport const ID = {\n EBML: Uint8Array.of(0x1a, 0x45, 0xdf, 0xa3),\n EBMLVersion: Uint8Array.of(0x42, 0x86),\n EBMLReadVersion: Uint8Array.of(0x42, 0xf7),\n EBMLMaxIDLength: Uint8Array.of(0x42, 0xf2),\n EBMLMaxSizeLength: Uint8Array.of(0x42, 0xf3),\n DocType: Uint8Array.of(0x42, 0x82),\n DocTypeVersion: Uint8Array.of(0x42, 0x87),\n DocTypeReadVersion: Uint8Array.of(0x42, 0x85),\n Void: Uint8Array.of(0xec),\n CRC32: Uint8Array.of(0xbf),\n Segment: Uint8Array.of(0x18, 0x53, 0x80, 0x67),\n SeekHead: Uint8Array.of(0x11, 0x4d, 0x9b, 0x74),\n Seek: Uint8Array.of(0x4d, 0xbb),\n SeekID: Uint8Array.of(0x53, 0xab),\n SeekPosition: Uint8Array.of(0x53, 0xac),\n Info: Uint8Array.of(0x15, 0x49, 0xa9, 0x66),\n SegmentUID: Uint8Array.of(0x73, 0xa4),\n SegmentFilename: Uint8Array.of(0x73, 0x84),\n PrevUID: Uint8Array.of(0x3c, 0xb9, 0x23),\n PrevFilename: Uint8Array.of(0x3c, 0x83, 0xab),\n NextUID: Uint8Array.of(0x3e, 0xb9, 0x23),\n NextFilename: Uint8Array.of(0x3e, 0x83, 0xbb),\n SegmentFamily: Uint8Array.of(0x44, 0x44),\n ChapterTranslate: Uint8Array.of(0x69, 0x24),\n ChapterTranslateEditionUID: Uint8Array.of(0x69, 0xfc),\n ChapterTranslateCodec: Uint8Array.of(0x69, 0xbf),\n ChapterTranslateID: Uint8Array.of(0x69, 0xa5),\n TimecodeScale: Uint8Array.of(0x2a, 0xd7, 0xb1),\n Duration: Uint8Array.of(0x44, 0x89),\n DateUTC: Uint8Array.of(0x44, 0x61),\n Title: Uint8Array.of(0x7b, 0xa9),\n MuxingApp: Uint8Array.of(0x4d, 0x80),\n WritingApp: Uint8Array.of(0x57, 0x41),\n Cluster: Uint8Array.of(0x1f, 0x43, 0xb6, 0x75),\n Timecode: Uint8Array.of(0xe7),\n SilentTracks: Uint8Array.of(0x58, 0x54),\n SilentTrackNumber: Uint8Array.of(0x58, 0xd7),\n Position: Uint8Array.of(0xa7),\n PrevSize: Uint8Array.of(0xab),\n SimpleBlock: Uint8Array.of(0xa3),\n BlockGroup: Uint8Array.of(0xa0),\n Block: Uint8Array.of(0xa1),\n BlockAdditions: Uint8Array.of(0x75, 0xa1),\n BlockMore: Uint8Array.of(0xa6),\n BlockAddID: Uint8Array.of(0xee),\n BlockAdditional: Uint8Array.of(0xa5),\n BlockDuration: Uint8Array.of(0x9b),\n ReferencePriority: Uint8Array.of(0xfa),\n ReferenceBlock: Uint8Array.of(0xfb),\n CodecState: Uint8Array.of(0xa4),\n DiscardPadding: Uint8Array.of(0x75, 0xa2),\n Slices: Uint8Array.of(0x8e),\n TimeSlice: Uint8Array.of(0xe8),\n LaceNumber: Uint8Array.of(0xcc),\n Tracks: Uint8Array.of(0x16, 0x54, 0xae, 0x6b),\n TrackEntry: Uint8Array.of(0xae),\n TrackNumber: Uint8Array.of(0xd7),\n TrackUID: Uint8Array.of(0x73, 0xc5),\n TrackType: Uint8Array.of(0x83),\n FlagEnabled: Uint8Array.of(0xb9),\n FlagDefault: Uint8Array.of(0x88),\n FlagForced: Uint8Array.of(0x55, 0xaa),\n FlagLacing: Uint8Array.of(0x9c),\n MinCache: Uint8Array.of(0x6d, 0xe7),\n MaxCache: Uint8Array.of(0x6d, 0xf8),\n DefaultDuration: Uint8Array.of(0x23, 0xe3, 0x83),\n DefaultDecodedFieldDuration: Uint8Array.of(0x23, 0x4e, 0x7a),\n MaxBlockAdditionID: Uint8Array.of(0x55, 0xee),\n Name: Uint8Array.of(0x53, 0x6e),\n Language: Uint8Array.of(0x22, 0xb5, 0x9c),\n CodecID: Uint8Array.of(0x86),\n CodecPrivate: Uint8Array.of(0x63, 0xa2),\n CodecName: Uint8Array.of(0x25, 0x86, 0x88),\n AttachmentLink: Uint8Array.of(0x74, 0x46),\n CodecDecodeAll: Uint8Array.of(0xaa),\n TrackOverlay: Uint8Array.of(0x6f, 0xab),\n CodecDelay: Uint8Array.of(0x56, 0xaa),\n SeekPreRoll: Uint8Array.of(0x56, 0xbb),\n TrackTranslate: Uint8Array.of(0x66, 0x24),\n TrackTranslateEditionUID: Uint8Array.of(0x66, 0xfc),\n TrackTranslateCodec: Uint8Array.of(0x66, 0xbf),\n TrackTranslateTrackID: Uint8Array.of(0x66, 0xa5),\n Video: Uint8Array.of(0xe0),\n FlagInterlaced: Uint8Array.of(0x9a),\n FieldOrder: Uint8Array.of(0x9d),\n StereoMode: Uint8Array.of(0x53, 0xb8),\n AlphaMode: Uint8Array.of(0x53, 0xc0),\n PixelWidth: Uint8Array.of(0xb0),\n PixelHeight: Uint8Array.of(0xba),\n PixelCropBottom: Uint8Array.of(0x54, 0xaa),\n PixelCropTop: Uint8Array.of(0x54, 0xbb),\n PixelCropLeft: Uint8Array.of(0x54, 0xcc),\n PixelCropRight: Uint8Array.of(0x54, 0xdd),\n DisplayWidth: Uint8Array.of(0x54, 0xb0),\n DisplayHeight: Uint8Array.of(0x54, 0xba),\n DisplayUnit: Uint8Array.of(0x54, 0xb2),\n AspectRatioType: Uint8Array.of(0x54, 0xb3),\n ColourSpace: Uint8Array.of(0x2e, 0xb5, 0x24),\n Colour: Uint8Array.of(0x55, 0xb0),\n MatrixCoefficients: Uint8Array.of(0x55, 0xb1),\n BitsPerChannel: Uint8Array.of(0x55, 0xb2),\n ChromaSubsamplingHorz: Uint8Array.of(0x55, 0xb3),\n ChromaSubsamplingVert: Uint8Array.of(0x55, 0xb4),\n CbSubsamplingHorz: Uint8Array.of(0x55, 0xb5),\n CbSubsamplingVert: Uint8Array.of(0x55, 0xb6),\n ChromaSitingHorz: Uint8Array.of(0x55, 0xb7),\n ChromaSitingVert: Uint8Array.of(0x55, 0xb8),\n Range: Uint8Array.of(0x55, 0xb9),\n TransferCharacteristics: Uint8Array.of(0x55, 0xba),\n Primaries: Uint8Array.of(0x55, 0xbb),\n MaxCLL: Uint8Array.of(0x55, 0xbc),\n MaxFALL: Uint8Array.of(0x55, 0xbd),\n MasteringMetadata: Uint8Array.of(0x55, 0xd0),\n PrimaryRChromaticityX: Uint8Array.of(0x55, 0xd1),\n PrimaryRChromaticityY: Uint8Array.of(0x55, 0xd2),\n PrimaryGChromaticityX: Uint8Array.of(0x55, 0xd3),\n PrimaryGChromaticityY: Uint8Array.of(0x55, 0xd4),\n PrimaryBChromaticityX: Uint8Array.of(0x55, 0xd5),\n PrimaryBChromaticityY: Uint8Array.of(0x55, 0xd6),\n WhitePointChromaticityX: Uint8Array.of(0x55, 0xd7),\n WhitePointChromaticityY: Uint8Array.of(0x55, 0xd8),\n LuminanceMax: Uint8Array.of(0x55, 0xd9),\n LuminanceMin: Uint8Array.of(0x55, 0xda),\n Audio: Uint8Array.of(0xe1),\n SamplingFrequency: Uint8Array.of(0xb5),\n OutputSamplingFrequency: Uint8Array.of(0x78, 0xb5),\n Channels: Uint8Array.of(0x9f),\n BitDepth: Uint8Array.of(0x62, 0x64),\n TrackOperation: Uint8Array.of(0xe2),\n TrackCombinePlanes: Uint8Array.of(0xe3),\n TrackPlane: Uint8Array.of(0xe4),\n TrackPlaneUID: Uint8Array.of(0xe5),\n TrackPlaneType: Uint8Array.of(0xe6),\n TrackJoinBlocks: Uint8Array.of(0xe9),\n TrackJoinUID: Uint8Array.of(0xed),\n ContentEncodings: Uint8Array.of(0x6d, 0x80),\n ContentEncoding: Uint8Array.of(0x62, 0x40),\n ContentEncodingOrder: Uint8Array.of(0x50, 0x31),\n ContentEncodingScope: Uint8Array.of(0x50, 0x32),\n ContentEncodingType: Uint8Array.of(0x50, 0x33),\n ContentCompression: Uint8Array.of(0x50, 0x34),\n ContentCompAlgo: Uint8Array.of(0x42, 0x54),\n ContentCompSettings: Uint8Array.of(0x42, 0x55),\n ContentEncryption: Uint8Array.of(0x50, 0x35),\n ContentEncAlgo: Uint8Array.of(0x47, 0xe1),\n ContentEncKeyID: Uint8Array.of(0x47, 0xe2),\n ContentSignature: Uint8Array.of(0x47, 0xe3),\n ContentSigKeyID: Uint8Array.of(0x47, 0xe4),\n ContentSigAlgo: Uint8Array.of(0x47, 0xe5),\n ContentSigHashAlgo: Uint8Array.of(0x47, 0xe6),\n Cues: Uint8Array.of(0x1c, 0x53, 0xbb, 0x6b),\n CuePoint: Uint8Array.of(0xbb),\n CueTime: Uint8Array.of(0xb3),\n CueTrackPositions: Uint8Array.of(0xb7),\n CueTrack: Uint8Array.of(0xf7),\n CueClusterPosition: Uint8Array.of(0xf1),\n CueRelativePosition: Uint8Array.of(0xf0),\n CueDuration: Uint8Array.of(0xb2),\n CueBlockNumber: Uint8Array.of(0x53, 0x78),\n CueCodecState: Uint8Array.of(0xea),\n CueReference: Uint8Array.of(0xdb),\n CueRefTime: Uint8Array.of(0x96),\n Attachments: Uint8Array.of(0x19, 0x41, 0xa4, 0x69),\n AttachedFile: Uint8Array.of(0x61, 0xa7),\n FileDescription: Uint8Array.of(0x46, 0x7e),\n FileName: Uint8Array.of(0x46, 0x6e),\n FileMimeType: Uint8Array.of(0x46, 0x60),\n FileData: Uint8Array.of(0x46, 0x5c),\n FileUID: Uint8Array.of(0x46, 0xae),\n Chapters: Uint8Array.of(0x10, 0x43, 0xa7, 0x70),\n EditionEntry: Uint8Array.of(0x45, 0xb9),\n EditionUID: Uint8Array.of(0x45, 0xbc),\n EditionFlagHidden: Uint8Array.of(0x45, 0xbd),\n EditionFlagDefault: Uint8Array.of(0x45, 0xdb),\n EditionFlagOrdered: Uint8Array.of(0x45, 0xdd),\n EncryptionAlgorithm: Uint8Array.of(0x47, 0xe1),\n EncryptionKeyID: Uint8Array.of(0x47, 0xe2),\n ContentEncAESSettings: Uint8Array.of(0x47, 0xe7),\n AESSettingsCipherMode: Uint8Array.of(0x47, 0xe8),\n ChapterAtom: Uint8Array.of(0xb6),\n ChapterUID: Uint8Array.of(0x73, 0xc4),\n ChapterStringUID: Uint8Array.of(0x56, 0x54),\n ChapterTimeStart: Uint8Array.of(0x91),\n ChapterTimeEnd: Uint8Array.of(0x92),\n ChapterFlagHidden: Uint8Array.of(0x98),\n ChapterFlagEnabled: Uint8Array.of(0x45, 0x98),\n ChapterSegmentUID: Uint8Array.of(0x6e, 0x67),\n ChapterSegmentEditionUID: Uint8Array.of(0x6e, 0xbc),\n ChapterPhysicalEquiv: Uint8Array.of(0x63, 0xc3),\n ChapterTrack: Uint8Array.of(0x8f),\n ChapterTrackNumber: Uint8Array.of(0x89),\n ChapterDisplay: Uint8Array.of(0x80),\n ChapString: Uint8Array.of(0x85),\n ChapLanguage: Uint8Array.of(0x43, 0x7c),\n ChapCountry: Uint8Array.of(0x43, 0x7e),\n ChapProcess: Uint8Array.of(0x69, 0x44),\n ChapProcessCodecID: Uint8Array.of(0x69, 0x55),\n ChapProcessPrivate: Uint8Array.of(0x45, 0x0d),\n ChapProcessCommand: Uint8Array.of(0x69, 0x11),\n ChapProcessTime: Uint8Array.of(0x69, 0x22),\n ChapProcessData: Uint8Array.of(0x69, 0x33),\n Tags: Uint8Array.of(0x12, 0x54, 0xc3, 0x67),\n Tag: Uint8Array.of(0x73, 0x73),\n Targets: Uint8Array.of(0x63, 0xc0),\n TargetTypeValue: Uint8Array.of(0x68, 0xca),\n TargetType: Uint8Array.of(0x63, 0xca),\n TagTrackUID: Uint8Array.of(0x63, 0xc5),\n TagEditionUID: Uint8Array.of(0x63, 0xc9),\n TagChapterUID: Uint8Array.of(0x63, 0xc4),\n TagAttachmentUID: Uint8Array.of(0x63, 0xc6),\n SimpleTag: Uint8Array.of(0x67, 0xc8),\n TagName: Uint8Array.of(0x45, 0xa3),\n TagLanguage: Uint8Array.of(0x44, 0x7a),\n TagDefault: Uint8Array.of(0x44, 0x84),\n TagString: Uint8Array.of(0x44, 0x87),\n TagBinary: Uint8Array.of(0x44, 0x85),\n Projection: Uint8Array.of(0x76, 0x70),\n ProjectionType: Uint8Array.of(0x76, 0x71),\n ProjectionPrivate: Uint8Array.of(0x76, 0x72),\n ProjectionPoseYaw: Uint8Array.of(0x76, 0x73),\n ProjectionPosePitch: Uint8Array.of(0x76, 0x74),\n ProjectionPoseRoll: Uint8Array.of(0x76, 0x75),\n};\n"]}
@@ -1,6 +1,15 @@
1
1
  import { Event } from "../../imports/common";
2
2
  import type { SupportedCodec } from "../container/webm";
3
3
  import type { AVProcessor } from "./interface";
4
+ export interface WebmTrack {
5
+ width?: number;
6
+ height?: number;
7
+ roll?: number;
8
+ kind: MediaKind;
9
+ codec: SupportedCodec;
10
+ clockRate: number;
11
+ trackNumber: number;
12
+ }
4
13
  export type WebmInput = {
5
14
  frame?: {
6
15
  data: Buffer;
@@ -29,14 +38,7 @@ export interface WebmOption {
29
38
  strictTimestamp?: boolean;
30
39
  }
31
40
  export declare class WebmBase implements AVProcessor<WebmInput> {
32
- tracks: {
33
- width?: number;
34
- height?: number;
35
- kind: MediaKind;
36
- codec: SupportedCodec;
37
- clockRate: number;
38
- trackNumber: number;
39
- }[];
41
+ tracks: WebmTrack[];
40
42
  private output;
41
43
  private options;
42
44
  private builder;
@@ -53,14 +55,7 @@ export declare class WebmBase implements AVProcessor<WebmInput> {
53
55
  videoKeyframeReceived: boolean;
54
56
  internalStats: {};
55
57
  onStopped: Event<any[]>;
56
- constructor(tracks: {
57
- width?: number;
58
- height?: number;
59
- kind: MediaKind;
60
- codec: SupportedCodec;
61
- clockRate: number;
62
- trackNumber: number;
63
- }[], output: (output: WebmOutput) => void, options?: WebmOption);
58
+ constructor(tracks: WebmTrack[], output: (output: WebmOutput) => void, options?: WebmOption);
64
59
  toJSON(): Record<string, any>;
65
60
  private processInput;
66
61
  processAudioInput: (input: WebmInput) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"webm.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/webm.ts"],"names":[],"mappings":"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","sourcesContent":["import { Event } from \"../../imports/common\";\n\nimport {\n WEBMContainer,\n getEBMLByteLength,\n numberToByteArray,\n vintEncode,\n} from \"../container\";\nimport type { SupportedCodec } from \"../container/webm\";\nimport type { AVProcessor } from \"./interface\";\n\nexport type WebmInput = {\n frame?: {\n data: Buffer;\n isKeyframe: boolean;\n /**ms */\n time: number;\n };\n eol?: boolean;\n};\n\nexport interface WebmOutput {\n saveToFile?: Buffer;\n kind?: \"initial\" | \"cluster\" | \"block\" | \"cuePoints\";\n /**ms */\n previousDuration?: number;\n eol?: {\n /**ms */\n duration: number;\n durationElement: Uint8Array;\n header: Buffer;\n };\n}\n\nexport interface WebmOption {\n /**ms */\n duration?: number;\n encryptionKey?: Buffer;\n strictTimestamp?: boolean;\n}\n\nexport class WebmBase implements AVProcessor<WebmInput> {\n private builder: WEBMContainer;\n private relativeTimestamp = 0;\n private timestamps: { [pt: number]: ClusterTimestamp } = {};\n private cuePoints: CuePoint[] = [];\n private position = 0;\n private clusterCounts = 0;\n /**ms */\n elapsed?: number;\n audioStopped = false;\n videoStopped = false;\n stopped = false;\n videoKeyframeReceived = false;\n internalStats = {};\n onStopped = new Event();\n\n constructor(\n public tracks: {\n width?: number;\n height?: number;\n kind: MediaKind;\n codec: SupportedCodec;\n clockRate: number;\n trackNumber: number;\n }[],\n private output: (output: WebmOutput) => void,\n private options: WebmOption = {},\n ) {\n this.builder = new WEBMContainer(tracks, options.encryptionKey);\n\n tracks.forEach((t) => {\n this.timestamps[t.trackNumber] = new ClusterTimestamp();\n });\n }\n\n toJSON(): Record<string, any> {\n return {\n ...this.internalStats,\n videoKeyframeReceived: this.videoKeyframeReceived,\n videoStopped: this.videoStopped,\n audioStopped: this.audioStopped,\n stopped: this.stopped,\n };\n }\n\n private processInput(input: WebmInput, trackNumber: number) {\n if (this.stopped) {\n return;\n }\n\n const track = this.tracks.find((t) => t.trackNumber === trackNumber);\n if (!track) {\n throw new Error(\"track not found\");\n }\n\n if (!input.frame) {\n if (this.tracks.length === 2) {\n if (track.kind === \"audio\") {\n this.audioStopped = true;\n this.internalStats[\"audioStopped\"] = new Date().toISOString();\n if (this.videoStopped) {\n this.stop();\n }\n } else {\n this.videoStopped = true;\n this.internalStats[\"videoStopped\"] = new Date().toISOString();\n if (this.audioStopped) {\n this.stop();\n }\n }\n } else if (input.eol) {\n this.stop();\n }\n\n return;\n }\n\n if (track.kind === \"audio\") {\n this.audioStopped = false;\n } else {\n this.videoStopped = false;\n }\n\n this.onFrameReceived({ ...input.frame, trackNumber });\n }\n\n processAudioInput = (input: WebmInput) => {\n const track = this.tracks.find((t) => t.kind === \"audio\");\n if (track) {\n this.internalStats[\"processAudioInput\"] = new Date().toISOString();\n this.processInput(input, track.trackNumber);\n }\n };\n\n processVideoInput = (input: WebmInput) => {\n if (input.frame?.isKeyframe) {\n this.videoKeyframeReceived = true;\n }\n if (!this.videoKeyframeReceived && input?.frame?.isKeyframe !== true) {\n return;\n }\n\n const track = this.tracks.find((t) => t.kind === \"video\");\n if (track) {\n this.internalStats[\"processVideoInput\"] = new Date().toISOString();\n this.processInput(input, track.trackNumber);\n }\n };\n\n protected start() {\n const staticPart = Buffer.concat([\n this.builder.ebmlHeader,\n this.builder.createSegment(this.options.duration),\n ]);\n this.output({ saveToFile: staticPart, kind: \"initial\" });\n this.position += staticPart.length;\n\n const video = this.tracks.find((t) => t.kind === \"video\");\n if (video) {\n this.cuePoints.push(\n new CuePoint(this.builder, video.trackNumber, 0.0, this.position),\n );\n }\n }\n\n private onFrameReceived(frame: WebmInput[\"frame\"] & { trackNumber: number }) {\n const track = this.tracks.find((t) => t.trackNumber === frame.trackNumber);\n if (!track) {\n return;\n }\n\n this.internalStats[\"onFrameReceived_trackNumber\" + frame.trackNumber] =\n new Date().toISOString();\n this.internalStats[\"onFrameReceived_count\"] =\n (this.internalStats[\"onFrameReceived_count\"] ?? 0) + 1;\n\n const timestampManager = this.timestamps[track.trackNumber];\n if (timestampManager.baseTime == undefined) {\n for (const t of Object.values(this.timestamps)) {\n t.baseTime = frame.time;\n }\n }\n\n // clusterの経過時間 ms\n let elapsed = timestampManager.update(frame.time);\n\n if (this.clusterCounts === 0) {\n this.createCluster(0.0, 0);\n } else if (\n (track.kind === \"video\" && frame.isKeyframe) ||\n // simpleBlockのタイムスタンプはsigned 16bitだから\n elapsed > MaxSinged16Int\n ) {\n this.relativeTimestamp += elapsed;\n\n if (elapsed !== 0) {\n this.cuePoints.push(\n new CuePoint(\n this.builder,\n track.trackNumber,\n this.relativeTimestamp,\n this.position,\n ),\n );\n\n this.createCluster(this.relativeTimestamp, elapsed);\n Object.values(this.timestamps).forEach((t) => t.shift(elapsed));\n elapsed = timestampManager.update(frame.time);\n }\n }\n\n if (elapsed >= 0) {\n this.createSimpleBlock({\n frame,\n trackNumber: track.trackNumber,\n elapsed,\n });\n } else {\n this.internalStats[\"delayed_frame\"] = {\n elapsed,\n trackNumber: track.trackNumber,\n timestamp: new Date().toISOString(),\n count: (this.internalStats[\"delayed_frame\"]?.count ?? 0) + 1,\n };\n }\n }\n\n private createCluster(\n timestamp: number,\n /**ms */\n duration: number,\n ) {\n const cluster = this.builder.createCluster(timestamp);\n this.clusterCounts++;\n this.output({\n saveToFile: Buffer.from(cluster),\n kind: \"cluster\",\n previousDuration: duration,\n });\n this.position += cluster.length;\n this.elapsed = undefined;\n }\n\n private createSimpleBlock({\n frame,\n trackNumber,\n elapsed,\n }: {\n frame: NonNullable<WebmInput[\"frame\"]>;\n trackNumber: number;\n elapsed: number;\n }) {\n if (this.elapsed == undefined) {\n this.elapsed = elapsed;\n }\n if (elapsed < this.elapsed && this.options.strictTimestamp) {\n this.internalStats[\"previous_timestamp\"] = {\n elapsed,\n present: this.elapsed,\n trackNumber,\n timestamp: new Date().toISOString(),\n count: (this.internalStats[\"previous_timestamp\"]?.count ?? 0) + 1,\n };\n return;\n }\n if (elapsed > this.elapsed + 1000) {\n const key = \"maybe_packetLost-\" + trackNumber;\n this.internalStats[key] = {\n elapsed,\n present: this.elapsed,\n trackNumber,\n timestamp: new Date().toISOString(),\n count: (this.internalStats[key]?.count ?? 0) + 1,\n };\n }\n this.elapsed = elapsed;\n\n const block = this.builder.createSimpleBlock(\n frame.data,\n frame.isKeyframe,\n trackNumber,\n elapsed,\n );\n\n this.internalStats[\"createSimpleBlock_trackNumber\" + trackNumber] =\n new Date().toISOString();\n\n this.output({ saveToFile: block, kind: \"block\" });\n this.position += block.length;\n const [cuePoint] = this.cuePoints.slice(-1);\n if (cuePoint) {\n cuePoint.blockNumber++;\n }\n }\n\n stop() {\n if (this.stopped) {\n return;\n }\n this.videoStopped = true;\n this.audioStopped = true;\n this.stopped = true;\n this.internalStats[\"stopped\"] = new Date().toISOString();\n\n const latestTimestamp = Object.values(this.timestamps)\n .sort((a, b) => a.elapsed - b.elapsed)\n .reverse()[0].elapsed;\n const duration = this.relativeTimestamp + latestTimestamp;\n\n const cues = this.builder.createCues(this.cuePoints.map((c) => c.build()));\n this.output({\n saveToFile: Buffer.from(cues),\n kind: \"cuePoints\",\n previousDuration: duration,\n });\n\n const durationElement = this.builder.createDuration(duration);\n const header = Buffer.concat([\n this.builder.ebmlHeader,\n this.builder.createSegment(duration),\n ]);\n\n this.output({ eol: { duration, durationElement, header } });\n\n this.timestamps = {};\n this.cuePoints = [];\n this.internalStats = {};\n this.output = undefined as any;\n\n this.onStopped.execute();\n }\n}\n\nclass ClusterTimestamp {\n /**ms */\n baseTime?: number;\n /**ms */\n elapsed = 0;\n private offset = 0;\n\n shift(\n /**ms */\n elapsed: number,\n ) {\n this.offset += elapsed;\n }\n\n update(\n /**ms */\n time: number,\n ) {\n if (this.baseTime == undefined) {\n throw new Error(\"baseTime not exist\");\n }\n\n this.elapsed = time - this.baseTime - this.offset;\n\n return this.elapsed;\n }\n}\n\nclass CuePoint {\n /**\n * cuesの後のclusterのあるべき位置\n * cuesはclusterの前に挿入される\n */\n cuesLength = 0;\n blockNumber = 0;\n\n constructor(\n private readonly builder: WEBMContainer,\n private readonly trackNumber: number,\n private readonly relativeTimestamp: number,\n public position: number,\n ) {}\n\n build() {\n return this.builder.createCuePoint(\n this.relativeTimestamp,\n this.trackNumber,\n this.position - 48 + this.cuesLength,\n this.blockNumber,\n );\n }\n}\n\n/**4294967295 */\nexport const Max32Uint = Number(0x01n << 32n) - 1;\n/**32767 */\nexport const MaxSinged16Int = (0x01 << 16) / 2 - 1;\n\nexport const DurationPosition = 83;\n\nexport const SegmentSizePosition = 40;\n\nexport function replaceSegmentSize(totalFileSize: number) {\n const bodySize = totalFileSize - SegmentSizePosition;\n const resize = [\n ...vintEncode(numberToByteArray(bodySize, getEBMLByteLength(bodySize))),\n ];\n const todoFill = 8 - resize.length - 2;\n if (todoFill > 0) {\n resize.push(0xec);\n if (todoFill > 1) {\n const voidSize = vintEncode(\n numberToByteArray(todoFill, getEBMLByteLength(todoFill)),\n );\n [...voidSize].forEach((i) => resize.push(i));\n }\n }\n return Buffer.from(resize);\n}\n\nexport type MediaKind = \"video\" | \"audio\";\n"]}
1
+ {"version":3,"file":"webm.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/webm.ts"],"names":[],"mappings":"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","sourcesContent":["import { Event } from \"../../imports/common\";\n\nimport {\n WEBMContainer,\n getEBMLByteLength,\n numberToByteArray,\n vintEncode,\n} from \"../container\";\nimport type { SupportedCodec } from \"../container/webm\";\nimport type { AVProcessor } from \"./interface\";\n\nexport interface WebmTrack {\n width?: number;\n height?: number;\n roll?: number;\n kind: MediaKind;\n codec: SupportedCodec;\n clockRate: number;\n trackNumber: number;\n}\n\nexport type WebmInput = {\n frame?: {\n data: Buffer;\n isKeyframe: boolean;\n /**ms */\n time: number;\n };\n eol?: boolean;\n};\n\nexport interface WebmOutput {\n saveToFile?: Buffer;\n kind?: \"initial\" | \"cluster\" | \"block\" | \"cuePoints\";\n /**ms */\n previousDuration?: number;\n eol?: {\n /**ms */\n duration: number;\n durationElement: Uint8Array;\n header: Buffer;\n };\n}\n\nexport interface WebmOption {\n /**ms */\n duration?: number;\n encryptionKey?: Buffer;\n strictTimestamp?: boolean;\n}\n\nexport class WebmBase implements AVProcessor<WebmInput> {\n private builder: WEBMContainer;\n private relativeTimestamp = 0;\n private timestamps: { [pt: number]: ClusterTimestamp } = {};\n private cuePoints: CuePoint[] = [];\n private position = 0;\n private clusterCounts = 0;\n /**ms */\n elapsed?: number;\n audioStopped = false;\n videoStopped = false;\n stopped = false;\n videoKeyframeReceived = false;\n internalStats = {};\n onStopped = new Event();\n\n constructor(\n public tracks: WebmTrack[],\n private output: (output: WebmOutput) => void,\n private options: WebmOption = {},\n ) {\n this.builder = new WEBMContainer(tracks, options.encryptionKey);\n\n tracks.forEach((t) => {\n this.timestamps[t.trackNumber] = new ClusterTimestamp();\n });\n }\n\n toJSON(): Record<string, any> {\n return {\n ...this.internalStats,\n videoKeyframeReceived: this.videoKeyframeReceived,\n videoStopped: this.videoStopped,\n audioStopped: this.audioStopped,\n stopped: this.stopped,\n };\n }\n\n private processInput(input: WebmInput, trackNumber: number) {\n if (this.stopped) {\n return;\n }\n\n const track = this.tracks.find((t) => t.trackNumber === trackNumber);\n if (!track) {\n throw new Error(\"track not found\");\n }\n\n if (!input.frame) {\n if (this.tracks.length === 2) {\n if (track.kind === \"audio\") {\n this.audioStopped = true;\n this.internalStats[\"audioStopped\"] = new Date().toISOString();\n if (this.videoStopped) {\n this.stop();\n }\n } else {\n this.videoStopped = true;\n this.internalStats[\"videoStopped\"] = new Date().toISOString();\n if (this.audioStopped) {\n this.stop();\n }\n }\n } else if (input.eol) {\n this.stop();\n }\n\n return;\n }\n\n if (track.kind === \"audio\") {\n this.audioStopped = false;\n } else {\n this.videoStopped = false;\n }\n\n this.onFrameReceived({ ...input.frame, trackNumber });\n }\n\n processAudioInput = (input: WebmInput) => {\n const track = this.tracks.find((t) => t.kind === \"audio\");\n if (track) {\n this.internalStats[\"processAudioInput\"] = new Date().toISOString();\n this.processInput(input, track.trackNumber);\n }\n };\n\n processVideoInput = (input: WebmInput) => {\n if (input.frame?.isKeyframe) {\n this.videoKeyframeReceived = true;\n }\n if (!this.videoKeyframeReceived && input?.frame?.isKeyframe !== true) {\n return;\n }\n\n const track = this.tracks.find((t) => t.kind === \"video\");\n if (track) {\n this.internalStats[\"processVideoInput\"] = new Date().toISOString();\n this.processInput(input, track.trackNumber);\n }\n };\n\n protected start() {\n const staticPart = Buffer.concat([\n this.builder.ebmlHeader,\n this.builder.createSegment(this.options.duration),\n ]);\n this.output({ saveToFile: staticPart, kind: \"initial\" });\n this.position += staticPart.length;\n\n const video = this.tracks.find((t) => t.kind === \"video\");\n if (video) {\n this.cuePoints.push(\n new CuePoint(this.builder, video.trackNumber, 0.0, this.position),\n );\n }\n }\n\n private onFrameReceived(frame: WebmInput[\"frame\"] & { trackNumber: number }) {\n const track = this.tracks.find((t) => t.trackNumber === frame.trackNumber);\n if (!track) {\n return;\n }\n\n this.internalStats[\"onFrameReceived_trackNumber\" + frame.trackNumber] =\n new Date().toISOString();\n this.internalStats[\"onFrameReceived_count\"] =\n (this.internalStats[\"onFrameReceived_count\"] ?? 0) + 1;\n\n const timestampManager = this.timestamps[track.trackNumber];\n if (timestampManager.baseTime == undefined) {\n for (const t of Object.values(this.timestamps)) {\n t.baseTime = frame.time;\n }\n }\n\n // clusterの経過時間 ms\n let elapsed = timestampManager.update(frame.time);\n\n if (this.clusterCounts === 0) {\n this.createCluster(0.0, 0);\n } else if (\n (track.kind === \"video\" && frame.isKeyframe) ||\n // simpleBlockのタイムスタンプはsigned 16bitだから\n elapsed > MaxSinged16Int\n ) {\n this.relativeTimestamp += elapsed;\n\n if (elapsed !== 0) {\n this.cuePoints.push(\n new CuePoint(\n this.builder,\n track.trackNumber,\n this.relativeTimestamp,\n this.position,\n ),\n );\n\n this.createCluster(this.relativeTimestamp, elapsed);\n Object.values(this.timestamps).forEach((t) => t.shift(elapsed));\n elapsed = timestampManager.update(frame.time);\n }\n }\n\n if (elapsed >= 0) {\n this.createSimpleBlock({\n frame,\n trackNumber: track.trackNumber,\n elapsed,\n });\n } else {\n this.internalStats[\"delayed_frame\"] = {\n elapsed,\n trackNumber: track.trackNumber,\n timestamp: new Date().toISOString(),\n count: (this.internalStats[\"delayed_frame\"]?.count ?? 0) + 1,\n };\n }\n }\n\n private createCluster(\n timestamp: number,\n /**ms */\n duration: number,\n ) {\n const cluster = this.builder.createCluster(timestamp);\n this.clusterCounts++;\n this.output({\n saveToFile: Buffer.from(cluster),\n kind: \"cluster\",\n previousDuration: duration,\n });\n this.position += cluster.length;\n this.elapsed = undefined;\n }\n\n private createSimpleBlock({\n frame,\n trackNumber,\n elapsed,\n }: {\n frame: NonNullable<WebmInput[\"frame\"]>;\n trackNumber: number;\n elapsed: number;\n }) {\n if (this.elapsed == undefined) {\n this.elapsed = elapsed;\n }\n if (elapsed < this.elapsed && this.options.strictTimestamp) {\n this.internalStats[\"previous_timestamp\"] = {\n elapsed,\n present: this.elapsed,\n trackNumber,\n timestamp: new Date().toISOString(),\n count: (this.internalStats[\"previous_timestamp\"]?.count ?? 0) + 1,\n };\n return;\n }\n if (elapsed > this.elapsed + 1000) {\n const key = \"maybe_packetLost-\" + trackNumber;\n this.internalStats[key] = {\n elapsed,\n present: this.elapsed,\n trackNumber,\n timestamp: new Date().toISOString(),\n count: (this.internalStats[key]?.count ?? 0) + 1,\n };\n }\n this.elapsed = elapsed;\n\n const block = this.builder.createSimpleBlock(\n frame.data,\n frame.isKeyframe,\n trackNumber,\n elapsed,\n );\n\n this.internalStats[\"createSimpleBlock_trackNumber\" + trackNumber] =\n new Date().toISOString();\n\n this.output({ saveToFile: block, kind: \"block\" });\n this.position += block.length;\n const [cuePoint] = this.cuePoints.slice(-1);\n if (cuePoint) {\n cuePoint.blockNumber++;\n }\n }\n\n stop() {\n if (this.stopped) {\n return;\n }\n this.videoStopped = true;\n this.audioStopped = true;\n this.stopped = true;\n this.internalStats[\"stopped\"] = new Date().toISOString();\n\n const latestTimestamp = Object.values(this.timestamps)\n .sort((a, b) => a.elapsed - b.elapsed)\n .reverse()[0].elapsed;\n const duration = this.relativeTimestamp + latestTimestamp;\n\n const cues = this.builder.createCues(this.cuePoints.map((c) => c.build()));\n this.output({\n saveToFile: Buffer.from(cues),\n kind: \"cuePoints\",\n previousDuration: duration,\n });\n\n const durationElement = this.builder.createDuration(duration);\n const header = Buffer.concat([\n this.builder.ebmlHeader,\n this.builder.createSegment(duration),\n ]);\n\n this.output({ eol: { duration, durationElement, header } });\n\n this.timestamps = {};\n this.cuePoints = [];\n this.internalStats = {};\n this.output = undefined as any;\n\n this.onStopped.execute();\n }\n}\n\nclass ClusterTimestamp {\n /**ms */\n baseTime?: number;\n /**ms */\n elapsed = 0;\n private offset = 0;\n\n shift(\n /**ms */\n elapsed: number,\n ) {\n this.offset += elapsed;\n }\n\n update(\n /**ms */\n time: number,\n ) {\n if (this.baseTime == undefined) {\n throw new Error(\"baseTime not exist\");\n }\n\n this.elapsed = time - this.baseTime - this.offset;\n\n return this.elapsed;\n }\n}\n\nclass CuePoint {\n /**\n * cuesの後のclusterのあるべき位置\n * cuesはclusterの前に挿入される\n */\n cuesLength = 0;\n blockNumber = 0;\n\n constructor(\n private readonly builder: WEBMContainer,\n private readonly trackNumber: number,\n private readonly relativeTimestamp: number,\n public position: number,\n ) {}\n\n build() {\n return this.builder.createCuePoint(\n this.relativeTimestamp,\n this.trackNumber,\n this.position - 48 + this.cuesLength,\n this.blockNumber,\n );\n }\n}\n\n/**4294967295 */\nexport const Max32Uint = Number(0x01n << 32n) - 1;\n/**32767 */\nexport const MaxSinged16Int = (0x01 << 16) / 2 - 1;\n\nexport const DurationPosition = 83;\n\nexport const SegmentSizePosition = 40;\n\nexport function replaceSegmentSize(totalFileSize: number) {\n const bodySize = totalFileSize - SegmentSizePosition;\n const resize = [\n ...vintEncode(numberToByteArray(bodySize, getEBMLByteLength(bodySize))),\n ];\n const todoFill = 8 - resize.length - 2;\n if (todoFill > 0) {\n resize.push(0xec);\n if (todoFill > 1) {\n const voidSize = vintEncode(\n numberToByteArray(todoFill, getEBMLByteLength(todoFill)),\n );\n [...voidSize].forEach((i) => resize.push(i));\n }\n }\n return Buffer.from(resize);\n}\n\nexport type MediaKind = \"video\" | \"audio\";\n"]}