werift 0.18.13 → 0.18.15
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.
- package/lib/common/src/binary.js.map +1 -1
- package/lib/common/src/index.d.ts +0 -1
- package/lib/common/src/index.js +0 -1
- package/lib/common/src/index.js.map +1 -1
- package/lib/dtls/src/client.js.map +1 -1
- package/lib/dtls/src/context/cipher.js +1 -1
- package/lib/dtls/src/context/cipher.js.map +1 -1
- package/lib/dtls/src/context/dtls.js.map +1 -1
- package/lib/dtls/src/context/transport.js.map +1 -1
- package/lib/dtls/src/flight/client/flight1.js.map +1 -1
- package/lib/dtls/src/flight/client/flight5.js.map +1 -1
- package/lib/dtls/src/flight/flight.js +1 -1
- package/lib/dtls/src/flight/flight.js.map +1 -1
- package/lib/dtls/src/flight/server/flight4.js.map +1 -1
- package/lib/dtls/src/flight/server/flight6.js.map +1 -1
- package/lib/dtls/src/handshake/extensions/ellipticCurves.js +1 -1
- package/lib/dtls/src/handshake/extensions/ellipticCurves.js.map +1 -1
- package/lib/dtls/src/handshake/extensions/extendedMasterSecret.js +1 -1
- package/lib/dtls/src/handshake/extensions/extendedMasterSecret.js.map +1 -1
- package/lib/dtls/src/handshake/extensions/renegotiationIndication.js +1 -1
- package/lib/dtls/src/handshake/extensions/renegotiationIndication.js.map +1 -1
- package/lib/dtls/src/handshake/extensions/signature.js +1 -1
- package/lib/dtls/src/handshake/extensions/signature.js.map +1 -1
- package/lib/dtls/src/handshake/extensions/useSrtp.js +1 -1
- package/lib/dtls/src/handshake/extensions/useSrtp.js.map +1 -1
- package/lib/dtls/src/handshake/message/alert.js +1 -1
- package/lib/dtls/src/handshake/message/alert.js.map +1 -1
- package/lib/dtls/src/handshake/message/certificate.js +1 -1
- package/lib/dtls/src/handshake/message/certificate.js.map +1 -1
- package/lib/dtls/src/handshake/message/changeCipherSpec.js +1 -1
- package/lib/dtls/src/handshake/message/changeCipherSpec.js.map +1 -1
- package/lib/dtls/src/handshake/message/client/certificateVerify.js +1 -1
- package/lib/dtls/src/handshake/message/client/certificateVerify.js.map +1 -1
- package/lib/dtls/src/handshake/message/client/hello.js +1 -1
- package/lib/dtls/src/handshake/message/client/hello.js.map +1 -1
- package/lib/dtls/src/handshake/message/client/keyExchange.js +1 -1
- package/lib/dtls/src/handshake/message/client/keyExchange.js.map +1 -1
- package/lib/dtls/src/handshake/message/finished.js.map +1 -1
- package/lib/dtls/src/handshake/message/server/certificateRequest.js +1 -1
- package/lib/dtls/src/handshake/message/server/certificateRequest.js.map +1 -1
- package/lib/dtls/src/handshake/message/server/hello.js +1 -1
- package/lib/dtls/src/handshake/message/server/hello.js.map +1 -1
- package/lib/dtls/src/handshake/message/server/helloDone.js +1 -1
- package/lib/dtls/src/handshake/message/server/helloDone.js.map +1 -1
- package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js +1 -1
- package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js.map +1 -1
- package/lib/dtls/src/handshake/message/server/keyExchange.js +1 -1
- package/lib/dtls/src/handshake/message/server/keyExchange.js.map +1 -1
- package/lib/dtls/src/handshake/random.js +1 -1
- package/lib/dtls/src/handshake/random.js.map +1 -1
- package/lib/dtls/src/record/message/fragment.js +1 -1
- package/lib/dtls/src/record/message/fragment.js.map +1 -1
- package/lib/dtls/src/record/message/header.js +2 -2
- package/lib/dtls/src/record/message/header.js.map +1 -1
- package/lib/dtls/src/record/message/plaintext.js +1 -1
- package/lib/dtls/src/record/message/plaintext.js.map +1 -1
- package/lib/dtls/src/server.js.map +1 -1
- package/lib/dtls/src/socket.js.map +1 -1
- package/lib/dtls/src/transport.js.map +1 -1
- package/lib/ice/src/candidate.js.map +1 -1
- package/lib/ice/src/exceptions.js.map +1 -1
- package/lib/ice/src/helper.js.map +1 -1
- package/lib/ice/src/ice.js.map +1 -1
- package/lib/ice/src/stun/attributes.js.map +1 -1
- package/lib/ice/src/stun/message.js.map +1 -1
- package/lib/ice/src/stun/protocol.js.map +1 -1
- package/lib/ice/src/stun/transaction.js.map +1 -1
- package/lib/ice/src/transport.js.map +1 -1
- package/lib/ice/src/turn/protocol.js.map +1 -1
- package/lib/rtp/src/codec/av1.js +1 -1
- package/lib/rtp/src/codec/av1.js.map +1 -1
- package/lib/rtp/src/container/index.d.ts +2 -1
- package/lib/rtp/src/container/index.js +2 -1
- package/lib/rtp/src/container/index.js.map +1 -1
- package/lib/rtp/src/container/mp4/container.d.ts +66 -0
- package/lib/rtp/src/container/mp4/container.js +262 -0
- package/lib/rtp/src/container/mp4/container.js.map +1 -0
- package/lib/rtp/src/container/mp4/exp-golomb.d.ts +20 -0
- package/lib/rtp/src/container/mp4/exp-golomb.js +144 -0
- package/lib/rtp/src/container/mp4/exp-golomb.js.map +1 -0
- package/lib/rtp/src/container/mp4/h264.d.ts +42 -0
- package/lib/rtp/src/container/mp4/h264.js +240 -0
- package/lib/rtp/src/container/mp4/h264.js.map +1 -0
- package/lib/rtp/src/container/mp4/index.d.ts +2 -0
- package/lib/rtp/src/container/mp4/index.js +19 -0
- package/lib/rtp/src/container/mp4/index.js.map +1 -0
- package/lib/rtp/src/container/mp4/mp4box.d.ts +5 -0
- package/lib/rtp/src/container/mp4/mp4box.js +32 -0
- package/lib/rtp/src/container/mp4/mp4box.js.map +1 -0
- package/lib/rtp/src/container/mp4/sps-parser.d.ts +40 -0
- package/lib/rtp/src/container/mp4/sps-parser.js +291 -0
- package/lib/rtp/src/container/mp4/sps-parser.js.map +1 -0
- package/lib/rtp/src/container/ogg/index.d.ts +1 -0
- package/lib/rtp/src/container/ogg/index.js +18 -0
- package/lib/rtp/src/container/ogg/index.js.map +1 -0
- package/lib/rtp/src/container/ogg/parser.d.ts +12 -0
- package/lib/rtp/src/container/ogg/parser.js +100 -0
- package/lib/rtp/src/container/ogg/parser.js.map +1 -0
- package/lib/rtp/src/container/{webm.d.ts → webm/container.d.ts} +1 -1
- package/lib/rtp/src/container/{webm.js → webm/container.js} +6 -6
- package/lib/rtp/src/container/webm/container.js.map +1 -0
- package/lib/rtp/src/container/webm/ebml/ebml.js.map +1 -0
- package/lib/rtp/src/container/webm/ebml/id.js.map +1 -0
- package/lib/rtp/src/container/webm/ebml/index.js.map +1 -0
- package/lib/rtp/src/container/webm/ebml/typedArrayUtils.js.map +1 -0
- package/lib/rtp/src/container/webm/index.d.ts +2 -0
- package/lib/rtp/src/container/webm/index.js +19 -0
- package/lib/rtp/src/container/webm/index.js.map +1 -0
- package/lib/rtp/src/processor/depacketizer.js.map +1 -1
- package/lib/rtp/src/processor/dtx.d.ts +1 -1
- package/lib/rtp/src/processor/dtx.js.map +1 -1
- package/lib/rtp/src/processor/index.d.ts +2 -0
- package/lib/rtp/src/processor/index.js +2 -0
- package/lib/rtp/src/processor/index.js.map +1 -1
- package/lib/rtp/src/processor/jitterBuffer.js.map +1 -1
- package/lib/rtp/src/processor/jitterBufferTransformer.js.map +1 -1
- package/lib/rtp/src/processor/lipsync.js.map +1 -1
- package/lib/rtp/src/processor/lipsyncCallback.js.map +1 -1
- package/lib/rtp/src/processor/mp4.d.ts +50 -0
- package/lib/rtp/src/processor/mp4.js +162 -0
- package/lib/rtp/src/processor/mp4.js.map +1 -0
- package/lib/rtp/src/processor/mp4Callback.d.ts +12 -0
- package/lib/rtp/src/processor/mp4Callback.js +83 -0
- package/lib/rtp/src/processor/mp4Callback.js.map +1 -0
- package/lib/rtp/src/processor/mute.d.ts +1 -1
- package/lib/rtp/src/processor/mute.js +6 -3
- package/lib/rtp/src/processor/mute.js.map +1 -1
- package/lib/rtp/src/processor/muteCallback.js.map +1 -1
- package/lib/rtp/src/processor/nack.js +2 -3
- package/lib/rtp/src/processor/nack.js.map +1 -1
- package/lib/rtp/src/processor/ntpTime.d.ts +1 -1
- package/lib/rtp/src/processor/ntpTime.js.map +1 -1
- package/lib/rtp/src/processor/rtcpCallback.js.map +1 -1
- package/lib/rtp/src/processor/rtpCallback.js.map +1 -1
- package/lib/rtp/src/processor/rtpStream.js.map +1 -1
- package/lib/rtp/src/processor/rtpTime.js.map +1 -1
- package/lib/rtp/src/processor/webm.d.ts +1 -1
- package/lib/rtp/src/processor/webm.js +1 -1
- package/lib/rtp/src/processor/webm.js.map +1 -1
- package/lib/rtp/src/processor/webmCallback.d.ts +1 -1
- package/lib/rtp/src/processor/webmCallback.js.map +1 -1
- package/lib/rtp/src/processor/webmStream.d.ts +1 -1
- package/lib/rtp/src/processor/webmStream.js.map +1 -1
- package/lib/rtp/src/rtcp/psfb/fullIntraRequest.js +1 -1
- package/lib/rtp/src/rtcp/psfb/fullIntraRequest.js.map +1 -1
- package/lib/rtp/src/rtcp/psfb/index.js +1 -1
- package/lib/rtp/src/rtcp/psfb/index.js.map +1 -1
- package/lib/rtp/src/rtcp/psfb/pictureLossIndication.js +1 -1
- package/lib/rtp/src/rtcp/psfb/pictureLossIndication.js.map +1 -1
- package/lib/rtp/src/rtcp/psfb/remb.js +1 -1
- package/lib/rtp/src/rtcp/psfb/remb.js.map +1 -1
- package/lib/rtp/src/rtcp/rr.js +3 -7
- package/lib/rtp/src/rtcp/rr.js.map +1 -1
- package/lib/rtp/src/rtcp/rtpfb/index.js +1 -1
- package/lib/rtp/src/rtcp/rtpfb/index.js.map +1 -1
- package/lib/rtp/src/rtcp/rtpfb/nack.js +6 -13
- package/lib/rtp/src/rtcp/rtpfb/nack.js.map +1 -1
- package/lib/rtp/src/rtcp/rtpfb/twcc.js +12 -8
- package/lib/rtp/src/rtcp/rtpfb/twcc.js.map +1 -1
- package/lib/rtp/src/rtcp/sdes.js +1 -1
- package/lib/rtp/src/rtcp/sdes.js.map +1 -1
- package/lib/rtp/src/rtcp/sr.js +2 -6
- package/lib/rtp/src/rtcp/sr.js.map +1 -1
- package/lib/rtp/src/rtp/headerExtension.d.ts +5 -0
- package/lib/rtp/src/rtp/headerExtension.js +35 -9
- package/lib/rtp/src/rtp/headerExtension.js.map +1 -1
- package/lib/rtp/src/rtp/red/encoder.js.map +1 -1
- package/lib/rtp/src/rtp/red/handler.js.map +1 -1
- package/lib/rtp/src/rtp/rtp.js.map +1 -1
- package/lib/rtp/src/srtp/cipher/ctr.js.map +1 -1
- package/lib/rtp/src/srtp/cipher/gcm.js.map +1 -1
- package/lib/rtp/src/srtp/cipher/index.js.map +1 -1
- package/lib/rtp/src/srtp/context/context.js.map +1 -1
- package/lib/rtp/src/srtp/session.js.map +1 -1
- package/lib/rtp/src/srtp/srtcp.js.map +1 -1
- package/lib/rtp/src/srtp/srtp.js.map +1 -1
- package/lib/rtp/src/util.js.map +1 -1
- package/lib/sctp/src/chunk.js +17 -17
- package/lib/sctp/src/chunk.js.map +1 -1
- package/lib/sctp/src/param.js +3 -3
- package/lib/sctp/src/param.js.map +1 -1
- package/lib/sctp/src/sctp.js.map +1 -1
- package/lib/sctp/src/transport.js.map +1 -1
- package/lib/webrtc/src/const.js.map +1 -1
- package/lib/webrtc/src/dataChannel.js.map +1 -1
- package/lib/webrtc/src/media/parameters.js.map +1 -1
- package/lib/webrtc/src/media/receiver/nack.js.map +1 -1
- package/lib/webrtc/src/media/receiver/receiverTwcc.js.map +1 -1
- package/lib/webrtc/src/media/receiver/statistics.js.map +1 -1
- package/lib/webrtc/src/media/router.js.map +1 -1
- package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
- package/lib/webrtc/src/media/rtpSender.js.map +1 -1
- package/lib/webrtc/src/media/rtpTransceiver.d.ts +1 -1
- package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
- package/lib/webrtc/src/media/sender/senderBWE.js.map +1 -1
- package/lib/webrtc/src/media/track.js.map +1 -1
- package/lib/webrtc/src/nonstandard/recorder/index.js.map +1 -1
- package/lib/webrtc/src/nonstandard/recorder/writer/index.js.map +1 -1
- package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
- package/lib/webrtc/src/nonstandard/userMedia.js.map +1 -1
- package/lib/webrtc/src/peerConnection.js.map +1 -1
- package/lib/webrtc/src/sdp.js.map +1 -1
- package/lib/webrtc/src/transport/dtls.d.ts +1 -1
- package/lib/webrtc/src/transport/dtls.js.map +1 -1
- package/lib/webrtc/src/transport/ice.d.ts +2 -2
- package/lib/webrtc/src/transport/ice.js.map +1 -1
- package/lib/webrtc/src/transport/sctp.js.map +1 -1
- package/lib/webrtc/src/types/domain.d.ts +2 -2
- package/lib/webrtc/src/types/domain.js.map +1 -1
- package/lib/webrtc/src/utils.d.ts +1 -0
- package/lib/webrtc/src/utils.js +9 -1
- package/lib/webrtc/src/utils.js.map +1 -1
- package/package.json +5 -3
- package/src/const.ts +1 -1
- package/src/dataChannel.ts +3 -3
- package/src/media/parameters.ts +3 -3
- package/src/media/receiver/nack.ts +7 -4
- package/src/media/receiver/receiverTwcc.ts +5 -5
- package/src/media/receiver/statistics.ts +1 -1
- package/src/media/router.ts +5 -5
- package/src/media/rtpReceiver.ts +9 -9
- package/src/media/rtpSender.ts +8 -8
- package/src/media/rtpTransceiver.ts +3 -3
- package/src/media/sender/senderBWE.ts +2 -2
- package/src/media/track.ts +1 -1
- package/src/nonstandard/recorder/index.ts +1 -1
- package/src/nonstandard/recorder/writer/index.ts +1 -1
- package/src/nonstandard/recorder/writer/webm.ts +2 -2
- package/src/nonstandard/userMedia.ts +1 -1
- package/src/peerConnection.ts +52 -52
- package/src/sdp.ts +27 -21
- package/src/transport/dtls.ts +13 -10
- package/src/transport/ice.ts +6 -6
- package/src/transport/sctp.ts +4 -4
- package/src/types/domain.ts +2 -2
- package/src/utils.ts +11 -2
- package/lib/common/src/array.d.ts +0 -1
- package/lib/common/src/array.js +0 -15
- package/lib/common/src/array.js.map +0 -1
- package/lib/rtp/src/container/ebml/ebml.js.map +0 -1
- package/lib/rtp/src/container/ebml/id.js.map +0 -1
- package/lib/rtp/src/container/ebml/index.js.map +0 -1
- package/lib/rtp/src/container/ebml/typedArrayUtils.js.map +0 -1
- package/lib/rtp/src/container/webm.js.map +0 -1
- /package/lib/rtp/src/container/{ebml → webm/ebml}/ebml.d.ts +0 -0
- /package/lib/rtp/src/container/{ebml → webm/ebml}/ebml.js +0 -0
- /package/lib/rtp/src/container/{ebml → webm/ebml}/id.d.ts +0 -0
- /package/lib/rtp/src/container/{ebml → webm/ebml}/id.js +0 -0
- /package/lib/rtp/src/container/{ebml → webm/ebml}/index.d.ts +0 -0
- /package/lib/rtp/src/container/{ebml → webm/ebml}/index.js +0 -0
- /package/lib/rtp/src/container/{ebml → webm/ebml}/typedArrayUtils.d.ts +0 -0
- /package/lib/rtp/src/container/{ebml → webm/ebml}/typedArrayUtils.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ntpTime.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/ntpTime.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AAEpC,0BAOY;AAeZ,MAAa,WAAW;IAWtB,YAAmB,SAAiB
|
|
1
|
+
{"version":3,"file":"ntpTime.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/ntpTime.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"crypto\";\n\nimport {\n Max32Uint,\n ntpTime2Sec,\n Processor,\n RtcpPacket,\n RtcpSrPacket,\n RtpPacket,\n} from \"..\";\n\nexport type NtpTimeInput = {\n rtp?: RtpPacket;\n eol?: boolean;\n rtcp?: RtcpPacket;\n};\n\nexport interface NtpTimeOutput {\n rtp?: RtpPacket;\n /**ms */\n time?: number;\n eol?: boolean;\n}\n\nexport class NtpTimeBase implements Processor<NtpTimeInput, NtpTimeOutput> {\n readonly id = randomUUID();\n private baseNtpTimestamp?: bigint;\n private baseRtpTimestamp?: number;\n private latestNtpTimestamp?: bigint;\n private latestRtpTimestamp?: number;\n private currentElapsed = 0;\n private buffer: RtpPacket[] = [];\n private internalStats = {};\n started = false;\n\n constructor(public clockRate: number) {}\n\n toJSON(): Record<string, any> {\n return {\n ...this.internalStats,\n id: this.id,\n baseRtpTimestamp: this.baseRtpTimestamp,\n latestRtpTimestamp: this.latestRtpTimestamp,\n baseNtpTimestamp:\n this.baseNtpTimestamp && ntpTime2Sec(this.baseNtpTimestamp),\n latestNtpTimestamp:\n this.latestNtpTimestamp && ntpTime2Sec(this.latestNtpTimestamp),\n bufferLength: this.buffer.length,\n currentElapsed: this.currentElapsed,\n clockRate: this.clockRate,\n };\n }\n\n private stop() {\n this.buffer = [];\n this.internalStats = {};\n }\n\n processInput({ rtcp, rtp, eol }: NtpTimeInput): NtpTimeOutput[] {\n if (eol) {\n this.stop();\n return [{ eol: true }];\n }\n\n if (rtcp && rtcp.type === RtcpSrPacket.type) {\n const { ntpTimestamp, rtpTimestamp } = rtcp.senderInfo;\n this.latestNtpTimestamp = ntpTimestamp;\n this.latestRtpTimestamp = rtpTimestamp;\n\n if (this.baseNtpTimestamp == undefined) {\n this.baseNtpTimestamp = ntpTimestamp;\n this.baseRtpTimestamp = rtpTimestamp;\n }\n\n this.internalStats[\"ntpReceived\"] = new Date().toISOString();\n this.started = true;\n }\n\n if (rtp) {\n this.buffer.push(rtp);\n this.internalStats[\"payloadType\"] = rtp.header.payloadType;\n\n const res: NtpTimeOutput[] = [];\n\n if (\n this.baseRtpTimestamp == undefined ||\n this.baseNtpTimestamp == undefined ||\n this.latestNtpTimestamp == undefined ||\n this.latestRtpTimestamp == undefined\n ) {\n return [];\n }\n\n for (const rtp of this.buffer) {\n const ntp = this.updateNtp(rtp.header.timestamp);\n const ms = ntp * 1000;\n const time = Math.round(ms);\n res.push({ rtp, time });\n\n this.internalStats[\"timeSource\"] =\n new Date().toISOString() + \" time:\" + time;\n }\n this.buffer = [];\n return res;\n }\n\n return [];\n }\n\n /**\n *\n * @param rtpTimestamp\n * @returns sec\n */\n private calcNtp({\n rtpTimestamp,\n baseNtpTimestamp,\n baseRtpTimestamp,\n elapsedOffset,\n }: {\n rtpTimestamp: number;\n baseRtpTimestamp: number;\n baseNtpTimestamp: bigint;\n elapsedOffset: number;\n }) {\n const rotate =\n Math.abs(rtpTimestamp - baseRtpTimestamp) > (Max32Uint / 4) * 3;\n\n const elapsed = rotate\n ? rtpTimestamp + Max32Uint - baseRtpTimestamp\n : rtpTimestamp - baseRtpTimestamp;\n const elapsedSec = elapsed / this.clockRate;\n\n // sec\n const ntp = ntpTime2Sec(baseNtpTimestamp) + elapsedOffset + elapsedSec;\n return { ntp, elapsedSec };\n }\n\n private updateNtp(rtpTimestamp: number) {\n this.internalStats[\"inputRtp\"] = rtpTimestamp;\n\n const base = this.calcNtp({\n rtpTimestamp,\n baseNtpTimestamp: this.baseNtpTimestamp!,\n baseRtpTimestamp: this.baseRtpTimestamp!,\n elapsedOffset: this.currentElapsed,\n });\n const latest = this.calcNtp({\n rtpTimestamp,\n baseNtpTimestamp: this.latestNtpTimestamp!,\n baseRtpTimestamp: this.latestRtpTimestamp!,\n elapsedOffset: 0,\n });\n\n this.internalStats[\"calcBaseNtp\"] = base.ntp;\n this.internalStats[\"calcLatestNtp\"] = latest.ntp;\n\n if (base.ntp < latest.ntp) {\n // update baseNtp\n this.baseNtpTimestamp = this.latestNtpTimestamp;\n this.baseRtpTimestamp = this.latestRtpTimestamp;\n this.currentElapsed = 0;\n this.internalStats[\"calcNtp\"] = latest.ntp;\n return latest.ntp;\n } else {\n this.currentElapsed += base.elapsedSec;\n this.baseRtpTimestamp = rtpTimestamp;\n this.internalStats[\"calcNtp\"] = base.ntp;\n return base.ntp;\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rtcpCallback.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/rtcpCallback.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA4B;AAY5B,MAAa,kBAAkB;IAA/B;
|
|
1
|
+
{"version":3,"file":"rtcpCallback.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/rtcpCallback.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA4B;AAY5B,MAAa,kBAAkB;IAA/B;QAGU;;;;;WAAiC;QACjC;;;;;WAAwB;QAChC;;;;mBAAY,IAAI,iBAAK,EAAE;WAAC;QAYxB;;;;mBAAQ,CAAC,IAAe,EAAE,EAAE;gBAC1B,IAAI,IAAI,CAAC,EAAE,EAAE;oBACX,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;iBACnB;YACH,CAAC;WAAC;QASF;;;;mBAAU,GAAG,EAAE;gBACb,IAAI,IAAI,CAAC,UAAU,EAAE;oBACnB,IAAI,CAAC,UAAU,EAAE,CAAC;oBAClB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;iBAC7B;gBACD,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;gBACpB,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;YAClC,CAAC;WAAC;IACJ,CAAC;IA/BC,MAAM;QACJ,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,EAA+B,EAAE,UAAuB;QAC3D,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAQD,IAAI;QACF,IAAI,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;SACxB;QACD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CAUF;AAtCD,gDAsCC","sourcesContent":["import Event from \"rx.mini\";\n\nimport { RtcpPacket } from \"..\";\nimport { SimpleProcessorCallback } from \"./interface\";\n\nexport type RtcpInput = RtcpPacket;\n\nexport interface RtcpOutput {\n rtcp?: RtcpPacket;\n eol?: boolean;\n}\n\nexport class RtcpSourceCallback\n implements SimpleProcessorCallback<RtcpInput, RtcpOutput>\n{\n private cb?: (chunk: RtcpOutput) => void;\n private destructor?: () => void;\n onStopped = new Event();\n\n toJSON() {\n return {};\n }\n\n pipe(cb: (chunk: RtcpOutput) => void, destructor?: () => void) {\n this.cb = cb;\n this.destructor = destructor;\n return this;\n }\n\n input = (rtcp: RtcpInput) => {\n if (this.cb) {\n this.cb({ rtcp });\n }\n };\n\n stop() {\n if (this.cb) {\n this.cb({ eol: true });\n }\n this.onStopped.execute();\n }\n\n destroy = () => {\n if (this.destructor) {\n this.destructor();\n this.destructor = undefined;\n }\n this.cb = undefined;\n this.onStopped.allUnsubscribe();\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rtpCallback.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/rtpCallback.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA4B;AAE5B,0BAA+B;AAU/B,MAAa,iBAAiB;IAU5B,YACU,UAIJ,EAAE
|
|
1
|
+
{"version":3,"file":"rtpCallback.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/rtpCallback.ts"],"names":[],"mappings":"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","sourcesContent":["import Event from \"rx.mini\";\n\nimport { RtpPacket } from \"..\";\nimport { SimpleProcessorCallback } from \"./interface\";\n\nexport type RtpInput = Buffer | RtpPacket;\n\nexport interface RtpOutput {\n rtp?: RtpPacket;\n eol?: boolean;\n}\n\nexport class RtpSourceCallback\n implements SimpleProcessorCallback<RtpInput, RtpOutput>\n{\n private cb?: (chunk: RtpOutput) => void;\n private destructor?: () => void;\n onStopped = new Event();\n stats = {};\n buffer: RtpPacket[] = [];\n bufferFulfilled = false;\n\n constructor(\n private options: {\n payloadType?: number;\n clearInvalidPTPacket?: boolean;\n initialBufferLength?: number;\n } = {}\n ) {\n options.clearInvalidPTPacket = options.clearInvalidPTPacket ?? true;\n }\n\n toJSON() {\n return { ...this.stats };\n }\n\n pipe(cb: (chunk: RtpOutput) => void, destructor?: () => void) {\n this.cb = cb;\n this.destructor = destructor;\n return this;\n }\n\n input = (packet: Buffer | RtpPacket) => {\n const rtp = Buffer.isBuffer(packet)\n ? RtpPacket.deSerialize(packet)\n : packet;\n\n if (\n this.options.payloadType != undefined &&\n this.options.payloadType !== rtp.header.payloadType\n ) {\n if (this.options.clearInvalidPTPacket) {\n rtp.clear();\n }\n return;\n }\n\n this.stats[\"rtpSource\"] =\n new Date().toISOString() +\n \" timestamp:\" +\n rtp?.header.timestamp +\n \" seq:\" +\n rtp?.header.sequenceNumber;\n\n const cb = this.cb;\n if (cb) {\n if (this.options.initialBufferLength) {\n if (this.bufferFulfilled) {\n cb({ rtp });\n return;\n }\n this.buffer.push(rtp);\n if (this.buffer.length > this.options.initialBufferLength) {\n this.buffer.forEach((rtp) => {\n cb({ rtp });\n });\n this.buffer = [];\n this.bufferFulfilled = true;\n }\n } else {\n cb({ rtp });\n }\n }\n };\n\n stop() {\n if (this.cb) {\n this.cb({ eol: true });\n }\n this.onStopped.execute();\n }\n\n destroy = () => {\n if (this.destructor) {\n this.destructor();\n this.destructor = undefined;\n }\n this.cb = undefined;\n this.onStopped.allUnsubscribe();\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rtpStream.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/rtpStream.ts"],"names":[],"mappings":";;;AAAA,oCAAsE;AAEtE,oCAAuC;AAGvC,MAAa,eAAe;IAK1B,YACU,UAGJ,EAAE;;;;;
|
|
1
|
+
{"version":3,"file":"rtpStream.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/rtpStream.ts"],"names":[],"mappings":";;;AAAA,oCAAsE;AAEtE,oCAAuC;AAGvC,MAAa,eAAe;IAK1B,YACU,UAGJ,EAAE;QAHN;;;;mBAAQ,OAAO;WAGT;QARR;;;;;WAAoC;QACpC;;;;;WAAmC;QACzB;;;;;WAAiD;QAkB3D;;;;mBAAO,CAAC,MAA0B,EAAE,EAAE;gBACpC,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACjC,CAAC,CAAC,eAAS,CAAC,WAAW,CAAC,MAAM,CAAC;oBAC/B,CAAC,CAAC,MAAM,CAAC;gBAEX,IACE,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,SAAS;oBACrC,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,GAAG,CAAC,MAAM,CAAC,WAAW,EACnD;oBACA,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE;wBACrC,GAAG,CAAC,KAAK,EAAE,CAAC;qBACb;oBACD,OAAO;iBACR;gBAED,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YACtB,CAAC;WAAC;QA1BA,OAAO,CAAC,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,IAAI,IAAI,CAAC;QAEpE,IAAI,CAAC,QAAQ,GAAG,IAAI,oBAAc,CAAC;YACjC,KAAK,EAAE,CAAC,UAAU,EAAE,EAAE;gBACpB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;gBAC7B,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpD,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAoBD,IAAI;QACF,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;CACF;AA1CD,0CA0CC","sourcesContent":["import { ReadableStream, ReadableStreamController } from \"stream/web\";\n\nimport { RtpPacket } from \"../rtp/rtp\";\nimport { RtpOutput } from \"./rtpCallback\";\n\nexport class RtpSourceStream {\n readable: ReadableStream<RtpOutput>;\n write!: (chunk: RtpOutput) => void;\n protected controller!: ReadableStreamController<RtpOutput>;\n\n constructor(\n private options: {\n payloadType?: number;\n clearInvalidPTPacket?: boolean;\n } = {}\n ) {\n options.clearInvalidPTPacket = options.clearInvalidPTPacket ?? true;\n\n this.readable = new ReadableStream({\n start: (controller) => {\n this.controller = controller;\n this.write = (chunk) => controller.enqueue(chunk);\n },\n });\n }\n\n push = (packet: Buffer | RtpPacket) => {\n const rtp = Buffer.isBuffer(packet)\n ? RtpPacket.deSerialize(packet)\n : packet;\n\n if (\n this.options.payloadType != undefined &&\n this.options.payloadType !== rtp.header.payloadType\n ) {\n if (this.options.clearInvalidPTPacket) {\n rtp.clear();\n }\n return;\n }\n\n this.write({ rtp });\n };\n\n stop() {\n this.controller.enqueue({ eol: true });\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rtpTime.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/rtpTime.ts"],"names":[],"mappings":";;;AAAA,0BAA+C;AAe/C,MAAa,WAAW;IAKtB,YAAmB,SAAiB;;;;;
|
|
1
|
+
{"version":3,"file":"rtpTime.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/rtpTime.ts"],"names":[],"mappings":";;;AAAA,0BAA+C;AAe/C,MAAa,WAAW;IAKtB,YAAmB,SAAiB;QAAxB;;;;mBAAO,SAAS;WAAQ;QAJpC;;;;;WAAuB;QACvB,QAAQ;QACR;;;;mBAAU,CAAC;WAAC;IAE2B,CAAC;IAExC,MAAM;QACJ,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,EAAE,GAAG,EAAE,GAAG,EAAgB;QACrC,IAAI,GAAG,EAAE;YACP,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;SACxB;QAED,IAAI,GAAG,EAAE;YACP,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAClD,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;SACjC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,SAAiB;QAC9B,IAAI,IAAI,CAAC,aAAa,IAAI,SAAS,EAAE;YACnC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;SAChC;QAED,MAAM,MAAM,GACV,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,aAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAEjE,MAAM,OAAO,GAAG,MAAM;YACpB,CAAC,CAAC,SAAS,GAAG,aAAS,GAAG,IAAI,CAAC,aAAa;YAC5C,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC;QACnC,IAAI,CAAC,OAAO,IAAI,IAAA,OAAG,EAAC,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;QAEvD,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAE/B,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAjDD,kCAiDC","sourcesContent":["import { int, Max32Uint, RtpPacket } from \"..\";\nimport { Processor } from \"./interface\";\n\nexport type RtpTimeInput = {\n rtp?: RtpPacket;\n eol?: boolean;\n};\n\nexport interface RtpTimeOutput {\n rtp?: RtpPacket;\n /**ms */\n time?: number;\n eol?: boolean;\n}\n\nexport class RtpTimeBase implements Processor<RtpTimeInput, RtpTimeOutput> {\n baseTimestamp?: number;\n /**ms */\n elapsed = 0;\n\n constructor(public clockRate: number) {}\n\n toJSON(): Record<string, any> {\n return {\n baseTimestamp: this.baseTimestamp,\n elapsed: this.elapsed,\n };\n }\n\n processInput({ rtp, eol }: RtpTimeInput): RtpTimeOutput[] {\n if (eol) {\n return [{ eol: true }];\n }\n\n if (rtp) {\n const elapsed = this.update(rtp.header.timestamp);\n return [{ rtp, time: elapsed }];\n }\n\n return [];\n }\n\n /**\n *\n * @param timestamp\n * @returns ms\n */\n private update(timestamp: number) {\n if (this.baseTimestamp == undefined) {\n this.baseTimestamp = timestamp;\n }\n\n const rotate =\n Math.abs(timestamp - this.baseTimestamp) > (Max32Uint / 4) * 3;\n\n const elapsed = rotate\n ? timestamp + Max32Uint - this.baseTimestamp\n : timestamp - this.baseTimestamp;\n this.elapsed += int((elapsed / this.clockRate) * 1000);\n\n this.baseTimestamp = timestamp;\n\n return this.elapsed;\n }\n}\n"]}
|
|
@@ -135,7 +135,7 @@ class WebmBase {
|
|
|
135
135
|
}
|
|
136
136
|
}
|
|
137
137
|
});
|
|
138
|
-
this.builder = new __1.
|
|
138
|
+
this.builder = new __1.WEBMContainer(tracks, options.encryptionKey);
|
|
139
139
|
tracks.forEach((t) => {
|
|
140
140
|
this.timestamps[t.trackNumber] = new ClusterTimestamp();
|
|
141
141
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webm.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/webm.ts"],"names":[],"mappings":"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","sourcesContent":["import Event from \"rx.mini\";\n\nimport {\n getEBMLByteLength,\n numberToByteArray,\n SupportedCodec,\n vintEncode,\n WEBMBuilder,\n} from \"..\";\nimport { 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: WEBMBuilder;\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 WEBMBuilder(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: WEBMBuilder,\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/processor/webm.ts"],"names":[],"mappings":"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","sourcesContent":["import Event from \"rx.mini\";\n\nimport {\n getEBMLByteLength,\n numberToByteArray,\n vintEncode,\n WEBMContainer,\n} from \"..\";\nimport { SupportedCodec } from \"../container/webm\";\nimport { 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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webmCallback.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/webmCallback.ts"],"names":[],"mappings":";;;AAAA,0CAAqD;AAErD,
|
|
1
|
+
{"version":3,"file":"webmCallback.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/webmCallback.ts"],"names":[],"mappings":";;;AAAA,0CAAqD;AAErD,0BAAkC;AAElC,iCAQgB;AAWhB,MAAa,YAAa,SAAQ,eAAQ;IAGxC,YAAY,MAAmB,EAAE,UAAsB,EAAE;QACvD,KAAK,CACH,MAAM,EACN,KAAK,EAAE,MAAM,EAAE,EAAE;YACf,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YACnB,IAAI,EAAE,EAAE;gBACN,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;aACzC;QACH,CAAC,EACD,OAAO,CACR,CAAC;QAZI;;;;;WAA0C;QAC1C;;;;mBAAQ,IAAI,gBAAY,EAAE;WAAC;QAcnC;;;;mBAAO,CAAC,EAAwC,EAAE,EAAE;gBAClD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC;WAAC;QAEF;;;;mBAAa,CAAC,KAAgB,EAAE,EAAE;gBAChC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;WAAC;QACF;;;;mBAAa,CAAC,KAAgB,EAAE,EAAE;gBAChC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;WAAC;QAEF;;;;mBAAU,GAAG,EAAE;gBACb,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;gBACpB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtB,CAAC;WAAC;IAjBF,CAAC;CAkBF;AAhCD,oCAgCC;AAEM,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,EAAE,KAAiB,EAAE,EAAE;IAC5E,IAAI,KAAK,CAAC,UAAU,EAAE;QACpB,MAAM,IAAA,qBAAU,EAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;KAC1C;SAAM,IAAI,KAAK,CAAC,GAAG,EAAE;QACpB,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC;QACtC,MAAM,OAAO,GAAG,MAAM,IAAA,eAAI,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAEvC,eAAe;QACf,MAAM,OAAO,CAAC,KAAK,CACjB,eAAe,EACf,CAAC,EACD,eAAe,CAAC,MAAM,EACtB,uBAAgB,CACjB,CAAC;QAEF,WAAW;QACX,MAAM,IAAI,GAAG,MAAM,IAAA,eAAI,EAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAA,yBAAkB,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,0BAAmB,CAAC,CAAC;QAEnE,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;KACvB;AACH,CAAC,CAAC;AAtBW,QAAA,gBAAgB,oBAsB3B","sourcesContent":["import { appendFile, open, stat } from \"fs/promises\";\n\nimport { PromiseQueue } from \"..\";\nimport { SupportedCodec } from \"../container/webm\";\nimport {\n DurationPosition,\n replaceSegmentSize,\n SegmentSizePosition,\n WebmBase,\n WebmInput,\n WebmOption,\n WebmOutput,\n} from \"./webm\";\n\nexport interface WebmTrack {\n width?: number;\n height?: number;\n kind: \"audio\" | \"video\";\n codec: SupportedCodec;\n clockRate: number;\n trackNumber: number;\n}\n\nexport class WebmCallback extends WebmBase {\n private cb?: (input: WebmOutput) => Promise<void>;\n private queue = new PromiseQueue();\n constructor(tracks: WebmTrack[], options: WebmOption = {}) {\n super(\n tracks,\n async (output) => {\n const cb = this.cb;\n if (cb) {\n await this.queue.push(() => cb(output));\n }\n },\n options\n );\n }\n\n pipe = (cb: (input: WebmOutput) => Promise<void>) => {\n this.cb = cb;\n this.start();\n };\n\n inputAudio = (input: WebmInput) => {\n this.processAudioInput(input);\n };\n inputVideo = (input: WebmInput) => {\n this.processVideoInput(input);\n };\n\n destroy = () => {\n this.cb = undefined;\n this.queue.cancel();\n };\n}\n\nexport const saveToFileSystem = (path: string) => async (value: WebmOutput) => {\n if (value.saveToFile) {\n await appendFile(path, value.saveToFile);\n } else if (value.eol) {\n const { durationElement } = value.eol;\n const handler = await open(path, \"r+\");\n\n // set duration\n await handler.write(\n durationElement,\n 0,\n durationElement.length,\n DurationPosition\n );\n\n // set size\n const meta = await stat(path);\n const resize = replaceSegmentSize(meta.size);\n await handler.write(resize, 0, resize.length, SegmentSizePosition);\n\n await handler.close();\n }\n};\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { ReadableStream, WritableStream } from "stream/web";
|
|
3
|
-
import { SupportedCodec } from "../container/webm";
|
|
3
|
+
import { SupportedCodec } from "../container/webm/container";
|
|
4
4
|
import { WebmBase, WebmInput, WebmOption, WebmOutput } from "./webm";
|
|
5
5
|
export type WebmStreamOutput = WebmOutput;
|
|
6
6
|
export type WebmStreamOption = WebmOption;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webmStream.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/webmStream.ts"],"names":[],"mappings":";;;AAAA,oCAIoB;AAGpB,iCAAqE;AAMrE,MAAa,UAAW,SAAQ,eAAQ;IAMtC,YACE,MAOG,EACH,UAA4B,EAAE;QAE9B,KAAK,CACH,MAAM,EACN,CAAC,MAAM,EAAE,EAAE;YACT,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC,EACD,OAAO,CACR,CAAC;QAtBJ;;;;;WAAwC;QACxC;;;;;WAAwC;QACxC;;;;;WAA6C;
|
|
1
|
+
{"version":3,"file":"webmStream.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/webmStream.ts"],"names":[],"mappings":";;;AAAA,oCAIoB;AAGpB,iCAAqE;AAMrE,MAAa,UAAW,SAAQ,eAAQ;IAMtC,YACE,MAOG,EACH,UAA4B,EAAE;QAE9B,KAAK,CACH,MAAM,EACN,CAAC,MAAM,EAAE,EAAE;YACT,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC,EACD,OAAO,CACR,CAAC;QAtBJ;;;;;WAAwC;QACxC;;;;;WAAwC;QACxC;;;;;WAA6C;QACrC;;;;;WAAwD;QAqB9D,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QAC1D,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,WAAW,GAAG,IAAI,oBAAc,CAAC;gBACpC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;oBACf,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBAChC,CAAC;aACF,CAAC,CAAC;SACJ;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QAC1D,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,WAAW,GAAG,IAAI,oBAAc,CAAC;gBACpC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;oBACf,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBAChC,CAAC;aACF,CAAC,CAAC;SACJ;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,oBAAc,CAAmB;YACrD,KAAK,EAAE,CAAC,UAAU,EAAE,EAAE;gBACpB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;YAC/B,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;CACF;AAnDD,gCAmDC","sourcesContent":["import {\n ReadableStream,\n ReadableStreamController,\n WritableStream,\n} from \"stream/web\";\n\nimport { SupportedCodec } from \"../container/webm/container\";\nimport { WebmBase, WebmInput, WebmOption, WebmOutput } from \"./webm\";\n\nexport type WebmStreamOutput = WebmOutput;\n\nexport type WebmStreamOption = WebmOption;\n\nexport class WebmStream extends WebmBase {\n audioStream!: WritableStream<WebmInput>;\n videoStream!: WritableStream<WebmInput>;\n webmStream: ReadableStream<WebmStreamOutput>;\n private controller!: ReadableStreamController<WebmStreamOutput>;\n\n constructor(\n tracks: {\n width?: number;\n height?: number;\n kind: \"audio\" | \"video\";\n codec: SupportedCodec;\n clockRate: number;\n trackNumber: number;\n }[],\n options: WebmStreamOption = {}\n ) {\n super(\n tracks,\n (output) => {\n this.controller.enqueue(output);\n },\n options\n );\n\n const audioTrack = tracks.find((t) => t.kind === \"audio\");\n if (audioTrack) {\n this.audioStream = new WritableStream({\n write: (input) => {\n this.processAudioInput(input);\n },\n });\n }\n\n const videoTrack = tracks.find((t) => t.kind === \"video\");\n if (videoTrack) {\n this.videoStream = new WritableStream({\n write: (input) => {\n this.processVideoInput(input);\n },\n });\n }\n\n this.webmStream = new ReadableStream<WebmStreamOutput>({\n start: (controller) => {\n this.controller = controller;\n },\n });\n\n this.start();\n }\n}\n"]}
|
|
@@ -51,11 +51,11 @@ class FullIntraRequest {
|
|
|
51
51
|
return Buffer.concat([ssrcs, fir]);
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
-
exports.FullIntraRequest = FullIntraRequest;
|
|
55
54
|
Object.defineProperty(FullIntraRequest, "count", {
|
|
56
55
|
enumerable: true,
|
|
57
56
|
configurable: true,
|
|
58
57
|
writable: true,
|
|
59
58
|
value: 4
|
|
60
59
|
});
|
|
60
|
+
exports.FullIntraRequest = FullIntraRequest;
|
|
61
61
|
//# sourceMappingURL=fullIntraRequest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fullIntraRequest.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/psfb/fullIntraRequest.ts"],"names":[],"mappings":";;;AAAA,gDAAoE;AAIpE,MAAa,gBAAgB;IAQ3B,YAAY,QAAmC,EAAE;QANjD;;;;mBAAQ,gBAAgB,CAAC,KAAK;WAAC;QAE/B;;;;;WAAoB;QACpB;;;;;WAAmB;QACnB;;;;mBAAkB,EAAE;WAAC;QAGnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAY;QAC7B,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,IAAA,kBAAY,EAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAe,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YACvC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;SACvE;QAED,OAAO,IAAI,gBAAgB,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,SAAS;QACP,MAAM,KAAK,GAAG,IAAA,kBAAY,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAEtE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE;YAC/C,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACrC,CAAC;;
|
|
1
|
+
{"version":3,"file":"fullIntraRequest.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/psfb/fullIntraRequest.ts"],"names":[],"mappings":";;;AAAA,gDAAoE;AAIpE,MAAa,gBAAgB;IAQ3B,YAAY,QAAmC,EAAE;QANjD;;;;mBAAQ,gBAAgB,CAAC,KAAK;WAAC;QAE/B;;;;;WAAoB;QACpB;;;;;WAAmB;QACnB;;;;mBAAkB,EAAE;WAAC;QAGnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAY;QAC7B,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,IAAA,kBAAY,EAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAe,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YACvC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;SACvE;QAED,OAAO,IAAI,gBAAgB,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,SAAS;QACP,MAAM,KAAK,GAAG,IAAA,kBAAY,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAEtE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE;YAC/C,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACrC,CAAC;;AAnCM;;;;WAAQ,CAAC;EAAJ,CAAK;AADN,4CAAgB","sourcesContent":["import { bufferReader, bufferWriter } from \"../../../../common/src\";\n\ntype firEntry = { ssrc: number; sequenceNumber: number };\n\nexport class FullIntraRequest {\n static count = 4;\n count = FullIntraRequest.count;\n\n senderSsrc!: number;\n mediaSsrc!: number;\n fir: firEntry[] = [];\n\n constructor(props: Partial<FullIntraRequest> = {}) {\n Object.assign(this, props);\n }\n\n get length() {\n return Math.floor(this.serialize().length / 4 - 1);\n }\n\n static deSerialize(data: Buffer) {\n const [senderSsrc, mediaSsrc] = bufferReader(data, [4, 4]);\n const fir: firEntry[] = [];\n for (let i = 8; i < data.length; i += 8) {\n fir.push({ ssrc: data.readUInt32BE(i), sequenceNumber: data[i + 4] });\n }\n\n return new FullIntraRequest({ senderSsrc, mediaSsrc, fir });\n }\n\n serialize() {\n const ssrcs = bufferWriter([4, 4], [this.senderSsrc, this.mediaSsrc]);\n\n const fir = Buffer.alloc(this.fir.length * 8);\n this.fir.forEach(({ ssrc, sequenceNumber }, i) => {\n fir.writeUInt32BE(ssrc, i * 8);\n fir[i * 8 + 4] = sequenceNumber;\n });\n\n return Buffer.concat([ssrcs, fir]);\n }\n}\n"]}
|
|
@@ -49,11 +49,11 @@ class RtcpPayloadSpecificFeedback {
|
|
|
49
49
|
return new RtcpPayloadSpecificFeedback({ feedback });
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
|
-
exports.RtcpPayloadSpecificFeedback = RtcpPayloadSpecificFeedback;
|
|
53
52
|
Object.defineProperty(RtcpPayloadSpecificFeedback, "type", {
|
|
54
53
|
enumerable: true,
|
|
55
54
|
configurable: true,
|
|
56
55
|
writable: true,
|
|
57
56
|
value: 206
|
|
58
57
|
});
|
|
58
|
+
exports.RtcpPayloadSpecificFeedback = RtcpPayloadSpecificFeedback;
|
|
59
59
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/psfb/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAG1B,kCAA8C;AAC9C,yDAAsD;AACtD,mEAAgE;AAChE,iCAAqD;AAErD,MAAM,GAAG,GAAG,IAAA,eAAK,EAAC,4BAA4B,CAAC,CAAC;AAOhD,MAAa,2BAA2B;IAMtC,YAAY,QAA8C,EAAE;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/psfb/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAG1B,kCAA8C;AAC9C,yDAAsD;AACtD,mEAAgE;AAChE,iCAAqD;AAErD,MAAM,GAAG,GAAG,IAAA,eAAK,EAAC,4BAA4B,CAAC,CAAC;AAOhD,MAAa,2BAA2B;IAMtC,YAAY,QAA8C,EAAE;QAJnD;;;;mBAAO,2BAA2B,CAAC,IAAI;WAAC;QAEjD;;;;;WAAoB;QAGlB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,SAAS;QACP,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC1C,OAAO,0BAAmB,CAAC,SAAS,CAClC,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,QAAQ,CAAC,KAAK,EACnB,OAAO,EACP,IAAI,CAAC,QAAQ,CAAC,MAAM,CACrB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAY,EAAE,MAAkB;QACjD,IAAI,QAA8B,CAAC;QAEnC,QAAQ,MAAM,CAAC,KAAK,EAAE;YACpB,KAAK,mCAAgB,CAAC,KAAK;gBACzB,QAAQ,GAAG,mCAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC9C,MAAM;YACR,KAAK,6CAAqB,CAAC,KAAK;gBAC9B,QAAQ,GAAG,6CAAqB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACnD,MAAM;YACR,KAAK,kCAA2B,CAAC,KAAK;gBACpC,QAAQ,GAAG,kCAA2B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACzD,MAAM;YACR;gBACE,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBACzC,MAAM;SACT;QAED,OAAO,IAAI,2BAA2B,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACvD,CAAC;;AAtCe;;;;WAAO,GAAG;EAAN,CAAO;AADhB,kEAA2B","sourcesContent":["import debug from \"debug\";\n\nimport { RtcpHeader } from \"../header\";\nimport { RtcpPacketConverter } from \"../rtcp\";\nimport { FullIntraRequest } from \"./fullIntraRequest\";\nimport { PictureLossIndication } from \"./pictureLossIndication\";\nimport { ReceiverEstimatedMaxBitrate } from \"./remb\";\n\nconst log = debug(\"werift/rtp/rtcp/psfb/index\");\n\ntype Feedback =\n | FullIntraRequest\n | PictureLossIndication\n | ReceiverEstimatedMaxBitrate;\n\nexport class RtcpPayloadSpecificFeedback {\n static readonly type = 206;\n readonly type = RtcpPayloadSpecificFeedback.type;\n\n feedback!: Feedback;\n\n constructor(props: Partial<RtcpPayloadSpecificFeedback> = {}) {\n Object.assign(this, props);\n }\n\n serialize() {\n const payload = this.feedback.serialize();\n return RtcpPacketConverter.serialize(\n this.type,\n this.feedback.count,\n payload,\n this.feedback.length\n );\n }\n\n static deSerialize(data: Buffer, header: RtcpHeader) {\n let feedback: Feedback | undefined;\n\n switch (header.count) {\n case FullIntraRequest.count:\n feedback = FullIntraRequest.deSerialize(data);\n break;\n case PictureLossIndication.count:\n feedback = PictureLossIndication.deSerialize(data);\n break;\n case ReceiverEstimatedMaxBitrate.count:\n feedback = ReceiverEstimatedMaxBitrate.deSerialize(data);\n break;\n default:\n log(\"unknown psfb packet\", header.count);\n break;\n }\n\n return new RtcpPayloadSpecificFeedback({ feedback });\n }\n}\n"]}
|
|
@@ -38,11 +38,11 @@ class PictureLossIndication {
|
|
|
38
38
|
return (0, src_1.bufferWriter)([4, 4], [this.senderSsrc, this.mediaSsrc]);
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
-
exports.PictureLossIndication = PictureLossIndication;
|
|
42
41
|
Object.defineProperty(PictureLossIndication, "count", {
|
|
43
42
|
enumerable: true,
|
|
44
43
|
configurable: true,
|
|
45
44
|
writable: true,
|
|
46
45
|
value: 1
|
|
47
46
|
});
|
|
47
|
+
exports.PictureLossIndication = PictureLossIndication;
|
|
48
48
|
//# sourceMappingURL=pictureLossIndication.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pictureLossIndication.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/psfb/pictureLossIndication.ts"],"names":[],"mappings":";;;AAAA,gDAAoE;AAEpE,MAAa,qBAAqB;IAQhC,YAAY,QAAwC,EAAE;QANtD;;;;mBAAQ,qBAAqB,CAAC,KAAK;WAAC;QACpC;;;;mBAAS,CAAC;WAAC;QAEX;;;;;WAAoB;QACpB;;;;;WAAmB;QAGjB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAY;QAC7B,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,IAAA,kBAAY,EAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3D,OAAO,IAAI,qBAAqB,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,SAAS;QACP,OAAO,IAAA,kBAAY,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACjE,CAAC;;
|
|
1
|
+
{"version":3,"file":"pictureLossIndication.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/psfb/pictureLossIndication.ts"],"names":[],"mappings":";;;AAAA,gDAAoE;AAEpE,MAAa,qBAAqB;IAQhC,YAAY,QAAwC,EAAE;QANtD;;;;mBAAQ,qBAAqB,CAAC,KAAK;WAAC;QACpC;;;;mBAAS,CAAC;WAAC;QAEX;;;;;WAAoB;QACpB;;;;;WAAmB;QAGjB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAY;QAC7B,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,IAAA,kBAAY,EAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3D,OAAO,IAAI,qBAAqB,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,SAAS;QACP,OAAO,IAAA,kBAAY,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACjE,CAAC;;AAlBM;;;;WAAQ,CAAC;EAAJ,CAAK;AADN,sDAAqB","sourcesContent":["import { bufferReader, bufferWriter } from \"../../../../common/src\";\n\nexport class PictureLossIndication {\n static count = 1;\n count = PictureLossIndication.count;\n length = 2;\n\n senderSsrc!: number;\n mediaSsrc!: number;\n\n constructor(props: Partial<PictureLossIndication> = {}) {\n Object.assign(this, props);\n }\n\n static deSerialize(data: Buffer) {\n const [senderSsrc, mediaSsrc] = bufferReader(data, [4, 4]);\n return new PictureLossIndication({ senderSsrc, mediaSsrc });\n }\n\n serialize() {\n return bufferWriter([4, 4], [this.senderSsrc, this.mediaSsrc]);\n }\n}\n"]}
|
|
@@ -105,11 +105,11 @@ class ReceiverEstimatedMaxBitrate {
|
|
|
105
105
|
return buf;
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
|
-
exports.ReceiverEstimatedMaxBitrate = ReceiverEstimatedMaxBitrate;
|
|
109
108
|
Object.defineProperty(ReceiverEstimatedMaxBitrate, "count", {
|
|
110
109
|
enumerable: true,
|
|
111
110
|
configurable: true,
|
|
112
111
|
writable: true,
|
|
113
112
|
value: 15
|
|
114
113
|
});
|
|
114
|
+
exports.ReceiverEstimatedMaxBitrate = ReceiverEstimatedMaxBitrate;
|
|
115
115
|
//# sourceMappingURL=remb.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remb.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/psfb/remb.ts"],"names":[],"mappings":";;;AAAA,gDAKgC;AAEhC,MAAa,2BAA2B;IAatC,YAAY,QAA8C,EAAE;QAX5D;;;;;WAAgB;QAChB;;;;mBAAQ,2BAA2B,CAAC,KAAK;WAAC;QAC1C;;;;;WAAoB;QACpB;;;;;WAAmB;
|
|
1
|
+
{"version":3,"file":"remb.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/psfb/remb.ts"],"names":[],"mappings":";;;AAAA,gDAKgC;AAEhC,MAAa,2BAA2B;IAatC,YAAY,QAA8C,EAAE;QAX5D;;;;;WAAgB;QAChB;;;;mBAAQ,2BAA2B,CAAC,KAAK;WAAC;QAC1C;;;;;WAAoB;QACpB;;;;;WAAmB;QACV;;;;mBAAmB,MAAM;WAAC;QACnC;;;;mBAAkB,CAAC;WAAC;QACpB;;;;;WAAe;QACf;;;;;WAAoB;QACpB;;;;;WAAiB;QACjB;;;;mBAA0B,EAAE;WAAC;QAG3B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAY;QAC7B,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,IAAA,kBAAY,EAClE,IAAI,EACJ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAChB,CAAC;QAEF,MAAM,KAAK,GAAG,IAAA,YAAM,EAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAChC,MAAM,UAAU,GAAG,CAAC,IAAA,YAAM,EAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;QAE1E,MAAM,OAAO,GACX,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;QAE3E,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAChD,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC9B;QAED,OAAO,IAAI,2BAA2B,CAAC;YACrC,UAAU;YACV,SAAS;YACT,QAAQ,EAAE,IAAA,kBAAY,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;YAClD,OAAO;YACP,KAAK;YACL,UAAU;YACV,aAAa;YACb,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,SAAS;QACP,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;YAC7B,IAAA,kBAAY,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC1B,IAAA,kBAAY,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAClC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,eAAS,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAC7B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAA,kBAAY,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CACpE,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;YACxB,QAAQ;YACR,IAAA,kBAAY,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACjC,SAAS;SACV,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7B,OAAO,GAAG,CAAC;IACb,CAAC;;AAlEM;;;;WAAQ,EAAE;EAAL,CAAM;AADP,kEAA2B","sourcesContent":["import {\n BitWriter,\n bufferReader,\n bufferWriter,\n getBit,\n} from \"../../../../common/src\";\n\nexport class ReceiverEstimatedMaxBitrate {\n static count = 15;\n length!: number;\n count = ReceiverEstimatedMaxBitrate.count;\n senderSsrc!: number;\n mediaSsrc!: number;\n readonly uniqueID: string = \"REMB\";\n ssrcNum: number = 0;\n brExp!: number;\n brMantissa!: number;\n bitrate!: bigint;\n ssrcFeedbacks: number[] = [];\n\n constructor(props: Partial<ReceiverEstimatedMaxBitrate> = {}) {\n Object.assign(this, props);\n }\n\n static deSerialize(data: Buffer) {\n const [senderSsrc, mediaSsrc, uniqueID, ssrcNum, e_m] = bufferReader(\n data,\n [4, 4, 4, 1, 1]\n );\n\n const brExp = getBit(e_m, 0, 6);\n const brMantissa = (getBit(e_m, 6, 2) << 16) + (data[14] << 8) + data[15];\n\n const bitrate =\n brExp > 46 ? 18446744073709551615n : BigInt(brMantissa) << BigInt(brExp);\n\n const ssrcFeedbacks: number[] = [];\n for (let i = 16; i < data.length; i += 4) {\n const feedback = data.slice(i).readUIntBE(0, 4);\n ssrcFeedbacks.push(feedback);\n }\n\n return new ReceiverEstimatedMaxBitrate({\n senderSsrc,\n mediaSsrc,\n uniqueID: bufferWriter([4], [uniqueID]).toString(),\n ssrcNum,\n brExp,\n brMantissa,\n ssrcFeedbacks,\n bitrate,\n });\n }\n\n serialize() {\n const constant = Buffer.concat([\n bufferWriter([4, 4], [this.senderSsrc, this.mediaSsrc]),\n Buffer.from(this.uniqueID),\n bufferWriter([1], [this.ssrcNum]),\n ]);\n\n const writer = new BitWriter(24);\n writer.set(6, 0, this.brExp).set(18, 6, this.brMantissa);\n const feedbacks = Buffer.concat(\n this.ssrcFeedbacks.map((feedback) => bufferWriter([4], [feedback]))\n );\n\n const buf = Buffer.concat([\n constant,\n bufferWriter([3], [writer.value]),\n feedbacks,\n ]);\n this.length = buf.length / 4;\n return buf;\n }\n}\n"]}
|
package/lib/rtp/src/rtcp/rr.js
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.RtcpReceiverInfo = exports.RtcpRrPacket = void 0;
|
|
7
|
-
const range_1 = __importDefault(require("lodash/range"));
|
|
8
4
|
const src_1 = require("../../../common/src");
|
|
9
5
|
const rtcp_1 = require("./rtcp");
|
|
10
6
|
class RtcpRrPacket {
|
|
@@ -41,20 +37,20 @@ class RtcpRrPacket {
|
|
|
41
37
|
const [ssrc] = (0, src_1.bufferReader)(data, [4]);
|
|
42
38
|
let pos = 4;
|
|
43
39
|
const reports = [];
|
|
44
|
-
(0
|
|
40
|
+
for (let _ = 0; _ < count; _++) {
|
|
45
41
|
reports.push(RtcpReceiverInfo.deSerialize(data.slice(pos, pos + 24)));
|
|
46
42
|
pos += 24;
|
|
47
|
-
}
|
|
43
|
+
}
|
|
48
44
|
return new RtcpRrPacket({ ssrc, reports });
|
|
49
45
|
}
|
|
50
46
|
}
|
|
51
|
-
exports.RtcpRrPacket = RtcpRrPacket;
|
|
52
47
|
Object.defineProperty(RtcpRrPacket, "type", {
|
|
53
48
|
enumerable: true,
|
|
54
49
|
configurable: true,
|
|
55
50
|
writable: true,
|
|
56
51
|
value: 201
|
|
57
52
|
});
|
|
53
|
+
exports.RtcpRrPacket = RtcpRrPacket;
|
|
58
54
|
class RtcpReceiverInfo {
|
|
59
55
|
constructor(props = {}) {
|
|
60
56
|
Object.defineProperty(this, "ssrc", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rr.js","sourceRoot":"","sources":["../../../../../rtp/src/rtcp/rr.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rr.js","sourceRoot":"","sources":["../../../../../rtp/src/rtcp/rr.ts"],"names":[],"mappings":";;;AAAA,6CAAiE;AACjE,iCAA6C;AAE7C,MAAa,YAAY;IAMvB,YAAY,QAA+B,EAAE;QAL7C;;;;mBAAe,CAAC;WAAC;QACjB;;;;mBAA8B,EAAE;WAAC;QAExB;;;;mBAAO,YAAY,CAAC,IAAI;WAAC;QAGhC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,SAAS;QACP,IAAI,OAAO,GAAG,IAAA,kBAAY,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;YACtB,OAAO;YACP,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;SACpD,CAAC,CAAC;QACH,OAAO,0BAAmB,CAAC,SAAS,CAClC,YAAY,CAAC,IAAI,EACjB,IAAI,CAAC,OAAO,CAAC,MAAM,EACnB,OAAO,EACP,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAC/B,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAY,EAAE,KAAa;QAC5C,MAAM,CAAC,IAAI,CAAC,GAAG,IAAA,kBAAY,EAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,MAAM,OAAO,GAAuB,EAAE,CAAC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAC9B,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACtE,GAAG,IAAI,EAAE,CAAC;SACX;QACD,OAAO,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;;AA9Be;;;;WAAO,GAAG;EAAN,CAAO;AAHhB,oCAAY;AAoCzB,MAAa,gBAAgB;IAW3B,YAAY,QAAmC,EAAE;QAVjD;;;;;WAAc;QACd;;;;;WAAsB;QACtB;;;;;WAAqB;QACrB;;;;;WAAyB;QACzB;;;;;WAAgB;QAChB,aAAa;QACb;;;;;WAAa;QACb,yBAAyB;QACzB;;;;;WAAc;QAGZ,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;IACJ,CAAC;IAED,SAAS;QACP,OAAO,IAAA,kBAAY,EACjB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACrB;YACE,IAAI,CAAC,IAAI;YACT,IAAI,CAAC,YAAY;YACjB,IAAI,CAAC,WAAW;YAChB,IAAI,CAAC,eAAe;YACpB,IAAI,CAAC,MAAM;YACX,IAAI,CAAC,GAAG;YACR,IAAI,CAAC,IAAI;SACV,CACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAY;QAC7B,MAAM,CACJ,IAAI,EACJ,YAAY,EACZ,WAAW,EACX,eAAe,EACf,MAAM,EACN,GAAG,EACH,IAAI,EACL,GAAG,IAAA,kBAAY,EAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAE9C,OAAO,IAAI,gBAAgB,CAAC;YAC1B,IAAI;YACJ,YAAY;YACZ,WAAW;YACX,eAAe;YACf,MAAM;YACN,GAAG;YACH,IAAI;SACL,CAAC,CAAC;IACL,CAAC;CACF;AA/DD,4CA+DC","sourcesContent":["import { bufferReader, bufferWriter } from \"../../../common/src\";\nimport { RtcpPacketConverter } from \"./rtcp\";\n\nexport class RtcpRrPacket {\n ssrc: number = 0;\n reports: RtcpReceiverInfo[] = [];\n static readonly type = 201;\n readonly type = RtcpRrPacket.type;\n\n constructor(props: Partial<RtcpRrPacket> = {}) {\n Object.assign(this, props);\n }\n\n serialize() {\n let payload = bufferWriter([4], [this.ssrc]);\n payload = Buffer.concat([\n payload,\n ...this.reports.map((report) => report.serialize()),\n ]);\n return RtcpPacketConverter.serialize(\n RtcpRrPacket.type,\n this.reports.length,\n payload,\n Math.floor(payload.length / 4)\n );\n }\n\n static deSerialize(data: Buffer, count: number) {\n const [ssrc] = bufferReader(data, [4]);\n let pos = 4;\n const reports: RtcpReceiverInfo[] = [];\n for (let _ = 0; _ < count; _++) {\n reports.push(RtcpReceiverInfo.deSerialize(data.slice(pos, pos + 24)));\n pos += 24;\n }\n return new RtcpRrPacket({ ssrc, reports });\n }\n}\n\nexport class RtcpReceiverInfo {\n ssrc!: number;\n fractionLost!: number;\n packetsLost!: number;\n highestSequence!: number;\n jitter!: number;\n /**last SR */\n lsr!: number;\n /**delay since last SR */\n dlsr!: number;\n\n constructor(props: Partial<RtcpReceiverInfo> = {}) {\n Object.assign(this, props);\n }\n\n toJSON() {\n return {\n ssrc: this.ssrc,\n fractionLost: this.fractionLost,\n packetsLost: this.packetsLost,\n highestSequence: this.highestSequence,\n jitter: this.jitter,\n lsr: this.lsr,\n dlsr: this.dlsr,\n };\n }\n\n serialize() {\n return bufferWriter(\n [4, 1, 3, 4, 4, 4, 4],\n [\n this.ssrc,\n this.fractionLost,\n this.packetsLost,\n this.highestSequence,\n this.jitter,\n this.lsr,\n this.dlsr,\n ]\n );\n }\n\n static deSerialize(data: Buffer) {\n const [\n ssrc,\n fractionLost,\n packetsLost,\n highestSequence,\n jitter,\n lsr,\n dlsr,\n ] = bufferReader(data, [4, 1, 3, 4, 4, 4, 4]);\n\n return new RtcpReceiverInfo({\n ssrc,\n fractionLost,\n packetsLost,\n highestSequence,\n jitter,\n lsr,\n dlsr,\n });\n }\n}\n"]}
|
|
@@ -50,11 +50,11 @@ class RtcpTransportLayerFeedback {
|
|
|
50
50
|
return new RtcpTransportLayerFeedback({ feedback, header });
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
|
-
exports.RtcpTransportLayerFeedback = RtcpTransportLayerFeedback;
|
|
54
53
|
Object.defineProperty(RtcpTransportLayerFeedback, "type", {
|
|
55
54
|
enumerable: true,
|
|
56
55
|
configurable: true,
|
|
57
56
|
writable: true,
|
|
58
57
|
value: 205
|
|
59
58
|
});
|
|
59
|
+
exports.RtcpTransportLayerFeedback = RtcpTransportLayerFeedback;
|
|
60
60
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/rtpfb/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAG1B,iCAAqC;AACrC,iCAAyC;AAEzC,MAAM,GAAG,GAAG,IAAA,eAAK,EAAC,0CAA0C,CAAC,CAAC;AAgB9D,MAAa,0BAA0B;IAMrC,YAAY,QAA6C,EAAE;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/rtpfb/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAG1B,iCAAqC;AACrC,iCAAyC;AAEzC,MAAM,GAAG,GAAG,IAAA,eAAK,EAAC,0CAA0C,CAAC,CAAC;AAgB9D,MAAa,0BAA0B;IAMrC,YAAY,QAA6C,EAAE;QAJlD;;;;mBAAO,0BAA0B,CAAC,IAAI;WAAC;QAChD;;;;;WAAoB;QACpB;;;;;WAAoB;QAGlB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,SAAS;QACP,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC1C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAY,EAAE,MAAkB;QACjD,IAAI,QAA8B,CAAC;QAEnC,QAAQ,MAAM,CAAC,KAAK,EAAE;YACpB,KAAK,kBAAW,CAAC,KAAK;gBACpB,QAAQ,GAAG,kBAAW,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACjD,MAAM;YACR,KAAK,sBAAe,CAAC,KAAK;gBACxB,QAAQ,GAAG,sBAAe,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACrD,MAAM;YACR;gBACE,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1C,MAAM;SACT;QAED,OAAO,IAAI,0BAA0B,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;;AA9Be;;;;WAAO,GAAG;EAAN,CAAO;AADhB,gEAA0B","sourcesContent":["import debug from \"debug\";\n\nimport { RtcpHeader } from \"../header\";\nimport { GenericNack } from \"./nack\";\nimport { TransportWideCC } from \"./twcc\";\n\nconst log = debug(\"werift-rtp:packages/rtp/rtcp/rtpfb/index\");\n\n// 0 1 2 3\n// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |V=2|P| FMT | PT | length |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | SSRC of packet sender |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | SSRC of media source |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// : Feedback Control Information (FCI) :\n// : :\n\ntype Feedback = GenericNack | TransportWideCC;\n\nexport class RtcpTransportLayerFeedback {\n static readonly type = 205;\n readonly type = RtcpTransportLayerFeedback.type;\n feedback!: Feedback;\n header!: RtcpHeader;\n\n constructor(props: Partial<RtcpTransportLayerFeedback> = {}) {\n Object.assign(this, props);\n }\n\n serialize() {\n const payload = this.feedback.serialize();\n return payload;\n }\n\n static deSerialize(data: Buffer, header: RtcpHeader) {\n let feedback: Feedback | undefined;\n\n switch (header.count) {\n case GenericNack.count:\n feedback = GenericNack.deSerialize(data, header);\n break;\n case TransportWideCC.count:\n feedback = TransportWideCC.deSerialize(data, header);\n break;\n default:\n log(\"unknown rtpfb packet\", header.count);\n break;\n }\n\n return new RtcpTransportLayerFeedback({ feedback, header });\n }\n}\n"]}
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.GenericNack = void 0;
|
|
7
|
-
const range_1 = __importDefault(require("lodash/range"));
|
|
8
4
|
const src_1 = require("../../../../common/src");
|
|
9
5
|
const header_1 = require("../header");
|
|
10
6
|
const _1 = require(".");
|
|
@@ -65,19 +61,16 @@ class GenericNack {
|
|
|
65
61
|
}
|
|
66
62
|
static deSerialize(data, header) {
|
|
67
63
|
const [senderSsrc, mediaSourceSsrc] = (0, src_1.bufferReader)(data, [4, 4]);
|
|
68
|
-
const lost =
|
|
69
|
-
|
|
70
|
-
const lost = [];
|
|
64
|
+
const lost = [];
|
|
65
|
+
for (let pos = 8; pos < data.length; pos += 4) {
|
|
71
66
|
const [pid, blp] = (0, src_1.bufferReader)(data.subarray(pos), [2, 2]);
|
|
72
67
|
lost.push(pid);
|
|
73
|
-
(
|
|
68
|
+
for (let diff = 0; diff < 16; diff++) {
|
|
74
69
|
if ((blp >> diff) & 1) {
|
|
75
70
|
lost.push(pid + diff + 1);
|
|
76
71
|
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
})
|
|
80
|
-
.flatMap((v) => v);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
81
74
|
return new GenericNack({
|
|
82
75
|
header,
|
|
83
76
|
senderSsrc,
|
|
@@ -108,11 +101,11 @@ class GenericNack {
|
|
|
108
101
|
return Buffer.concat([this.header.serialize(), buf]);
|
|
109
102
|
}
|
|
110
103
|
}
|
|
111
|
-
exports.GenericNack = GenericNack;
|
|
112
104
|
Object.defineProperty(GenericNack, "count", {
|
|
113
105
|
enumerable: true,
|
|
114
106
|
configurable: true,
|
|
115
107
|
writable: true,
|
|
116
108
|
value: 1
|
|
117
109
|
});
|
|
110
|
+
exports.GenericNack = GenericNack;
|
|
118
111
|
//# sourceMappingURL=nack.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nack.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/rtpfb/nack.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"nack.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/rtpfb/nack.ts"],"names":[],"mappings":";;;AAAA,gDAAoE;AACpE,sCAAuC;AACvC,wBAA+C;AAE/C,gEAAgE;AAChE,kEAAkE;AAClE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AAEpE,kBAAkB;AAClB,2CAA2C;AAE3C,MAAa,WAAW;IAQtB,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,eAAe,EAAE,IAAI,CAAC,eAAe;SACtC,CAAC;IACJ,CAAC;IAED,YAAY,QAA8B,EAAE;QAdnC;;;;mBAAQ,WAAW,CAAC,KAAK;WAAC;QACnC;;;;;WAAoB;QACpB;;;;;WAAoB;QACpB;;;;;WAAyB;QACzB;;;;mBAAiB,EAAE;WAAC;QAWlB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,MAAM,GAAG,IAAI,mBAAU,CAAC;gBAC3B,IAAI,EAAE,6BAA0B,CAAC,IAAI;gBACrC,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,OAAO,EAAE,CAAC;aACX,CAAC,CAAC;SACJ;IACH,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAY,EAAE,MAAkB;QACjD,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,GAAG,IAAA,kBAAY,EAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEjE,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE;YAC7C,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAA,kBAAY,EAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE;gBACpC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE;oBACrB,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;iBAC3B;aACF;SACF;QAED,OAAO,IAAI,WAAW,CAAC;YACrB,MAAM;YACN,UAAU;YACV,eAAe;YACf,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAED,SAAS;QACP,MAAM,QAAQ,GAAG,IAAA,kBAAY,EAC3B,CAAC,CAAC,EAAE,CAAC,CAAC,EACN,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,CACxC,CAAC;QAEF,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACxB,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EACxB,GAAG,GAAG,CAAC,CAAC;YACV,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBACjC,MAAM,IAAI,GAAG,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC;gBAC/B,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,EAAE;oBAC1B,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC;iBAClB;qBAAM;oBACL,GAAG,CAAC,IAAI,CAAC,IAAA,kBAAY,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC/C,OAAO,GAAG,GAAG,CAAC;oBACd,GAAG,GAAG,CAAC,CAAC;iBACT;YACH,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,IAAI,CAAC,IAAA,kBAAY,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;SAChD;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QACpC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACvD,CAAC;;AAzEM;;;;WAAQ,CAAC;EAAJ,CAAK;AADN,kCAAW","sourcesContent":["import { bufferReader, bufferWriter } from \"../../../../common/src\";\nimport { RtcpHeader } from \"../header\";\nimport { RtcpTransportLayerFeedback } from \".\";\n\n// 0 1 2 3\n// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | PID | BLP |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\n// Packet ID (PID)\n// bitmask of following lost packets (BLP):\n\nexport class GenericNack {\n static count = 1;\n readonly count = GenericNack.count;\n header!: RtcpHeader;\n senderSsrc!: number;\n mediaSourceSsrc!: number;\n lost: number[] = [];\n\n toJSON() {\n return {\n lost: this.lost,\n senderSsrc: this.senderSsrc,\n mediaSourceSsrc: this.mediaSourceSsrc,\n };\n }\n\n constructor(props: Partial<GenericNack> = {}) {\n Object.assign(this, props);\n if (!this.header) {\n this.header = new RtcpHeader({\n type: RtcpTransportLayerFeedback.type,\n count: this.count,\n version: 2,\n });\n }\n }\n\n static deSerialize(data: Buffer, header: RtcpHeader) {\n const [senderSsrc, mediaSourceSsrc] = bufferReader(data, [4, 4]);\n\n const lost: number[] = [];\n for (let pos = 8; pos < data.length; pos += 4) {\n const [pid, blp] = bufferReader(data.subarray(pos), [2, 2]);\n lost.push(pid);\n for (let diff = 0; diff < 16; diff++) {\n if ((blp >> diff) & 1) {\n lost.push(pid + diff + 1);\n }\n }\n }\n\n return new GenericNack({\n header,\n senderSsrc,\n mediaSourceSsrc,\n lost,\n });\n }\n\n serialize() {\n const ssrcPair = bufferWriter(\n [4, 4],\n [this.senderSsrc, this.mediaSourceSsrc]\n );\n\n const fci: Buffer[] = [];\n if (this.lost.length > 0) {\n let headPid = this.lost[0],\n blp = 0;\n this.lost.slice(1).forEach((pid) => {\n const diff = pid - headPid - 1;\n if (diff >= 0 && diff < 16) {\n blp |= 1 << diff;\n } else {\n fci.push(bufferWriter([2, 2], [headPid, blp]));\n headPid = pid;\n blp = 0;\n }\n });\n fci.push(bufferWriter([2, 2], [headPid, blp]));\n }\n const buf = Buffer.concat([ssrcPair, Buffer.concat(fci)]);\n this.header.length = buf.length / 4;\n return Buffer.concat([this.header.serialize(), buf]);\n }\n}\n"]}
|