mediabunny 1.30.0 → 1.30.1
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/dist/bundles/mediabunny.cjs +107 -107
- package/dist/bundles/mediabunny.min.cjs +7 -7
- package/dist/bundles/mediabunny.min.mjs +7 -7
- package/dist/bundles/mediabunny.mjs +107 -107
- package/dist/modules/src/codec-data.d.ts +0 -2
- package/dist/modules/src/codec-data.d.ts.map +1 -1
- package/dist/modules/src/codec-data.js +2 -8
- package/dist/modules/src/mpeg-ts/mpeg-ts-demuxer.d.ts +7 -11
- package/dist/modules/src/mpeg-ts/mpeg-ts-demuxer.d.ts.map +1 -1
- package/dist/modules/src/mpeg-ts/mpeg-ts-demuxer.js +107 -101
- package/dist/modules/src/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/codec-data.ts +2 -10
- package/src/mpeg-ts/mpeg-ts-demuxer.ts +138 -126
|
@@ -1967,9 +1967,6 @@ var Mediabunny = (() => {
|
|
|
1967
1967
|
return iterateNalUnitsInAnnexB(packetData);
|
|
1968
1968
|
}
|
|
1969
1969
|
};
|
|
1970
|
-
var iterateAvcNalUnitsAnnexB = function* (packetData) {
|
|
1971
|
-
yield* iterateNalUnitsInAnnexB(packetData);
|
|
1972
|
-
};
|
|
1973
1970
|
var extractNalUnitTypeForAvc = (byte) => {
|
|
1974
1971
|
return byte & 31;
|
|
1975
1972
|
};
|
|
@@ -2040,7 +2037,7 @@ var Mediabunny = (() => {
|
|
|
2040
2037
|
const spsUnits = [];
|
|
2041
2038
|
const ppsUnits = [];
|
|
2042
2039
|
const spsExtUnits = [];
|
|
2043
|
-
for (const loc of
|
|
2040
|
+
for (const loc of iterateNalUnitsInAnnexB(packetData)) {
|
|
2044
2041
|
const nalUnit = packetData.subarray(loc.offset, loc.offset + loc.length);
|
|
2045
2042
|
const type = extractNalUnitTypeForAvc(nalUnit[0]);
|
|
2046
2043
|
if (type === 7 /* SPS */) {
|
|
@@ -2412,9 +2409,6 @@ var Mediabunny = (() => {
|
|
|
2412
2409
|
return iterateNalUnitsInAnnexB(packetData);
|
|
2413
2410
|
}
|
|
2414
2411
|
};
|
|
2415
|
-
var iterateHevcNalUnitsAnnexB = function* (packetData) {
|
|
2416
|
-
yield* iterateNalUnitsInAnnexB(packetData);
|
|
2417
|
-
};
|
|
2418
2412
|
var extractNalUnitTypeForHevc = (byte) => {
|
|
2419
2413
|
return byte >> 1 & 63;
|
|
2420
2414
|
};
|
|
@@ -2548,7 +2542,7 @@ var Mediabunny = (() => {
|
|
|
2548
2542
|
const spsUnits = [];
|
|
2549
2543
|
const ppsUnits = [];
|
|
2550
2544
|
const seiUnits = [];
|
|
2551
|
-
for (const loc of
|
|
2545
|
+
for (const loc of iterateNalUnitsInAnnexB(packetData)) {
|
|
2552
2546
|
const nalUnit = packetData.subarray(loc.offset, loc.offset + loc.length);
|
|
2553
2547
|
const type = extractNalUnitTypeForHevc(nalUnit[0]);
|
|
2554
2548
|
if (type === 32 /* VPS_NUT */) {
|
|
@@ -15883,6 +15877,14 @@ var Mediabunny = (() => {
|
|
|
15883
15877
|
let hasProgramAssociationTable = false;
|
|
15884
15878
|
let hasProgramMap = false;
|
|
15885
15879
|
while (true) {
|
|
15880
|
+
const packetHeader = await this.readPacketHeader(currentPos);
|
|
15881
|
+
if (!packetHeader) {
|
|
15882
|
+
break;
|
|
15883
|
+
}
|
|
15884
|
+
if (packetHeader.payloadUnitStartIndicator === 0) {
|
|
15885
|
+
currentPos += this.packetStride;
|
|
15886
|
+
continue;
|
|
15887
|
+
}
|
|
15886
15888
|
const section = await this.readSection(
|
|
15887
15889
|
currentPos,
|
|
15888
15890
|
true,
|
|
@@ -15983,7 +15985,8 @@ var Mediabunny = (() => {
|
|
|
15983
15985
|
streamType,
|
|
15984
15986
|
initialized: false,
|
|
15985
15987
|
firstSection: null,
|
|
15986
|
-
info
|
|
15988
|
+
info,
|
|
15989
|
+
referencePesPackets: []
|
|
15987
15990
|
});
|
|
15988
15991
|
}
|
|
15989
15992
|
}
|
|
@@ -16082,8 +16085,13 @@ var Mediabunny = (() => {
|
|
|
16082
16085
|
if (isDone) {
|
|
16083
16086
|
break;
|
|
16084
16087
|
}
|
|
16085
|
-
|
|
16086
|
-
|
|
16088
|
+
currentPos += this.packetStride;
|
|
16089
|
+
}
|
|
16090
|
+
if (!hasProgramAssociationTable) {
|
|
16091
|
+
throw new Error("No Program Association Table found in the file.");
|
|
16092
|
+
}
|
|
16093
|
+
if (!hasProgramMap) {
|
|
16094
|
+
throw new Error("No Program Map Table found in the file.");
|
|
16087
16095
|
}
|
|
16088
16096
|
for (const stream of this.elementaryStreams) {
|
|
16089
16097
|
if (stream.info.type === "video") {
|
|
@@ -16327,12 +16335,6 @@ var Mediabunny = (() => {
|
|
|
16327
16335
|
var MpegTsTrackBacking = class _MpegTsTrackBacking {
|
|
16328
16336
|
constructor(elementaryStream) {
|
|
16329
16337
|
this.elementaryStream = elementaryStream;
|
|
16330
|
-
/**
|
|
16331
|
-
* Reference PES packets, spread throughout the file, to be used to speed up repeated random access. Sorted by both
|
|
16332
|
-
* byte offset and PTS.
|
|
16333
|
-
*/
|
|
16334
|
-
this.referencePesPackets = [];
|
|
16335
|
-
this.endReferencePesPacketAdded = false;
|
|
16336
16338
|
this.packetBuffers = /* @__PURE__ */ new WeakMap();
|
|
16337
16339
|
/** Used for recreating PacketBuffers if necessary. */
|
|
16338
16340
|
this.packetSectionStarts = /* @__PURE__ */ new WeakMap();
|
|
@@ -16397,40 +16399,12 @@ var Mediabunny = (() => {
|
|
|
16397
16399
|
suppliedPacket.data.byteLength
|
|
16398
16400
|
);
|
|
16399
16401
|
}
|
|
16400
|
-
maybeInsertReferencePacket(pesPacketHeader) {
|
|
16401
|
-
const index = binarySearchLessOrEqual(
|
|
16402
|
-
this.referencePesPackets,
|
|
16403
|
-
pesPacketHeader.sectionStartPos,
|
|
16404
|
-
(x) => x.sectionStartPos
|
|
16405
|
-
);
|
|
16406
|
-
if (index >= 0) {
|
|
16407
|
-
const entry = this.referencePesPackets[index];
|
|
16408
|
-
if (pesPacketHeader.pts <= entry.pts) {
|
|
16409
|
-
return false;
|
|
16410
|
-
}
|
|
16411
|
-
const minByteDistance = this.elementaryStream.demuxer.minReferencePointByteDistance;
|
|
16412
|
-
if (pesPacketHeader.sectionStartPos - entry.sectionStartPos < minByteDistance) {
|
|
16413
|
-
return false;
|
|
16414
|
-
}
|
|
16415
|
-
if (index < this.referencePesPackets.length - 1) {
|
|
16416
|
-
const nextEntry = this.referencePesPackets[index + 1];
|
|
16417
|
-
if (nextEntry.pts < pesPacketHeader.pts) {
|
|
16418
|
-
return false;
|
|
16419
|
-
}
|
|
16420
|
-
if (nextEntry.sectionStartPos - pesPacketHeader.sectionStartPos < minByteDistance) {
|
|
16421
|
-
return false;
|
|
16422
|
-
}
|
|
16423
|
-
}
|
|
16424
|
-
}
|
|
16425
|
-
this.referencePesPackets.splice(index + 1, 0, pesPacketHeader);
|
|
16426
|
-
return true;
|
|
16427
|
-
}
|
|
16428
16402
|
async getFirstPacket(options) {
|
|
16429
16403
|
const section = this.elementaryStream.firstSection;
|
|
16430
16404
|
assert(section);
|
|
16431
16405
|
const pesPacket = readPesPacket(section);
|
|
16432
16406
|
assert(pesPacket);
|
|
16433
|
-
const context = new PacketReadingContext(this, pesPacket
|
|
16407
|
+
const context = new PacketReadingContext(this.elementaryStream, pesPacket);
|
|
16434
16408
|
const buffer = new PacketBuffer(this, context);
|
|
16435
16409
|
const result = await buffer.readNext();
|
|
16436
16410
|
if (!result) {
|
|
@@ -16463,7 +16437,7 @@ var Mediabunny = (() => {
|
|
|
16463
16437
|
assert(section);
|
|
16464
16438
|
const pesPacket = readPesPacket(section);
|
|
16465
16439
|
assert(pesPacket);
|
|
16466
|
-
const context = new PacketReadingContext(this, pesPacket
|
|
16440
|
+
const context = new PacketReadingContext(this.elementaryStream, pesPacket);
|
|
16467
16441
|
buffer = new PacketBuffer(this, context);
|
|
16468
16442
|
const targetSequenceNumber = packet.sequenceNumber;
|
|
16469
16443
|
while (true) {
|
|
@@ -16534,8 +16508,9 @@ var Mediabunny = (() => {
|
|
|
16534
16508
|
return null;
|
|
16535
16509
|
}
|
|
16536
16510
|
let scanStartPos;
|
|
16537
|
-
const
|
|
16538
|
-
const
|
|
16511
|
+
const referencePesPackets = this.elementaryStream.referencePesPackets;
|
|
16512
|
+
const referencePointIndex = binarySearchLessOrEqual(referencePesPackets, searchPts, (x) => x.pts);
|
|
16513
|
+
const referencePoint = referencePointIndex !== -1 ? referencePesPackets[referencePointIndex] : null;
|
|
16539
16514
|
if (referencePoint && searchPts - referencePoint.pts < TIMESCALE / 2) {
|
|
16540
16515
|
scanStartPos = referencePoint.sectionStartPos;
|
|
16541
16516
|
} else {
|
|
@@ -16582,7 +16557,7 @@ var Mediabunny = (() => {
|
|
|
16582
16557
|
assert(section);
|
|
16583
16558
|
const pesPacket = readPesPacket(section);
|
|
16584
16559
|
assert(pesPacket);
|
|
16585
|
-
const context = new PacketReadingContext(this, pesPacket
|
|
16560
|
+
const context = new PacketReadingContext(this.elementaryStream, pesPacket);
|
|
16586
16561
|
const buffer = new PacketBuffer(this, context);
|
|
16587
16562
|
while (true) {
|
|
16588
16563
|
const topPts = last(buffer.presentationOrderPackets)?.pts ?? -Infinity;
|
|
@@ -16631,7 +16606,7 @@ var Mediabunny = (() => {
|
|
|
16631
16606
|
break outer;
|
|
16632
16607
|
}
|
|
16633
16608
|
currentPesHeader = nextPesHeader;
|
|
16634
|
-
this.
|
|
16609
|
+
maybeInsertReferencePacket(this.elementaryStream, nextPesHeader);
|
|
16635
16610
|
break;
|
|
16636
16611
|
}
|
|
16637
16612
|
}
|
|
@@ -16710,7 +16685,7 @@ var Mediabunny = (() => {
|
|
|
16710
16685
|
if (!pesHeader) {
|
|
16711
16686
|
throw new Error(MISSING_PES_PACKET_ERROR);
|
|
16712
16687
|
}
|
|
16713
|
-
this.
|
|
16688
|
+
maybeInsertReferencePacket(this.elementaryStream, pesHeader);
|
|
16714
16689
|
break;
|
|
16715
16690
|
}
|
|
16716
16691
|
}
|
|
@@ -16812,9 +16787,73 @@ var Mediabunny = (() => {
|
|
|
16812
16787
|
getReorderSize() {
|
|
16813
16788
|
return this.elementaryStream.info.reorderSize;
|
|
16814
16789
|
}
|
|
16815
|
-
|
|
16816
|
-
|
|
16817
|
-
|
|
16790
|
+
};
|
|
16791
|
+
var MpegTsAudioTrackBacking = class extends MpegTsTrackBacking {
|
|
16792
|
+
constructor(elementaryStream) {
|
|
16793
|
+
super(elementaryStream);
|
|
16794
|
+
this.elementaryStream = elementaryStream;
|
|
16795
|
+
}
|
|
16796
|
+
getCodec() {
|
|
16797
|
+
return this.elementaryStream.info.codec;
|
|
16798
|
+
}
|
|
16799
|
+
getNumberOfChannels() {
|
|
16800
|
+
return this.elementaryStream.info.numberOfChannels;
|
|
16801
|
+
}
|
|
16802
|
+
getSampleRate() {
|
|
16803
|
+
return this.elementaryStream.info.sampleRate;
|
|
16804
|
+
}
|
|
16805
|
+
async getDecoderConfig() {
|
|
16806
|
+
return {
|
|
16807
|
+
codec: extractAudioCodecString({
|
|
16808
|
+
codec: this.elementaryStream.info.codec,
|
|
16809
|
+
codecDescription: null,
|
|
16810
|
+
aacCodecInfo: this.elementaryStream.info.aacCodecInfo
|
|
16811
|
+
}),
|
|
16812
|
+
numberOfChannels: this.elementaryStream.info.numberOfChannels,
|
|
16813
|
+
sampleRate: this.elementaryStream.info.sampleRate
|
|
16814
|
+
};
|
|
16815
|
+
}
|
|
16816
|
+
allPacketsAreKeyPackets() {
|
|
16817
|
+
return true;
|
|
16818
|
+
}
|
|
16819
|
+
getReorderSize() {
|
|
16820
|
+
return 1;
|
|
16821
|
+
}
|
|
16822
|
+
};
|
|
16823
|
+
var maybeInsertReferencePacket = (elementaryStream, pesPacketHeader) => {
|
|
16824
|
+
const referencePesPackets = elementaryStream.referencePesPackets;
|
|
16825
|
+
const index = binarySearchLessOrEqual(
|
|
16826
|
+
referencePesPackets,
|
|
16827
|
+
pesPacketHeader.sectionStartPos,
|
|
16828
|
+
(x) => x.sectionStartPos
|
|
16829
|
+
);
|
|
16830
|
+
if (index >= 0) {
|
|
16831
|
+
const entry = referencePesPackets[index];
|
|
16832
|
+
if (pesPacketHeader.pts <= entry.pts) {
|
|
16833
|
+
return false;
|
|
16834
|
+
}
|
|
16835
|
+
const minByteDistance = elementaryStream.demuxer.minReferencePointByteDistance;
|
|
16836
|
+
if (pesPacketHeader.sectionStartPos - entry.sectionStartPos < minByteDistance) {
|
|
16837
|
+
return false;
|
|
16838
|
+
}
|
|
16839
|
+
if (index < referencePesPackets.length - 1) {
|
|
16840
|
+
const nextEntry = referencePesPackets[index + 1];
|
|
16841
|
+
if (nextEntry.pts < pesPacketHeader.pts) {
|
|
16842
|
+
return false;
|
|
16843
|
+
}
|
|
16844
|
+
if (nextEntry.sectionStartPos - pesPacketHeader.sectionStartPos < minByteDistance) {
|
|
16845
|
+
return false;
|
|
16846
|
+
}
|
|
16847
|
+
}
|
|
16848
|
+
}
|
|
16849
|
+
referencePesPackets.splice(index + 1, 0, pesPacketHeader);
|
|
16850
|
+
return true;
|
|
16851
|
+
};
|
|
16852
|
+
var markNextPacket = async (context) => {
|
|
16853
|
+
assert(!context.suppliedPacket);
|
|
16854
|
+
const elementaryStream = context.elementaryStream;
|
|
16855
|
+
if (elementaryStream.info.type === "video") {
|
|
16856
|
+
const codec = elementaryStream.info.codec;
|
|
16818
16857
|
const CHUNK_SIZE = 1024;
|
|
16819
16858
|
if (codec !== "avc" && codec !== "hevc") {
|
|
16820
16859
|
throw new Error("Unhandled.");
|
|
@@ -16883,42 +16922,8 @@ var Mediabunny = (() => {
|
|
|
16883
16922
|
context.seekTo(packetStartPos);
|
|
16884
16923
|
return context.supplyPacket(packetLength, 0);
|
|
16885
16924
|
}
|
|
16886
|
-
}
|
|
16887
|
-
|
|
16888
|
-
var MpegTsAudioTrackBacking = class extends MpegTsTrackBacking {
|
|
16889
|
-
constructor(elementaryStream) {
|
|
16890
|
-
super(elementaryStream);
|
|
16891
|
-
this.elementaryStream = elementaryStream;
|
|
16892
|
-
}
|
|
16893
|
-
getCodec() {
|
|
16894
|
-
return this.elementaryStream.info.codec;
|
|
16895
|
-
}
|
|
16896
|
-
getNumberOfChannels() {
|
|
16897
|
-
return this.elementaryStream.info.numberOfChannels;
|
|
16898
|
-
}
|
|
16899
|
-
getSampleRate() {
|
|
16900
|
-
return this.elementaryStream.info.sampleRate;
|
|
16901
|
-
}
|
|
16902
|
-
async getDecoderConfig() {
|
|
16903
|
-
return {
|
|
16904
|
-
codec: extractAudioCodecString({
|
|
16905
|
-
codec: this.elementaryStream.info.codec,
|
|
16906
|
-
codecDescription: null,
|
|
16907
|
-
aacCodecInfo: this.elementaryStream.info.aacCodecInfo
|
|
16908
|
-
}),
|
|
16909
|
-
numberOfChannels: this.elementaryStream.info.numberOfChannels,
|
|
16910
|
-
sampleRate: this.elementaryStream.info.sampleRate
|
|
16911
|
-
};
|
|
16912
|
-
}
|
|
16913
|
-
allPacketsAreKeyPackets() {
|
|
16914
|
-
return true;
|
|
16915
|
-
}
|
|
16916
|
-
getReorderSize() {
|
|
16917
|
-
return 1;
|
|
16918
|
-
}
|
|
16919
|
-
async markNextPacket(context) {
|
|
16920
|
-
assert(!context.suppliedPacket);
|
|
16921
|
-
const codec = this.elementaryStream.info.codec;
|
|
16925
|
+
} else {
|
|
16926
|
+
const codec = elementaryStream.info.codec;
|
|
16922
16927
|
const CHUNK_SIZE = 128;
|
|
16923
16928
|
while (true) {
|
|
16924
16929
|
let remaining = context.ensureBuffered(CHUNK_SIZE);
|
|
@@ -16945,7 +16950,7 @@ var Mediabunny = (() => {
|
|
|
16945
16950
|
if (remaining3 instanceof Promise) remaining3 = await remaining3;
|
|
16946
16951
|
return context.supplyPacket(
|
|
16947
16952
|
remaining3,
|
|
16948
|
-
Math.round(SAMPLES_PER_AAC_FRAME * TIMESCALE /
|
|
16953
|
+
Math.round(SAMPLES_PER_AAC_FRAME * TIMESCALE / elementaryStream.info.sampleRate)
|
|
16949
16954
|
);
|
|
16950
16955
|
} else {
|
|
16951
16956
|
context.seekTo(possibleHeaderStartPos + 1);
|
|
@@ -16968,7 +16973,7 @@ var Mediabunny = (() => {
|
|
|
16968
16973
|
context.seekTo(possibleHeaderStartPos);
|
|
16969
16974
|
let remaining3 = context.ensureBuffered(result.header.totalSize);
|
|
16970
16975
|
if (remaining3 instanceof Promise) remaining3 = await remaining3;
|
|
16971
|
-
const duration = result.header.audioSamplesInFrame * TIMESCALE /
|
|
16976
|
+
const duration = result.header.audioSamplesInFrame * TIMESCALE / elementaryStream.info.sampleRate;
|
|
16972
16977
|
return context.supplyPacket(remaining3, Math.round(duration));
|
|
16973
16978
|
} else {
|
|
16974
16979
|
context.seekTo(possibleHeaderStartPos + 1);
|
|
@@ -16984,7 +16989,7 @@ var Mediabunny = (() => {
|
|
|
16984
16989
|
}
|
|
16985
16990
|
};
|
|
16986
16991
|
var PacketReadingContext = class _PacketReadingContext {
|
|
16987
|
-
constructor(
|
|
16992
|
+
constructor(elementaryStream, startingPesPacket) {
|
|
16988
16993
|
this.currentPos = 0;
|
|
16989
16994
|
// Relative to the data in startingPesPacket
|
|
16990
16995
|
this.pesPackets = [];
|
|
@@ -16993,14 +16998,13 @@ var Mediabunny = (() => {
|
|
|
16993
16998
|
this.endPos = 0;
|
|
16994
16999
|
this.nextPts = 0;
|
|
16995
17000
|
this.suppliedPacket = null;
|
|
16996
|
-
this.
|
|
16997
|
-
this.pid =
|
|
16998
|
-
this.demuxer =
|
|
17001
|
+
this.elementaryStream = elementaryStream;
|
|
17002
|
+
this.pid = elementaryStream.pid;
|
|
17003
|
+
this.demuxer = elementaryStream.demuxer;
|
|
16999
17004
|
this.startingPesPacket = startingPesPacket;
|
|
17000
|
-
this.uncapped = uncapped;
|
|
17001
17005
|
}
|
|
17002
17006
|
clone() {
|
|
17003
|
-
const clone = new _PacketReadingContext(this.
|
|
17007
|
+
const clone = new _PacketReadingContext(this.elementaryStream, this.startingPesPacket);
|
|
17004
17008
|
clone.currentPos = this.currentPos;
|
|
17005
17009
|
clone.pesPackets = [...this.pesPackets];
|
|
17006
17010
|
clone.currentPesPacketIndex = this.currentPesPacketIndex;
|
|
@@ -17128,19 +17132,15 @@ var Mediabunny = (() => {
|
|
|
17128
17132
|
/** Supplies the context with a new encoded packet, beginning at the current position. */
|
|
17129
17133
|
supplyPacket(packetLength, intrinsicDuration) {
|
|
17130
17134
|
const currentPesPacket = this.getCurrentPesPacket();
|
|
17131
|
-
|
|
17132
|
-
this.suppliedPacket = null;
|
|
17133
|
-
return;
|
|
17134
|
-
}
|
|
17135
|
-
this.backing.maybeInsertReferencePacket(currentPesPacket);
|
|
17135
|
+
maybeInsertReferencePacket(this.elementaryStream, currentPesPacket);
|
|
17136
17136
|
const pts = this.nextPts;
|
|
17137
17137
|
this.nextPts += intrinsicDuration;
|
|
17138
17138
|
const sectionStartPos = currentPesPacket.sectionStartPos;
|
|
17139
17139
|
const sequenceNumber = sectionStartPos + (this.currentPos - this.currentPesPacketPos);
|
|
17140
17140
|
const data = this.readBytes(packetLength);
|
|
17141
17141
|
let randomAccessIndicator = currentPesPacket.randomAccessIndicator;
|
|
17142
|
-
assert(this.
|
|
17143
|
-
if (currentPesPacket.sectionStartPos === this.
|
|
17142
|
+
assert(this.elementaryStream.firstSection);
|
|
17143
|
+
if (currentPesPacket.sectionStartPos === this.elementaryStream.firstSection.startPos) {
|
|
17144
17144
|
randomAccessIndicator = 1;
|
|
17145
17145
|
}
|
|
17146
17146
|
this.suppliedPacket = {
|
|
@@ -17203,7 +17203,7 @@ var Mediabunny = (() => {
|
|
|
17203
17203
|
if (this.context.suppliedPacket) {
|
|
17204
17204
|
suppliedPacket = this.context.suppliedPacket;
|
|
17205
17205
|
} else {
|
|
17206
|
-
await
|
|
17206
|
+
await markNextPacket(this.context);
|
|
17207
17207
|
suppliedPacket = this.context.suppliedPacket;
|
|
17208
17208
|
}
|
|
17209
17209
|
this.context.suppliedPacket = null;
|