werift 0.22.2 → 0.22.3
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.d.ts +2 -1
- package/lib/common/src/binary.js +5 -2
- package/lib/common/src/binary.js.map +1 -1
- package/lib/common/src/transport.d.ts +2 -0
- package/lib/common/src/transport.js +7 -0
- package/lib/common/src/transport.js.map +1 -1
- package/lib/dtls/src/cipher/create.d.ts +2 -1
- package/lib/dtls/src/cipher/create.js.map +1 -1
- package/lib/dtls/src/cipher/suites/abstract.d.ts +2 -1
- package/lib/dtls/src/cipher/suites/abstract.js.map +1 -1
- package/lib/dtls/src/cipher/suites/aead.js +3 -3
- package/lib/dtls/src/cipher/suites/aead.js.map +1 -1
- package/lib/dtls/src/context/cipher.js +4 -5
- package/lib/dtls/src/context/cipher.js.map +1 -1
- package/lib/dtls/src/handshake/extensions/useSrtp.js +4 -7
- package/lib/dtls/src/handshake/extensions/useSrtp.js.map +1 -1
- package/lib/ice/src/candidate.js +1 -5
- package/lib/ice/src/candidate.js.map +1 -1
- package/lib/ice/src/ice.js +4 -4
- package/lib/ice/src/ice.js.map +1 -1
- package/lib/ice/src/iceBase.d.ts +1 -1
- package/lib/ice/src/iceBase.js +1 -1
- package/lib/ice/src/iceBase.js.map +1 -1
- package/lib/ice/src/stun/attributes.js +1 -2
- package/lib/ice/src/stun/attributes.js.map +1 -1
- package/lib/ice/src/stun/message.js +1 -0
- package/lib/ice/src/stun/message.js.map +1 -1
- package/lib/ice/src/stun/protocol.js +6 -0
- package/lib/ice/src/stun/protocol.js.map +1 -1
- package/lib/ice/src/turn/protocol.js +3 -0
- package/lib/ice/src/turn/protocol.js.map +1 -1
- package/lib/index.mjs +359 -313
- package/lib/nonstandard/index.mjs +370 -288
- package/lib/rtp/src/extra/container/webm/container.d.ts +2 -2
- package/lib/rtp/src/extra/container/webm/container.js +7 -5
- package/lib/rtp/src/extra/container/webm/container.js.map +1 -1
- package/lib/rtp/src/extra/container/webm/ebml/ebml.d.ts +34 -0
- package/lib/rtp/src/extra/container/webm/ebml/ebml.js +75 -1
- package/lib/rtp/src/extra/container/webm/ebml/ebml.js.map +1 -1
- package/lib/rtp/src/extra/container/webm/index.d.ts +1 -0
- package/lib/rtp/src/extra/container/webm/index.js +1 -0
- package/lib/rtp/src/extra/container/webm/index.js.map +1 -1
- package/lib/rtp/src/extra/container/webm/util.d.ts +8 -0
- package/lib/rtp/src/extra/container/webm/util.js +100 -0
- package/lib/rtp/src/extra/container/webm/util.js.map +1 -0
- package/lib/rtp/src/extra/processor/dtx.d.ts +1 -1
- package/lib/rtp/src/extra/processor/dtx.js +1 -1
- package/lib/rtp/src/extra/processor/dtx.js.map +1 -1
- package/lib/rtp/src/extra/processor/lipsync.js +1 -1
- package/lib/rtp/src/extra/processor/lipsync.js.map +1 -1
- package/lib/rtp/src/extra/processor/mute.d.ts +1 -1
- package/lib/rtp/src/extra/processor/mute.js +1 -1
- package/lib/rtp/src/extra/processor/mute.js.map +1 -1
- package/lib/rtp/src/extra/processor/ntpTime.d.ts +1 -1
- package/lib/rtp/src/extra/processor/ntpTime.js +1 -1
- package/lib/rtp/src/extra/processor/ntpTime.js.map +1 -1
- package/lib/rtp/src/extra/processor/webm.d.ts +2 -2
- package/lib/rtp/src/extra/processor/webm.js.map +1 -1
- package/lib/rtp/src/extra/processor/webmStream.d.ts +2 -2
- package/lib/rtp/src/extra/processor/webmStream.js.map +1 -1
- package/lib/rtp/src/rtcp/header.d.ts +1 -0
- package/lib/rtp/src/rtcp/header.js +10 -0
- package/lib/rtp/src/rtcp/header.js.map +1 -1
- package/lib/rtp/src/rtcp/psfb/index.d.ts +1 -1
- package/lib/rtp/src/rtcp/psfb/index.js +2 -2
- package/lib/rtp/src/rtcp/psfb/index.js.map +1 -1
- package/lib/rtp/src/rtcp/rr.js +2 -2
- package/lib/rtp/src/rtcp/rr.js.map +1 -1
- package/lib/rtp/src/rtcp/rtcp.d.ts +0 -1
- package/lib/rtp/src/rtcp/rtcp.js +0 -10
- package/lib/rtp/src/rtcp/rtcp.js.map +1 -1
- package/lib/rtp/src/rtcp/rtpfb/const.d.ts +1 -0
- package/lib/rtp/src/rtcp/rtpfb/const.js +5 -0
- package/lib/rtp/src/rtcp/rtpfb/const.js.map +1 -0
- package/lib/rtp/src/rtcp/rtpfb/index.js +2 -1
- package/lib/rtp/src/rtcp/rtpfb/index.js.map +1 -1
- package/lib/rtp/src/rtcp/rtpfb/nack.js +2 -2
- package/lib/rtp/src/rtcp/rtpfb/nack.js.map +1 -1
- package/lib/rtp/src/rtcp/sdes.d.ts +1 -1
- package/lib/rtp/src/rtcp/sdes.js +2 -2
- package/lib/rtp/src/rtcp/sdes.js.map +1 -1
- package/lib/rtp/src/rtcp/sr.js +2 -2
- package/lib/rtp/src/rtcp/sr.js.map +1 -1
- package/lib/rtp/src/srtp/context/context.d.ts +3 -3
- package/lib/rtp/src/srtp/context/context.js.map +1 -1
- package/lib/sctp/src/param.js +4 -5
- package/lib/sctp/src/param.js.map +1 -1
- package/lib/sctp/src/sctp.js +22 -14
- package/lib/sctp/src/sctp.js.map +1 -1
- package/lib/webrtc/src/media/index.d.ts +1 -0
- package/lib/webrtc/src/media/index.js +1 -0
- package/lib/webrtc/src/media/index.js.map +1 -1
- package/lib/webrtc/src/media/receiver/nack.js +3 -7
- package/lib/webrtc/src/media/receiver/nack.js.map +1 -1
- package/lib/webrtc/src/media/receiver/receiverTwcc.d.ts +2 -2
- package/lib/webrtc/src/media/receiver/receiverTwcc.js +1 -1
- package/lib/webrtc/src/media/receiver/receiverTwcc.js.map +1 -1
- package/lib/webrtc/src/media/rtpReceiver.js +2 -2
- package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
- package/lib/webrtc/src/media/rtpSender.js +3 -36
- package/lib/webrtc/src/media/rtpSender.js.map +1 -1
- package/lib/webrtc/src/media/rtpTransceiver.js +2 -35
- package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
- package/lib/webrtc/src/media/track.js +3 -3
- package/lib/webrtc/src/media/track.js.map +1 -1
- package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
- package/lib/webrtc/src/nonstandard/userMedia.js +2 -2
- package/lib/webrtc/src/nonstandard/userMedia.js.map +1 -1
- package/lib/webrtc/src/peerConnection.d.ts +1 -0
- package/lib/webrtc/src/peerConnection.js +38 -68
- package/lib/webrtc/src/peerConnection.js.map +1 -1
- package/lib/webrtc/src/secureTransportManager.js +7 -3
- package/lib/webrtc/src/secureTransportManager.js.map +1 -1
- package/lib/webrtc/src/transport/dtls.js +9 -2
- package/lib/webrtc/src/transport/dtls.js.map +1 -1
- package/lib/webrtc/src/transport/ice.js +2 -2
- package/lib/webrtc/src/transport/ice.js.map +1 -1
- package/lib/webrtc/src/transport/sctp.js +8 -36
- package/lib/webrtc/src/transport/sctp.js.map +1 -1
- package/lib/webrtc/src/utils.d.ts +6 -1
- package/lib/webrtc/src/utils.js +34 -13
- package/lib/webrtc/src/utils.js.map +1 -1
- package/package.json +2 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mute.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/mute.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AAEpC,6BAA4B;AAQ5B,MAAa,eAAe;IAkB1B,YACU,MAA+B,EAC/B,KAQP;QATD;;;;mBAAQ,MAAM;WAAyB;QACvC;;;;mBAAQ,KAAK;WAQZ;QA3BM;;;;mBAAK,IAAA,mBAAU,GAAE;WAAC;
|
|
1
|
+
{"version":3,"file":"mute.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/mute.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"crypto\";\n\nimport { int } from \"../..\";\nimport type { CodecFrame, DepacketizerOutput } from \"./depacketizer\";\nimport type { Processor } from \"./interface\";\n\nexport type MuteInput = DepacketizerOutput;\n\nexport type MuteOutput = MuteInput;\n\nexport class MuteHandlerBase implements Processor<MuteInput, MuteOutput> {\n readonly id = randomUUID().toString();\n private buffer: CodecFrame[][];\n private index = 0;\n private ended = false;\n private baseTime?: number;\n private currentTimestamp!: number;\n private internalStats = {};\n /**ms */\n private lastCommittedTime = 0;\n private lastExecutionTime = 0;\n /**ms */\n private interval: number;\n private bufferDuration: number;\n private bufferLength: number;\n /**ms */\n private lastFrameReceivedAt = 0;\n\n constructor(\n private output: (o: MuteOutput) => void,\n private props: {\n ptime: number;\n dummyPacket: Buffer;\n /**ms\n * @description intervalごとに無音区間に空パケットを挿入する\n */\n interval: number;\n bufferLength: number;\n },\n ) {\n this.interval = props.interval;\n this.bufferDuration = this.interval / 2;\n this.bufferLength = this.props.bufferLength * 2;\n this.buffer = [...new Array(this.bufferLength)].map(() => []);\n }\n\n toJSON(): Record<string, any> {\n return { ...this.internalStats, id: this.id };\n }\n\n private executeTask() {\n const { ptime, dummyPacket } = this.props;\n\n const buffer = this.buffer[this.index].sort((a, b) => a.time - b.time);\n const last = buffer.at(-1);\n const expect = last\n ? last.time +\n // offset\n ptime\n : this.currentTimestamp;\n\n if (expect < this.currentTimestamp + this.bufferDuration) {\n for (\n let time = expect;\n time < this.currentTimestamp + this.bufferDuration;\n time += ptime\n ) {\n buffer.push({\n time,\n data: dummyPacket,\n isKeyframe: true,\n });\n }\n }\n this.currentTimestamp += this.bufferDuration;\n this.internalStats[\"mute\"] = new Date().toISOString();\n\n this.buffer[this.index] = [];\n buffer.forEach((frame) => {\n this.output({ frame });\n this.lastCommittedTime = frame.time;\n });\n\n this.index++;\n if (this.index === this.bufferLength) {\n this.index = 0;\n }\n }\n\n private stop() {\n this.ended = true;\n this.buffer = [];\n this.output = undefined as any;\n }\n\n processInput = ({ frame, eol }: MuteInput): MuteOutput[] => {\n if (!frame) {\n this.stop();\n return [{ eol }];\n }\n\n if (this.ended) {\n return [];\n }\n\n if (this.baseTime == undefined) {\n this.baseTime = frame.time;\n this.currentTimestamp = this.baseTime;\n this.lastExecutionTime = this.baseTime;\n this.lastCommittedTime = this.baseTime;\n this.lastFrameReceivedAt = Date.now();\n }\n\n // 過去のフレームを捨てる\n if (frame.time < this.lastCommittedTime) {\n return [];\n }\n\n // NTPの同期ずれが疑われるので捨てる\n const now = Date.now();\n const gap = 5000; // RTCP SR interval;\n const lastCommittedElapsed = frame.time - this.lastCommittedTime;\n const lastFrameReceivedElapsed = now - this.lastFrameReceivedAt;\n if (gap < lastFrameReceivedElapsed && lastCommittedElapsed < gap) {\n this.internalStats[\"invalidFrameTime\"] = {\n count: (this.internalStats[\"invalidFrameTime\"]?.count ?? 0) + 1,\n at: new Date().toISOString(),\n lastCommittedElapsed,\n lastFrameReceivedElapsed,\n };\n return [];\n }\n this.lastFrameReceivedAt = now;\n\n const elapsed = frame.time - this.baseTime;\n const index = int(elapsed / this.bufferDuration) % this.bufferLength;\n this.buffer[index].push(frame);\n\n const lastExecution = frame.time - this.lastExecutionTime;\n if (lastExecution >= this.interval) {\n const times = int(lastExecution / this.bufferDuration) - 1;\n this.lastExecutionTime = this.currentTimestamp;\n for (let i = 0; i < times; i++) {\n this.executeTask();\n this.lastExecutionTime += this.bufferDuration;\n }\n }\n\n return [];\n };\n}\n"]}
|
|
@@ -13,7 +13,7 @@ export interface NtpTimeOutput {
|
|
|
13
13
|
}
|
|
14
14
|
export declare class NtpTimeBase implements Processor<NtpTimeInput, NtpTimeOutput> {
|
|
15
15
|
clockRate: number;
|
|
16
|
-
readonly id:
|
|
16
|
+
readonly id: string;
|
|
17
17
|
private baseNtpTimestamp?;
|
|
18
18
|
private baseRtpTimestamp?;
|
|
19
19
|
private latestNtpTimestamp?;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ntpTime.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/ntpTime.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AAEpC,6BAKe;AAEf,iCAAmC;AAenC,MAAa,WAAW;IAWtB,YAAmB,SAAiB;QAAxB;;;;mBAAO,SAAS;WAAQ;QAV3B;;;;mBAAK,IAAA,mBAAU,GAAE;WAAC;
|
|
1
|
+
{"version":3,"file":"ntpTime.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/ntpTime.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"crypto\";\n\nimport {\n type RtcpPacket,\n RtcpSrPacket,\n type RtpPacket,\n ntpTime2Sec,\n} from \"../..\";\nimport type { Processor } from \"./interface\";\nimport { Max32Uint } from \"./webm\";\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().toString();\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,12 +1,12 @@
|
|
|
1
1
|
import { Event } from "../../imports/common";
|
|
2
|
-
import type {
|
|
2
|
+
import type { WebmSupportedCodec } from "../container/webm";
|
|
3
3
|
import type { AVProcessor } from "./interface";
|
|
4
4
|
export interface WebmTrack {
|
|
5
5
|
width?: number;
|
|
6
6
|
height?: number;
|
|
7
7
|
roll?: number;
|
|
8
8
|
kind: MediaKind;
|
|
9
|
-
codec:
|
|
9
|
+
codec: WebmSupportedCodec;
|
|
10
10
|
clockRate: number;
|
|
11
11
|
trackNumber: number;
|
|
12
12
|
}
|
|
@@ -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 { ContainerSupportedCodec } 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: ContainerSupportedCodec;\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"]}
|
|
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 { WebmSupportedCodec } 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: WebmSupportedCodec;\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"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ReadableStream, WritableStream } from "stream/web";
|
|
2
|
-
import type {
|
|
2
|
+
import type { WebmSupportedCodec } from "../container/webm/container";
|
|
3
3
|
import { WebmBase, type WebmInput, type WebmOption, type WebmOutput } from "./webm";
|
|
4
4
|
export type WebmStreamOutput = WebmOutput;
|
|
5
5
|
export type WebmStreamOption = WebmOption;
|
|
@@ -12,7 +12,7 @@ export declare class WebmStream extends WebmBase {
|
|
|
12
12
|
width?: number;
|
|
13
13
|
height?: number;
|
|
14
14
|
kind: "audio" | "video";
|
|
15
|
-
codec:
|
|
15
|
+
codec: WebmSupportedCodec;
|
|
16
16
|
clockRate: number;
|
|
17
17
|
trackNumber: number;
|
|
18
18
|
}[], options?: WebmStreamOption);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webmStream.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/webmStream.ts"],"names":[],"mappings":";;;AAAA,oCAIoB;AAGpB,iCAKgB;AAMhB,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,CAAC;YACf,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;QACL,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QAC1D,IAAI,UAAU,EAAE,CAAC;YACf,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;QACL,CAAC;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 type ReadableStreamController,\n WritableStream,\n} from \"stream/web\";\n\nimport type {
|
|
1
|
+
{"version":3,"file":"webmStream.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/webmStream.ts"],"names":[],"mappings":";;;AAAA,oCAIoB;AAGpB,iCAKgB;AAMhB,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,CAAC;YACf,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;QACL,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QAC1D,IAAI,UAAU,EAAE,CAAC;YACf,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;QACL,CAAC;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 type ReadableStreamController,\n WritableStream,\n} from \"stream/web\";\n\nimport type { WebmSupportedCodec } from \"../container/webm/container\";\nimport {\n WebmBase,\n type WebmInput,\n type WebmOption,\n type WebmOutput,\n} 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: WebmSupportedCodec;\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"]}
|
|
@@ -7,6 +7,7 @@ export declare class RtcpHeader {
|
|
|
7
7
|
/**このパケットの長さは、ヘッダーと任意のパディングを含む32ビットワードから 1を引いたものである */
|
|
8
8
|
length: number;
|
|
9
9
|
constructor(props?: Partial<RtcpHeader>);
|
|
10
|
+
static serialize(type: number, count: number, payload: Buffer, length: number): Buffer<ArrayBuffer>;
|
|
10
11
|
serialize(): Buffer<ArrayBuffer>;
|
|
11
12
|
static deSerialize(buf: Buffer): RtcpHeader;
|
|
12
13
|
}
|
|
@@ -45,6 +45,16 @@ class RtcpHeader {
|
|
|
45
45
|
});
|
|
46
46
|
Object.assign(this, props);
|
|
47
47
|
}
|
|
48
|
+
static serialize(type, count, payload, length) {
|
|
49
|
+
const header = new RtcpHeader({
|
|
50
|
+
type,
|
|
51
|
+
count,
|
|
52
|
+
version: 2,
|
|
53
|
+
length,
|
|
54
|
+
});
|
|
55
|
+
const buf = header.serialize();
|
|
56
|
+
return Buffer.concat([buf, payload]);
|
|
57
|
+
}
|
|
48
58
|
serialize() {
|
|
49
59
|
const v_p_rc = new src_1.BitWriter(8);
|
|
50
60
|
v_p_rc.set(2, 0, this.version);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../../../../rtp/src/rtcp/header.ts"],"names":[],"mappings":";;;AAAA,6CAK6B;AAEhB,QAAA,gBAAgB,GAAG,CAAC,CAAC;AAElC;;;;;;GAMG;AAEH,MAAa,UAAU;IAQrB,YAAY,QAA6B,EAAE;QAP3C;;;;mBAAU,CAAC;WAAC;QACZ;;;;mBAAU,KAAK;WAAC;QAChB;;;;mBAAQ,CAAC;WAAC;QACV;;;;mBAAO,CAAC;WAAC;QACT,sDAAsD;QACtD;;;;mBAAS,CAAC;WAAC;QAGT,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,SAAS;QACP,MAAM,MAAM,GAAG,IAAI,eAAS,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,IAAA,kBAAY,EAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5E,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,IAAA,kBAAY,EAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,IAAA,YAAM,EAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,IAAA,YAAM,EAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,IAAA,YAAM,EAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,IAAI,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACnE,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../../../../rtp/src/rtcp/header.ts"],"names":[],"mappings":";;;AAAA,6CAK6B;AAEhB,QAAA,gBAAgB,GAAG,CAAC,CAAC;AAElC;;;;;;GAMG;AAEH,MAAa,UAAU;IAQrB,YAAY,QAA6B,EAAE;QAP3C;;;;mBAAU,CAAC;WAAC;QACZ;;;;mBAAU,KAAK;WAAC;QAChB;;;;mBAAQ,CAAC;WAAC;QACV;;;;mBAAO,CAAC;WAAC;QACT,sDAAsD;QACtD;;;;mBAAS,CAAC;WAAC;QAGT,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,SAAS,CACd,IAAY,EACZ,KAAa,EACb,OAAe,EACf,MAAc;QAEd,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC;YAC5B,IAAI;YACJ,KAAK;YACL,OAAO,EAAE,CAAC;YACV,MAAM;SACP,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,SAAS;QACP,MAAM,MAAM,GAAG,IAAI,eAAS,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,IAAA,kBAAY,EAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5E,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,IAAA,kBAAY,EAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,IAAA,YAAM,EAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,IAAA,YAAM,EAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,IAAA,YAAM,EAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,IAAI,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACnE,CAAC;CACF;AA5CD,gCA4CC","sourcesContent":["import {\n BitWriter,\n bufferReader,\n bufferWriter,\n getBit,\n} from \"../../../common/src\";\n\nexport const RTCP_HEADER_SIZE = 4;\n\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| RC | PT | length |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n */\n\nexport class RtcpHeader {\n version = 2;\n padding = false;\n count = 0;\n type = 0;\n /**このパケットの長さは、ヘッダーと任意のパディングを含む32ビットワードから 1を引いたものである */\n length = 0;\n\n constructor(props: Partial<RtcpHeader> = {}) {\n Object.assign(this, props);\n }\n\n static serialize(\n type: number,\n count: number,\n payload: Buffer,\n length: number,\n ) {\n const header = new RtcpHeader({\n type,\n count,\n version: 2,\n length,\n });\n const buf = header.serialize();\n return Buffer.concat([buf, payload]);\n }\n\n serialize() {\n const v_p_rc = new BitWriter(8);\n v_p_rc.set(2, 0, this.version);\n if (this.padding) v_p_rc.set(1, 2, 1);\n v_p_rc.set(5, 3, this.count);\n const buf = bufferWriter([1, 1, 2], [v_p_rc.value, this.type, this.length]);\n return buf;\n }\n\n static deSerialize(buf: Buffer) {\n const [v_p_rc, type, length] = bufferReader(buf, [1, 1, 2]);\n const version = getBit(v_p_rc, 0, 2);\n const padding = getBit(v_p_rc, 2, 1) > 0;\n const count = getBit(v_p_rc, 3, 5);\n return new RtcpHeader({ version, padding, count, type, length });\n }\n}\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RtcpPayloadSpecificFeedback = void 0;
|
|
4
4
|
const common_1 = require("../../imports/common");
|
|
5
|
-
const
|
|
5
|
+
const header_1 = require("../header");
|
|
6
6
|
const fullIntraRequest_1 = require("./fullIntraRequest");
|
|
7
7
|
const pictureLossIndication_1 = require("./pictureLossIndication");
|
|
8
8
|
const remb_1 = require("./remb");
|
|
@@ -25,7 +25,7 @@ class RtcpPayloadSpecificFeedback {
|
|
|
25
25
|
}
|
|
26
26
|
serialize() {
|
|
27
27
|
const payload = this.feedback.serialize();
|
|
28
|
-
return
|
|
28
|
+
return header_1.RtcpHeader.serialize(this.type, this.feedback.count, payload, this.feedback.length);
|
|
29
29
|
}
|
|
30
30
|
static deSerialize(data, header) {
|
|
31
31
|
let feedback;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/psfb/index.ts"],"names":[],"mappings":";;;AAAA,iDAA6C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/psfb/index.ts"],"names":[],"mappings":";;;AAAA,iDAA6C;AAC7C,sCAAuC;AACvC,yDAAsD;AACtD,mEAAgE;AAChE,iCAAqD;AAErD,MAAM,GAAG,GAAG,IAAA,cAAK,EAAC,8BAA8B,CAAC,CAAC;AAOlD,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,mBAAU,CAAC,SAAS,CACzB,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,CAAC;YACrB,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;QACV,CAAC;QAED,OAAO,IAAI,2BAA2B,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACvD,CAAC;;AAvCH,kEAwCC;AAvCiB;;;;WAAO,GAAG;EAAN,CAAO","sourcesContent":["import { debug } from \"../../imports/common\";\nimport { RtcpHeader } from \"../header\";\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 RtcpHeader.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"]}
|
package/lib/rtp/src/rtcp/rr.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RtcpReceiverInfo = exports.RtcpRrPacket = void 0;
|
|
4
4
|
const src_1 = require("../../../common/src");
|
|
5
|
-
const
|
|
5
|
+
const header_1 = require("./header");
|
|
6
6
|
class RtcpRrPacket {
|
|
7
7
|
constructor(props = {}) {
|
|
8
8
|
Object.defineProperty(this, "ssrc", {
|
|
@@ -31,7 +31,7 @@ class RtcpRrPacket {
|
|
|
31
31
|
payload,
|
|
32
32
|
...this.reports.map((report) => report.serialize()),
|
|
33
33
|
]);
|
|
34
|
-
return
|
|
34
|
+
return header_1.RtcpHeader.serialize(RtcpRrPacket.type, this.reports.length, payload, Math.floor(payload.length / 4));
|
|
35
35
|
}
|
|
36
36
|
static deSerialize(data, count) {
|
|
37
37
|
const [ssrc] = (0, src_1.bufferReader)(data, [4]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rr.js","sourceRoot":"","sources":["../../../../../rtp/src/rtcp/rr.ts"],"names":[],"mappings":";;;AAAA,6CAAiE;AACjE,
|
|
1
|
+
{"version":3,"file":"rr.js","sourceRoot":"","sources":["../../../../../rtp/src/rtcp/rr.ts"],"names":[],"mappings":"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","sourcesContent":["import { bufferReader, bufferWriter } from \"../../../common/src\";\nimport { RtcpHeader } from \"./header\";\n\nexport class RtcpRrPacket {\n ssrc = 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 RtcpHeader.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"]}
|
|
@@ -5,7 +5,6 @@ import { RtcpSourceDescriptionPacket } from "./sdes";
|
|
|
5
5
|
import { RtcpSrPacket } from "./sr";
|
|
6
6
|
export type RtcpPacket = RtcpRrPacket | RtcpSrPacket | RtcpPayloadSpecificFeedback | RtcpSourceDescriptionPacket | RtcpTransportLayerFeedback;
|
|
7
7
|
export declare class RtcpPacketConverter {
|
|
8
|
-
static serialize(type: number, count: number, payload: Buffer, length: number): Buffer<ArrayBuffer>;
|
|
9
8
|
static deSerialize(data: Buffer): RtcpPacket[];
|
|
10
9
|
}
|
|
11
10
|
export declare function isRtcp(buf: Buffer): boolean;
|
package/lib/rtp/src/rtcp/rtcp.js
CHANGED
|
@@ -11,16 +11,6 @@ const sdes_1 = require("./sdes");
|
|
|
11
11
|
const sr_1 = require("./sr");
|
|
12
12
|
const log = (0, common_1.debug)("werift-rtp:packages/rtp/src/rtcp/rtcp.ts");
|
|
13
13
|
class RtcpPacketConverter {
|
|
14
|
-
static serialize(type, count, payload, length) {
|
|
15
|
-
const header = new header_1.RtcpHeader({
|
|
16
|
-
type,
|
|
17
|
-
count,
|
|
18
|
-
version: 2,
|
|
19
|
-
length,
|
|
20
|
-
});
|
|
21
|
-
const buf = header.serialize();
|
|
22
|
-
return Buffer.concat([buf, payload]);
|
|
23
|
-
}
|
|
24
14
|
static deSerialize(data) {
|
|
25
15
|
let pos = 0;
|
|
26
16
|
const packets = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rtcp.js","sourceRoot":"","sources":["../../../../../rtp/src/rtcp/rtcp.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"rtcp.js","sourceRoot":"","sources":["../../../../../rtp/src/rtcp/rtcp.ts"],"names":[],"mappings":";;;AAuEA,wBAEC;AAzED,8CAA0C;AAC1C,qCAAwD;AACxD,iCAAqD;AACrD,6BAAoC;AACpC,mCAAqD;AACrD,iCAAqD;AACrD,6BAAoC;AAEpC,MAAM,GAAG,GAAG,IAAA,cAAK,EAAC,0CAA0C,CAAC,CAAC;AAS9D,MAAa,mBAAmB;IAC9B,MAAM,CAAC,WAAW,CAAC,IAAY;QAC7B,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,MAAM,OAAO,GAAiB,EAAE,CAAC;QAEjC,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,mBAAU,CAAC,WAAW,CACnC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,yBAAgB,CAAC,CAC3C,CAAC;YACF,GAAG,IAAI,yBAAgB,CAAC;YAExB,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACjC,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAEzB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1E,CAAC;YAED,IAAI,CAAC;gBACH,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;oBACpB,KAAK,iBAAY,CAAC,IAAI;wBACpB,OAAO,CAAC,IAAI,CAAC,iBAAY,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;wBAC9D,MAAM;oBACR,KAAK,iBAAY,CAAC,IAAI;wBACpB,OAAO,CAAC,IAAI,CAAC,iBAAY,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;wBAC9D,MAAM;oBACR,KAAK,kCAA2B,CAAC,IAAI;wBACnC,OAAO,CAAC,IAAI,CACV,kCAA2B,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CACzD,CAAC;wBACF,MAAM;oBACR,KAAK,kCAA0B,CAAC,IAAI;wBAClC,OAAO,CAAC,IAAI,CACV,kCAA0B,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CACxD,CAAC;wBACF,MAAM;oBACR,KAAK,kCAA2B,CAAC,IAAI;wBACnC,OAAO,CAAC,IAAI,CACV,kCAA2B,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CACzD,CAAC;wBACF,MAAM;oBACR;wBACE,2CAA2C;wBAC3C,MAAM;gBACV,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AApDD,kDAoDC;AAED,SAAgB,MAAM,CAAC,GAAW;IAChC,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;AAC3D,CAAC","sourcesContent":["import { debug } from \"../imports/common\";\nimport { RTCP_HEADER_SIZE, RtcpHeader } from \"./header\";\nimport { RtcpPayloadSpecificFeedback } from \"./psfb\";\nimport { RtcpRrPacket } from \"./rr\";\nimport { RtcpTransportLayerFeedback } from \"./rtpfb\";\nimport { RtcpSourceDescriptionPacket } from \"./sdes\";\nimport { RtcpSrPacket } from \"./sr\";\n\nconst log = debug(\"werift-rtp:packages/rtp/src/rtcp/rtcp.ts\");\n\nexport type RtcpPacket =\n | RtcpRrPacket\n | RtcpSrPacket\n | RtcpPayloadSpecificFeedback\n | RtcpSourceDescriptionPacket\n | RtcpTransportLayerFeedback;\n\nexport class RtcpPacketConverter {\n static deSerialize(data: Buffer) {\n let pos = 0;\n const packets: RtcpPacket[] = [];\n\n while (pos < data.length) {\n const header = RtcpHeader.deSerialize(\n data.subarray(pos, pos + RTCP_HEADER_SIZE),\n );\n pos += RTCP_HEADER_SIZE;\n\n let payload = data.subarray(pos);\n pos += header.length * 4;\n\n if (header.padding) {\n payload = payload.subarray(0, payload.length - payload.subarray(-1)[0]);\n }\n\n try {\n switch (header.type) {\n case RtcpSrPacket.type:\n packets.push(RtcpSrPacket.deSerialize(payload, header.count));\n break;\n case RtcpRrPacket.type:\n packets.push(RtcpRrPacket.deSerialize(payload, header.count));\n break;\n case RtcpSourceDescriptionPacket.type:\n packets.push(\n RtcpSourceDescriptionPacket.deSerialize(payload, header),\n );\n break;\n case RtcpTransportLayerFeedback.type:\n packets.push(\n RtcpTransportLayerFeedback.deSerialize(payload, header),\n );\n break;\n case RtcpPayloadSpecificFeedback.type:\n packets.push(\n RtcpPayloadSpecificFeedback.deSerialize(payload, header),\n );\n break;\n default:\n // log(\"unknown rtcp packet\", header.type);\n break;\n }\n } catch (error) {\n log(\"deSerialize RTCP\", error);\n }\n }\n\n return packets;\n }\n}\n\nexport function isRtcp(buf: Buffer) {\n return buf.length >= 2 && buf[1] >= 192 && buf[1] <= 208;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const RtcpTransportLayerFeedbackType = 205;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/rtpfb/const.ts"],"names":[],"mappings":";;;AAAa,QAAA,8BAA8B,GAAG,GAAG,CAAC","sourcesContent":["export const RtcpTransportLayerFeedbackType = 205;\n"]}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RtcpTransportLayerFeedback = void 0;
|
|
4
4
|
const common_1 = require("../../imports/common");
|
|
5
|
+
const const_1 = require("./const");
|
|
5
6
|
const nack_1 = require("./nack");
|
|
6
7
|
const twcc_1 = require("./twcc");
|
|
7
8
|
const log = (0, common_1.debug)("werift-rtp:packages/rtp/rtcp/rtpfb/index");
|
|
@@ -52,6 +53,6 @@ Object.defineProperty(RtcpTransportLayerFeedback, "type", {
|
|
|
52
53
|
enumerable: true,
|
|
53
54
|
configurable: true,
|
|
54
55
|
writable: true,
|
|
55
|
-
value:
|
|
56
|
+
value: const_1.RtcpTransportLayerFeedbackType
|
|
56
57
|
});
|
|
57
58
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/rtpfb/index.ts"],"names":[],"mappings":";;;AAAA,iDAA6C;AAE7C,iCAAqC;AACrC,iCAAyC;AAEzC,MAAM,GAAG,GAAG,IAAA,cAAK,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,CAAC;YACrB,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;QACV,CAAC;QAED,OAAO,IAAI,0BAA0B,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;;AA/BH,gEAgCC;AA/BiB;;;;WAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/rtpfb/index.ts"],"names":[],"mappings":";;;AAAA,iDAA6C;AAE7C,mCAAyD;AACzD,iCAAqC;AACrC,iCAAyC;AAEzC,MAAM,GAAG,GAAG,IAAA,cAAK,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,CAAC;YACrB,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;QACV,CAAC;QAED,OAAO,IAAI,0BAA0B,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;;AA/BH,gEAgCC;AA/BiB;;;;WAAO,sCAA8B;EAAjC,CAAkC","sourcesContent":["import { debug } from \"../../imports/common\";\nimport type { RtcpHeader } from \"../header\";\nimport { RtcpTransportLayerFeedbackType } from \"./const\";\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 = RtcpTransportLayerFeedbackType;\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,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.GenericNack = void 0;
|
|
4
|
-
const _1 = require(".");
|
|
5
4
|
const src_1 = require("../../../../common/src");
|
|
6
5
|
const header_1 = require("../header");
|
|
6
|
+
const const_1 = require("./const");
|
|
7
7
|
// 0 1 2 3
|
|
8
8
|
// 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
|
|
9
9
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
@@ -53,7 +53,7 @@ class GenericNack {
|
|
|
53
53
|
Object.assign(this, props);
|
|
54
54
|
if (!this.header) {
|
|
55
55
|
this.header = new header_1.RtcpHeader({
|
|
56
|
-
type:
|
|
56
|
+
type: const_1.RtcpTransportLayerFeedbackType,
|
|
57
57
|
count: this.count,
|
|
58
58
|
version: 2,
|
|
59
59
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nack.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/rtpfb/nack.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"nack.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/rtpfb/nack.ts"],"names":[],"mappings":"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","sourcesContent":["import { bufferReader, bufferWriter } from \"../../../../common/src\";\nimport { RtcpHeader } from \"../header\";\nimport { RtcpTransportLayerFeedbackType } from \"./const\";\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: RtcpTransportLayerFeedbackType,\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"]}
|
package/lib/rtp/src/rtcp/sdes.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SourceDescriptionItem = exports.SourceDescriptionChunk = exports.RtcpSourceDescriptionPacket = void 0;
|
|
4
4
|
const src_1 = require("../../../common/src");
|
|
5
|
-
const
|
|
5
|
+
const header_1 = require("./header");
|
|
6
6
|
class RtcpSourceDescriptionPacket {
|
|
7
7
|
constructor(props) {
|
|
8
8
|
Object.defineProperty(this, "type", {
|
|
@@ -28,7 +28,7 @@ class RtcpSourceDescriptionPacket {
|
|
|
28
28
|
let payload = Buffer.concat(this.chunks.map((chunk) => chunk.serialize()));
|
|
29
29
|
while (payload.length % 4)
|
|
30
30
|
payload = Buffer.concat([payload, Buffer.from([0])]);
|
|
31
|
-
return
|
|
31
|
+
return header_1.RtcpHeader.serialize(this.type, this.chunks.length, payload, payload.length / 4);
|
|
32
32
|
}
|
|
33
33
|
static deSerialize(payload, header) {
|
|
34
34
|
const chunks = [];
|