node-av 1.0.3 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -41
- package/dist/api/bitstream-filter.d.ts +180 -123
- package/dist/api/bitstream-filter.js +182 -126
- package/dist/api/bitstream-filter.js.map +1 -1
- package/dist/api/decoder.d.ts +286 -130
- package/dist/api/decoder.js +321 -159
- package/dist/api/decoder.js.map +1 -1
- package/dist/api/encoder.d.ts +254 -158
- package/dist/api/encoder.js +326 -298
- package/dist/api/encoder.js.map +1 -1
- package/dist/api/filter-presets.d.ts +912 -0
- package/dist/api/filter-presets.js +1407 -0
- package/dist/api/filter-presets.js.map +1 -0
- package/dist/api/filter.d.ts +280 -284
- package/dist/api/filter.js +435 -509
- package/dist/api/filter.js.map +1 -1
- package/dist/api/hardware.d.ts +226 -159
- package/dist/api/hardware.js +405 -287
- package/dist/api/hardware.js.map +1 -1
- package/dist/api/index.d.ts +3 -2
- package/dist/api/index.js +1 -0
- package/dist/api/index.js.map +1 -1
- package/dist/api/io-stream.d.ts +65 -61
- package/dist/api/io-stream.js +45 -47
- package/dist/api/io-stream.js.map +1 -1
- package/dist/api/media-input.d.ts +244 -141
- package/dist/api/media-input.js +207 -104
- package/dist/api/media-input.js.map +1 -1
- package/dist/api/media-output.d.ts +206 -128
- package/dist/api/media-output.js +212 -129
- package/dist/api/media-output.js.map +1 -1
- package/dist/api/pipeline.d.ts +168 -38
- package/dist/api/pipeline.js +238 -14
- package/dist/api/pipeline.js.map +1 -1
- package/dist/api/types.d.ts +22 -182
- package/dist/api/utilities/audio-sample.d.ts +1 -1
- package/dist/api/utilities/image.d.ts +1 -1
- package/dist/api/utilities/media-type.d.ts +1 -1
- package/dist/api/utilities/pixel-format.d.ts +1 -1
- package/dist/api/utilities/sample-format.d.ts +1 -1
- package/dist/api/utilities/timestamp.d.ts +1 -1
- package/dist/api/utils.d.ts +1 -2
- package/dist/api/utils.js +9 -0
- package/dist/api/utils.js.map +1 -1
- package/dist/{lib → constants}/channel-layouts.d.ts +1 -1
- package/dist/constants/channel-layouts.js.map +1 -0
- package/dist/{lib → constants}/constants.d.ts +19 -4
- package/dist/{lib → constants}/constants.js +15 -1
- package/dist/constants/constants.js.map +1 -0
- package/dist/constants/decoders.d.ts +609 -0
- package/dist/constants/decoders.js +617 -0
- package/dist/constants/decoders.js.map +1 -0
- package/dist/constants/encoders.d.ts +285 -0
- package/dist/constants/encoders.js +298 -0
- package/dist/constants/encoders.js.map +1 -0
- package/dist/constants/index.d.ts +4 -0
- package/dist/constants/index.js +5 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/audio-fifo.d.ts +128 -171
- package/dist/lib/audio-fifo.js +130 -173
- package/dist/lib/audio-fifo.js.map +1 -1
- package/dist/lib/binding.d.ts +7 -5
- package/dist/lib/binding.js +5 -0
- package/dist/lib/binding.js.map +1 -1
- package/dist/lib/bitstream-filter-context.d.ts +139 -184
- package/dist/lib/bitstream-filter-context.js +139 -188
- package/dist/lib/bitstream-filter-context.js.map +1 -1
- package/dist/lib/bitstream-filter.d.ts +69 -55
- package/dist/lib/bitstream-filter.js +68 -54
- package/dist/lib/bitstream-filter.js.map +1 -1
- package/dist/lib/codec-context.d.ts +317 -381
- package/dist/lib/codec-context.js +316 -381
- package/dist/lib/codec-context.js.map +1 -1
- package/dist/lib/codec-parameters.d.ts +161 -171
- package/dist/lib/codec-parameters.js +162 -172
- package/dist/lib/codec-parameters.js.map +1 -1
- package/dist/lib/codec-parser.d.ts +92 -105
- package/dist/lib/codec-parser.js +92 -103
- package/dist/lib/codec-parser.js.map +1 -1
- package/dist/lib/codec.d.ts +328 -217
- package/dist/lib/codec.js +392 -218
- package/dist/lib/codec.js.map +1 -1
- package/dist/lib/dictionary.d.ts +150 -204
- package/dist/lib/dictionary.js +159 -213
- package/dist/lib/dictionary.js.map +1 -1
- package/dist/lib/error.d.ts +97 -131
- package/dist/lib/error.js +98 -128
- package/dist/lib/error.js.map +1 -1
- package/dist/lib/filter-context.d.ts +317 -194
- package/dist/lib/filter-context.js +335 -200
- package/dist/lib/filter-context.js.map +1 -1
- package/dist/lib/filter-graph.d.ts +252 -293
- package/dist/lib/filter-graph.js +253 -294
- package/dist/lib/filter-graph.js.map +1 -1
- package/dist/lib/filter-inout.d.ts +87 -95
- package/dist/lib/filter-inout.js +87 -95
- package/dist/lib/filter-inout.js.map +1 -1
- package/dist/lib/filter.d.ts +93 -111
- package/dist/lib/filter.js +94 -112
- package/dist/lib/filter.js.map +1 -1
- package/dist/lib/format-context.d.ts +321 -429
- package/dist/lib/format-context.js +314 -386
- package/dist/lib/format-context.js.map +1 -1
- package/dist/lib/frame.d.ts +263 -406
- package/dist/lib/frame.js +263 -408
- package/dist/lib/frame.js.map +1 -1
- package/dist/lib/hardware-device-context.d.ts +150 -204
- package/dist/lib/hardware-device-context.js +149 -203
- package/dist/lib/hardware-device-context.js.map +1 -1
- package/dist/lib/hardware-frames-context.d.ts +171 -181
- package/dist/lib/hardware-frames-context.js +171 -181
- package/dist/lib/hardware-frames-context.js.map +1 -1
- package/dist/lib/index.d.ts +2 -3
- package/dist/lib/index.js +2 -5
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/input-format.d.ts +90 -118
- package/dist/lib/input-format.js +89 -117
- package/dist/lib/input-format.js.map +1 -1
- package/dist/lib/io-context.d.ts +210 -242
- package/dist/lib/io-context.js +221 -253
- package/dist/lib/io-context.js.map +1 -1
- package/dist/lib/log.d.ts +86 -120
- package/dist/lib/log.js +85 -122
- package/dist/lib/log.js.map +1 -1
- package/dist/lib/native-types.d.ts +127 -112
- package/dist/lib/native-types.js +9 -0
- package/dist/lib/native-types.js.map +1 -1
- package/dist/lib/option.d.ts +285 -242
- package/dist/lib/option.js +310 -250
- package/dist/lib/option.js.map +1 -1
- package/dist/lib/output-format.d.ts +78 -102
- package/dist/lib/output-format.js +77 -101
- package/dist/lib/output-format.js.map +1 -1
- package/dist/lib/packet.d.ts +173 -241
- package/dist/lib/packet.js +172 -241
- package/dist/lib/packet.js.map +1 -1
- package/dist/lib/rational.d.ts +0 -2
- package/dist/lib/rational.js +0 -2
- package/dist/lib/rational.js.map +1 -1
- package/dist/lib/software-resample-context.d.ts +242 -326
- package/dist/lib/software-resample-context.js +242 -326
- package/dist/lib/software-resample-context.js.map +1 -1
- package/dist/lib/software-scale-context.d.ts +130 -174
- package/dist/lib/software-scale-context.js +132 -176
- package/dist/lib/software-scale-context.js.map +1 -1
- package/dist/lib/stream.d.ts +88 -198
- package/dist/lib/stream.js +87 -197
- package/dist/lib/stream.js.map +1 -1
- package/dist/lib/types.d.ts +1 -1
- package/dist/lib/utilities.d.ts +372 -181
- package/dist/lib/utilities.js +373 -182
- package/dist/lib/utilities.js.map +1 -1
- package/install/check.js +0 -1
- package/package.json +32 -24
- package/release_notes.md +43 -13
- package/CHANGELOG.md +0 -8
- package/dist/lib/channel-layouts.js.map +0 -1
- package/dist/lib/constants.js.map +0 -1
- /package/dist/{lib → constants}/channel-layouts.js +0 -0
|
@@ -1,57 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* Simplifies FFmpeg's bitstream filter API with automatic initialization,
|
|
5
|
-
* parameter configuration, and packet processing.
|
|
6
|
-
*
|
|
7
|
-
* Handles filter context lifecycle, packet buffering, and flushing.
|
|
8
|
-
* Useful for format conversion, metadata extraction, and stream modifications.
|
|
9
|
-
*
|
|
10
|
-
* @module api/bitstream-filter
|
|
11
|
-
*/
|
|
12
|
-
import { AVERROR_EAGAIN, AVERROR_EOF, BitStreamFilter, BitStreamFilterContext, FFmpegError, Packet } from '../lib/index.js';
|
|
1
|
+
import { AVERROR_EOF } from '../constants/constants.js';
|
|
2
|
+
import { AVERROR_EAGAIN, BitStreamFilter, BitStreamFilterContext, FFmpegError, Packet } from '../lib/index.js';
|
|
13
3
|
/**
|
|
14
4
|
* High-level bitstream filter for packet processing.
|
|
15
5
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* Supports packet-by-packet and stream processing modes.
|
|
6
|
+
* Provides simplified interface for applying bitstream filters to packets.
|
|
7
|
+
* Handles filter initialization, packet processing, and memory management.
|
|
8
|
+
* Supports filters like h264_mp4toannexb, hevc_mp4toannexb, aac_adtstoasc.
|
|
9
|
+
* Essential for format conversion and stream compatibility in transcoding pipelines.
|
|
21
10
|
*
|
|
22
11
|
* @example
|
|
23
12
|
* ```typescript
|
|
24
|
-
*
|
|
25
|
-
* const media = await MediaInput.open('video.mp4');
|
|
26
|
-
* const stream = media.video();
|
|
27
|
-
* const bsf = await BitStreamFilterAPI.create('h264_mp4toannexb', stream);
|
|
13
|
+
* import { BitStreamFilterAPI } from 'node-av/api';
|
|
28
14
|
*
|
|
29
|
-
* //
|
|
30
|
-
*
|
|
31
|
-
* if (packet.streamIndex === stream.index) {
|
|
32
|
-
* const filtered = await bsf.process(packet);
|
|
33
|
-
* for (const outPacket of filtered) {
|
|
34
|
-
* // Write to output or process further
|
|
35
|
-
* await output.writePacket(outPacket);
|
|
36
|
-
* }
|
|
37
|
-
* }
|
|
38
|
-
* }
|
|
15
|
+
* // Create H.264 Annex B converter
|
|
16
|
+
* const filter = BitStreamFilterAPI.create('h264_mp4toannexb', stream);
|
|
39
17
|
*
|
|
40
|
-
* //
|
|
41
|
-
* const
|
|
42
|
-
*
|
|
18
|
+
* // Process packet
|
|
19
|
+
* const outputPackets = await filter.process(inputPacket);
|
|
20
|
+
* for (const packet of outputPackets) {
|
|
21
|
+
* await output.writePacket(packet);
|
|
22
|
+
* packet.free();
|
|
23
|
+
* }
|
|
43
24
|
* ```
|
|
44
25
|
*
|
|
45
26
|
* @example
|
|
46
27
|
* ```typescript
|
|
47
28
|
* // Process packet stream
|
|
48
|
-
* const
|
|
29
|
+
* const filter = BitStreamFilterAPI.create('hevc_mp4toannexb', videoStream);
|
|
49
30
|
*
|
|
50
|
-
* for await (const
|
|
51
|
-
*
|
|
52
|
-
*
|
|
31
|
+
* for await (const packet of filter.packets(input.packets())) {
|
|
32
|
+
* await output.writePacket(packet);
|
|
33
|
+
* packet.free();
|
|
53
34
|
* }
|
|
54
35
|
* ```
|
|
36
|
+
*
|
|
37
|
+
* @see {@link BitStreamFilter} For available filters
|
|
38
|
+
* @see {@link BitStreamFilterContext} For low-level API
|
|
39
|
+
* @see {@link MediaOutput} For writing filtered packets
|
|
55
40
|
*/
|
|
56
41
|
export class BitStreamFilterAPI {
|
|
57
42
|
ctx;
|
|
@@ -59,11 +44,10 @@ export class BitStreamFilterAPI {
|
|
|
59
44
|
stream;
|
|
60
45
|
isDisposed = false;
|
|
61
46
|
/**
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
* @param
|
|
65
|
-
* @
|
|
66
|
-
* @param stream - The stream this filter is for
|
|
47
|
+
* @param filter - Bitstream filter instance
|
|
48
|
+
* @param ctx - Filter context
|
|
49
|
+
* @param stream - Associated stream
|
|
50
|
+
* @internal
|
|
67
51
|
*/
|
|
68
52
|
constructor(filter, ctx, stream) {
|
|
69
53
|
this.filter = filter;
|
|
@@ -71,26 +55,41 @@ export class BitStreamFilterAPI {
|
|
|
71
55
|
this.stream = stream;
|
|
72
56
|
}
|
|
73
57
|
/**
|
|
74
|
-
* Create a bitstream filter for a
|
|
58
|
+
* Create a bitstream filter for a stream.
|
|
59
|
+
*
|
|
60
|
+
* Initializes filter with stream codec parameters.
|
|
61
|
+
* Configures time base and prepares for packet processing.
|
|
75
62
|
*
|
|
76
|
-
*
|
|
77
|
-
* and initialization.
|
|
63
|
+
* Direct mapping to av_bsf_get_by_name() and av_bsf_alloc().
|
|
78
64
|
*
|
|
79
|
-
* @param filterName - Name of the bitstream filter
|
|
80
|
-
* @param stream - Stream to filter
|
|
65
|
+
* @param filterName - Name of the bitstream filter
|
|
66
|
+
* @param stream - Stream to apply filter to
|
|
67
|
+
* @returns Configured bitstream filter
|
|
81
68
|
*
|
|
82
|
-
* @
|
|
69
|
+
* @throws {Error} If filter not found or initialization fails
|
|
70
|
+
* @throws {FFmpegError} If allocation or initialization fails
|
|
83
71
|
*
|
|
84
|
-
* @
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* // H.264 MP4 to Annex B conversion
|
|
75
|
+
* const filter = BitStreamFilterAPI.create('h264_mp4toannexb', videoStream);
|
|
76
|
+
* ```
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```typescript
|
|
80
|
+
* // AAC ADTS to ASC conversion
|
|
81
|
+
* const filter = BitStreamFilterAPI.create('aac_adtstoasc', audioStream);
|
|
82
|
+
* ```
|
|
85
83
|
*
|
|
86
84
|
* @example
|
|
87
85
|
* ```typescript
|
|
88
|
-
*
|
|
89
|
-
* const
|
|
90
|
-
* const bsf = await BitStreamFilterAPI.create('h264_mp4toannexb', stream);
|
|
86
|
+
* // Remove metadata
|
|
87
|
+
* const filter = BitStreamFilterAPI.create('filter_units', stream);
|
|
91
88
|
* ```
|
|
89
|
+
*
|
|
90
|
+
* @see {@link BitStreamFilter.getByName} For filter discovery
|
|
92
91
|
*/
|
|
93
|
-
static
|
|
92
|
+
static create(filterName, stream) {
|
|
94
93
|
if (!stream) {
|
|
95
94
|
throw new Error('Stream is required');
|
|
96
95
|
}
|
|
@@ -123,28 +122,27 @@ export class BitStreamFilterAPI {
|
|
|
123
122
|
}
|
|
124
123
|
}
|
|
125
124
|
/**
|
|
126
|
-
* Get
|
|
125
|
+
* Get filter name.
|
|
127
126
|
*
|
|
128
|
-
* @
|
|
127
|
+
* @example
|
|
128
|
+
* ```typescript
|
|
129
|
+
* console.log(`Using filter: ${filter.name}`);
|
|
130
|
+
* ```
|
|
129
131
|
*/
|
|
130
132
|
get name() {
|
|
131
133
|
return this.filter.name ?? 'unknown';
|
|
132
134
|
}
|
|
133
|
-
/**
|
|
134
|
-
* Get the associated stream.
|
|
135
|
-
*
|
|
136
|
-
* @returns The stream this filter was created for
|
|
137
|
-
*/
|
|
138
|
-
get streamInfo() {
|
|
139
|
-
return this.stream;
|
|
140
|
-
}
|
|
141
135
|
/**
|
|
142
136
|
* Get output codec parameters.
|
|
143
137
|
*
|
|
144
|
-
*
|
|
145
|
-
*
|
|
138
|
+
* Parameters after filter processing.
|
|
139
|
+
* May differ from input parameters.
|
|
146
140
|
*
|
|
147
|
-
* @
|
|
141
|
+
* @example
|
|
142
|
+
* ```typescript
|
|
143
|
+
* const outputParams = filter.outputCodecParameters;
|
|
144
|
+
* console.log(`Output codec: ${outputParams?.codecId}`);
|
|
145
|
+
* ```
|
|
148
146
|
*/
|
|
149
147
|
get outputCodecParameters() {
|
|
150
148
|
return this.ctx.outputCodecParameters;
|
|
@@ -152,33 +150,49 @@ export class BitStreamFilterAPI {
|
|
|
152
150
|
/**
|
|
153
151
|
* Get output time base.
|
|
154
152
|
*
|
|
155
|
-
*
|
|
153
|
+
* Time base after filter processing.
|
|
156
154
|
*
|
|
157
|
-
* @
|
|
155
|
+
* @example
|
|
156
|
+
* ```typescript
|
|
157
|
+
* const tb = filter.outputTimeBase;
|
|
158
|
+
* console.log(`Output timebase: ${tb?.num}/${tb?.den}`);
|
|
159
|
+
* ```
|
|
158
160
|
*/
|
|
159
161
|
get outputTimeBase() {
|
|
160
162
|
return this.ctx.outputTimeBase;
|
|
161
163
|
}
|
|
162
164
|
/**
|
|
163
|
-
* Process a
|
|
165
|
+
* Process a packet through the filter.
|
|
164
166
|
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
+
* Applies bitstream filter to packet.
|
|
168
|
+
* May produce zero, one, or multiple output packets.
|
|
169
|
+
* Pass null to signal end-of-stream.
|
|
167
170
|
*
|
|
168
|
-
*
|
|
171
|
+
* Direct mapping to av_bsf_send_packet() and av_bsf_receive_packet().
|
|
169
172
|
*
|
|
170
|
-
* @
|
|
173
|
+
* @param packet - Packet to filter or null for EOF
|
|
174
|
+
* @returns Array of filtered packets
|
|
175
|
+
*
|
|
176
|
+
* @throws {Error} If filter is disposed
|
|
177
|
+
* @throws {FFmpegError} If filtering fails
|
|
171
178
|
*
|
|
172
179
|
* @example
|
|
173
180
|
* ```typescript
|
|
174
|
-
* const
|
|
175
|
-
* const
|
|
176
|
-
*
|
|
177
|
-
*
|
|
178
|
-
* console.log(`Filtered packet: size=${packet.size}`);
|
|
179
|
-
* await output.writePacket(packet);
|
|
181
|
+
* const outputPackets = await filter.process(inputPacket);
|
|
182
|
+
* for (const packet of outputPackets) {
|
|
183
|
+
* console.log(`Filtered packet: pts=${packet.pts}`);
|
|
184
|
+
* packet.free();
|
|
180
185
|
* }
|
|
181
186
|
* ```
|
|
187
|
+
*
|
|
188
|
+
* @example
|
|
189
|
+
* ```typescript
|
|
190
|
+
* // Flush filter
|
|
191
|
+
* const remaining = await filter.process(null);
|
|
192
|
+
* ```
|
|
193
|
+
*
|
|
194
|
+
* @see {@link flush} For explicit flushing
|
|
195
|
+
* @see {@link packets} For stream processing
|
|
182
196
|
*/
|
|
183
197
|
async process(packet) {
|
|
184
198
|
if (this.isDisposed) {
|
|
@@ -208,32 +222,40 @@ export class BitStreamFilterAPI {
|
|
|
208
222
|
return outputPackets;
|
|
209
223
|
}
|
|
210
224
|
/**
|
|
211
|
-
* Process
|
|
212
|
-
*
|
|
213
|
-
* Async generator that processes packets lazily and yields filtered results.
|
|
214
|
-
* Automatically handles EOF and cleanup.
|
|
225
|
+
* Process packet stream through filter.
|
|
215
226
|
*
|
|
216
|
-
*
|
|
227
|
+
* High-level async generator for filtering packet streams.
|
|
228
|
+
* Automatically handles flushing at end of stream.
|
|
229
|
+
* Yields filtered packets ready for output.
|
|
217
230
|
*
|
|
231
|
+
* @param packets - Async iterable of packets
|
|
218
232
|
* @yields Filtered packets
|
|
233
|
+
* @throws {Error} If filter is disposed
|
|
234
|
+
* @throws {FFmpegError} If filtering fails
|
|
219
235
|
*
|
|
220
236
|
* @example
|
|
221
237
|
* ```typescript
|
|
222
|
-
*
|
|
223
|
-
*
|
|
224
|
-
*
|
|
225
|
-
*
|
|
226
|
-
* for await (const packet of media.packets()) {
|
|
227
|
-
* if (packet.streamIndex === stream.index) {
|
|
228
|
-
* yield packet;
|
|
229
|
-
* }
|
|
230
|
-
* }
|
|
238
|
+
* // Filter entire stream
|
|
239
|
+
* for await (const packet of filter.packets(input.packets())) {
|
|
240
|
+
* await output.writePacket(packet);
|
|
241
|
+
* packet.free();
|
|
231
242
|
* }
|
|
243
|
+
* ```
|
|
232
244
|
*
|
|
233
|
-
*
|
|
234
|
-
*
|
|
245
|
+
* @example
|
|
246
|
+
* ```typescript
|
|
247
|
+
* // Chain with decoder
|
|
248
|
+
* const decoder = await Decoder.create(stream);
|
|
249
|
+
* const filter = BitStreamFilterAPI.create('h264_mp4toannexb', stream);
|
|
250
|
+
*
|
|
251
|
+
* for await (const frame of decoder.frames(filter.packets(input.packets()))) {
|
|
252
|
+
* // Process frames
|
|
253
|
+
* frame.free();
|
|
235
254
|
* }
|
|
236
255
|
* ```
|
|
256
|
+
*
|
|
257
|
+
* @see {@link process} For single packet filtering
|
|
258
|
+
* @see {@link flush} For end-of-stream handling
|
|
237
259
|
*/
|
|
238
260
|
async *packets(packets) {
|
|
239
261
|
if (this.isDisposed) {
|
|
@@ -260,21 +282,28 @@ export class BitStreamFilterAPI {
|
|
|
260
282
|
}
|
|
261
283
|
}
|
|
262
284
|
/**
|
|
263
|
-
* Flush
|
|
285
|
+
* Flush filter and get remaining packets.
|
|
286
|
+
*
|
|
287
|
+
* Signals end-of-stream and retrieves buffered packets.
|
|
288
|
+
* Also resets internal filter state.
|
|
264
289
|
*
|
|
265
|
-
*
|
|
266
|
-
* Should be called when all input packets have been processed.
|
|
290
|
+
* Direct mapping to av_bsf_flush().
|
|
267
291
|
*
|
|
268
|
-
* @returns Array of remaining packets
|
|
292
|
+
* @returns Array of remaining packets
|
|
293
|
+
*
|
|
294
|
+
* @throws {Error} If filter is disposed
|
|
269
295
|
*
|
|
270
296
|
* @example
|
|
271
297
|
* ```typescript
|
|
272
|
-
*
|
|
273
|
-
* const remaining = await bsf.flush();
|
|
298
|
+
* const remaining = await filter.flush();
|
|
274
299
|
* for (const packet of remaining) {
|
|
275
300
|
* await output.writePacket(packet);
|
|
301
|
+
* packet.free();
|
|
276
302
|
* }
|
|
277
303
|
* ```
|
|
304
|
+
*
|
|
305
|
+
* @see {@link flushPackets} For async iteration
|
|
306
|
+
* @see {@link reset} For state reset only
|
|
278
307
|
*/
|
|
279
308
|
async flush() {
|
|
280
309
|
if (this.isDisposed) {
|
|
@@ -287,21 +316,23 @@ export class BitStreamFilterAPI {
|
|
|
287
316
|
return filtered;
|
|
288
317
|
}
|
|
289
318
|
/**
|
|
290
|
-
* Flush
|
|
319
|
+
* Flush filter as async generator.
|
|
291
320
|
*
|
|
292
|
-
*
|
|
293
|
-
*
|
|
321
|
+
* Convenient async iteration over remaining packets.
|
|
322
|
+
* Combines flush and iteration.
|
|
294
323
|
*
|
|
295
|
-
* @yields Remaining packets
|
|
324
|
+
* @yields Remaining packets
|
|
325
|
+
* @throws {Error} If filter is disposed
|
|
296
326
|
*
|
|
297
327
|
* @example
|
|
298
328
|
* ```typescript
|
|
299
|
-
*
|
|
300
|
-
* for await (const packet of bsf.flushPackets()) {
|
|
329
|
+
* for await (const packet of filter.flushPackets()) {
|
|
301
330
|
* await output.writePacket(packet);
|
|
302
|
-
*
|
|
331
|
+
* packet.free();
|
|
303
332
|
* }
|
|
304
333
|
* ```
|
|
334
|
+
*
|
|
335
|
+
* @see {@link flush} For array return
|
|
305
336
|
*/
|
|
306
337
|
async *flushPackets() {
|
|
307
338
|
if (this.isDisposed) {
|
|
@@ -313,25 +344,38 @@ export class BitStreamFilterAPI {
|
|
|
313
344
|
}
|
|
314
345
|
}
|
|
315
346
|
/**
|
|
316
|
-
* Get
|
|
317
|
-
*
|
|
347
|
+
* Get associated stream.
|
|
348
|
+
*
|
|
349
|
+
* Returns the stream this filter was created for.
|
|
350
|
+
*
|
|
351
|
+
* @returns Associated stream
|
|
352
|
+
*
|
|
353
|
+
* @example
|
|
354
|
+
* ```typescript
|
|
355
|
+
* const stream = filter.getStream();
|
|
356
|
+
* console.log(`Filtering stream ${stream.index}`);
|
|
357
|
+
* ```
|
|
318
358
|
*/
|
|
319
359
|
getStream() {
|
|
320
360
|
return this.stream;
|
|
321
361
|
}
|
|
322
362
|
/**
|
|
323
|
-
* Reset
|
|
363
|
+
* Reset filter state.
|
|
324
364
|
*
|
|
325
|
-
* Clears internal buffers and resets
|
|
326
|
-
*
|
|
365
|
+
* Clears internal buffers and resets filter.
|
|
366
|
+
* Does not dispose resources.
|
|
367
|
+
*
|
|
368
|
+
* Direct mapping to av_bsf_flush().
|
|
369
|
+
*
|
|
370
|
+
* @throws {Error} If filter is disposed
|
|
327
371
|
*
|
|
328
372
|
* @example
|
|
329
373
|
* ```typescript
|
|
330
|
-
* //
|
|
331
|
-
*
|
|
332
|
-
* bsf.reset(); // Clear filter state
|
|
333
|
-
* // Continue processing from new position
|
|
374
|
+
* // Reset for new segment
|
|
375
|
+
* filter.reset();
|
|
334
376
|
* ```
|
|
377
|
+
*
|
|
378
|
+
* @see {@link flush} For reset with packet retrieval
|
|
335
379
|
*/
|
|
336
380
|
reset() {
|
|
337
381
|
if (this.isDisposed) {
|
|
@@ -340,18 +384,17 @@ export class BitStreamFilterAPI {
|
|
|
340
384
|
this.ctx.flush();
|
|
341
385
|
}
|
|
342
386
|
/**
|
|
343
|
-
* Dispose of
|
|
387
|
+
* Dispose of filter and free resources.
|
|
344
388
|
*
|
|
345
|
-
*
|
|
346
|
-
*
|
|
389
|
+
* Releases filter context and marks as disposed.
|
|
390
|
+
* Safe to call multiple times.
|
|
347
391
|
*
|
|
348
392
|
* @example
|
|
349
393
|
* ```typescript
|
|
350
|
-
*
|
|
351
|
-
* using bsf = await BitStreamFilterAPI.create('h264_mp4toannexb', stream);
|
|
352
|
-
* // ... use filter
|
|
353
|
-
* } // Automatically disposed when leaving scope
|
|
394
|
+
* filter.dispose();
|
|
354
395
|
* ```
|
|
396
|
+
*
|
|
397
|
+
* @see {@link Symbol.dispose} For automatic cleanup
|
|
355
398
|
*/
|
|
356
399
|
dispose() {
|
|
357
400
|
if (!this.isDisposed) {
|
|
@@ -360,7 +403,20 @@ export class BitStreamFilterAPI {
|
|
|
360
403
|
}
|
|
361
404
|
}
|
|
362
405
|
/**
|
|
363
|
-
*
|
|
406
|
+
* Dispose of filter.
|
|
407
|
+
*
|
|
408
|
+
* Implements Disposable interface for automatic cleanup.
|
|
409
|
+
* Equivalent to calling dispose().
|
|
410
|
+
*
|
|
411
|
+
* @example
|
|
412
|
+
* ```typescript
|
|
413
|
+
* {
|
|
414
|
+
* using filter = BitStreamFilterAPI.create('h264_mp4toannexb', stream);
|
|
415
|
+
* // Use filter...
|
|
416
|
+
* } // Automatically disposed
|
|
417
|
+
* ```
|
|
418
|
+
*
|
|
419
|
+
* @see {@link dispose} For manual cleanup
|
|
364
420
|
*/
|
|
365
421
|
[Symbol.dispose]() {
|
|
366
422
|
this.dispose();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitstream-filter.js","sourceRoot":"","sources":["../../src/api/bitstream-filter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"bitstream-filter.js","sourceRoot":"","sources":["../../src/api/bitstream-filter.ts"],"names":[],"mappings":"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"}
|