node-av 1.1.0 → 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 +51 -38
- package/dist/api/bitstream-filter.d.ts +180 -123
- package/dist/api/bitstream-filter.js +180 -125
- package/dist/api/bitstream-filter.js.map +1 -1
- package/dist/api/decoder.d.ts +279 -132
- package/dist/api/decoder.js +285 -142
- package/dist/api/decoder.js.map +1 -1
- package/dist/api/encoder.d.ts +246 -162
- package/dist/api/encoder.js +272 -208
- package/dist/api/encoder.js.map +1 -1
- package/dist/api/filter-presets.d.ts +690 -94
- package/dist/api/filter-presets.js +686 -102
- package/dist/api/filter-presets.js.map +1 -1
- package/dist/api/filter.d.ts +249 -213
- package/dist/api/filter.js +252 -242
- package/dist/api/filter.js.map +1 -1
- package/dist/api/hardware.d.ts +224 -117
- package/dist/api/hardware.js +380 -214
- package/dist/api/hardware.js.map +1 -1
- package/dist/api/index.d.ts +3 -3
- package/dist/api/index.js +1 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/io-stream.d.ts +65 -61
- package/dist/api/io-stream.js +43 -46
- package/dist/api/io-stream.js.map +1 -1
- package/dist/api/media-input.d.ts +242 -140
- package/dist/api/media-input.js +205 -103
- package/dist/api/media-input.js.map +1 -1
- package/dist/api/media-output.d.ts +206 -128
- package/dist/api/media-output.js +210 -128
- 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 +21 -187
- 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/audio-fifo.d.ts +127 -170
- package/dist/lib/audio-fifo.js +130 -173
- package/dist/lib/audio-fifo.js.map +1 -1
- 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 +68 -54
- package/dist/lib/bitstream-filter.js +68 -54
- package/dist/lib/bitstream-filter.js.map +1 -1
- package/dist/lib/codec-context.d.ts +316 -380
- package/dist/lib/codec-context.js +316 -381
- package/dist/lib/codec-context.js.map +1 -1
- package/dist/lib/codec-parameters.d.ts +160 -170
- package/dist/lib/codec-parameters.js +162 -172
- package/dist/lib/codec-parameters.js.map +1 -1
- package/dist/lib/codec-parser.d.ts +91 -104
- package/dist/lib/codec-parser.js +92 -103
- package/dist/lib/codec-parser.js.map +1 -1
- package/dist/lib/codec.d.ts +264 -281
- package/dist/lib/codec.js +268 -285
- package/dist/lib/codec.js.map +1 -1
- package/dist/lib/dictionary.d.ts +149 -203
- package/dist/lib/dictionary.js +158 -212
- package/dist/lib/dictionary.js.map +1 -1
- package/dist/lib/error.d.ts +96 -130
- package/dist/lib/error.js +98 -128
- package/dist/lib/error.js.map +1 -1
- package/dist/lib/filter-context.d.ts +284 -218
- package/dist/lib/filter-context.js +290 -227
- package/dist/lib/filter-context.js.map +1 -1
- package/dist/lib/filter-graph.d.ts +251 -292
- 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 +93 -111
- package/dist/lib/filter.js.map +1 -1
- package/dist/lib/format-context.d.ts +320 -428
- package/dist/lib/format-context.js +313 -385
- package/dist/lib/format-context.js.map +1 -1
- package/dist/lib/frame.d.ts +262 -405
- package/dist/lib/frame.js +263 -408
- package/dist/lib/frame.js.map +1 -1
- package/dist/lib/hardware-device-context.d.ts +149 -203
- 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 +170 -180
- 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 -1
- package/dist/lib/index.js +2 -2
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/input-format.d.ts +89 -117
- package/dist/lib/input-format.js +89 -117
- package/dist/lib/input-format.js.map +1 -1
- package/dist/lib/io-context.d.ts +209 -241
- package/dist/lib/io-context.js +220 -252
- package/dist/lib/io-context.js.map +1 -1
- package/dist/lib/log.d.ts +85 -119
- package/dist/lib/log.js +85 -122
- package/dist/lib/log.js.map +1 -1
- package/dist/lib/native-types.d.ts +117 -106
- package/dist/lib/native-types.js +0 -7
- package/dist/lib/native-types.js.map +1 -1
- package/dist/lib/option.d.ts +284 -241
- package/dist/lib/option.js +309 -249
- package/dist/lib/option.js.map +1 -1
- package/dist/lib/output-format.d.ts +77 -101
- package/dist/lib/output-format.js +77 -101
- package/dist/lib/output-format.js.map +1 -1
- package/dist/lib/packet.d.ts +172 -240
- 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 +241 -325
- 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 +129 -173
- package/dist/lib/software-scale-context.js +131 -175
- package/dist/lib/software-scale-context.js.map +1 -1
- package/dist/lib/stream.d.ts +87 -197
- package/dist/lib/stream.js +87 -197
- package/dist/lib/stream.js.map +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 +21 -12
- package/release_notes.md +43 -59
- package/CHANGELOG.md +0 -8
|
@@ -1,58 +1,42 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* BitStreamFilterAPI - High-level wrapper for bitstream filtering
|
|
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
1
|
import { AVERROR_EOF } from '../constants/constants.js';
|
|
13
2
|
import { AVERROR_EAGAIN, BitStreamFilter, BitStreamFilterContext, FFmpegError, Packet } from '../lib/index.js';
|
|
14
3
|
/**
|
|
15
4
|
* High-level bitstream filter for packet processing.
|
|
16
5
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* 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.
|
|
22
10
|
*
|
|
23
11
|
* @example
|
|
24
12
|
* ```typescript
|
|
25
|
-
*
|
|
26
|
-
* const media = await MediaInput.open('video.mp4');
|
|
27
|
-
* const stream = media.video();
|
|
28
|
-
* const bsf = await BitStreamFilterAPI.create('h264_mp4toannexb', stream);
|
|
13
|
+
* import { BitStreamFilterAPI } from 'node-av/api';
|
|
29
14
|
*
|
|
30
|
-
* //
|
|
31
|
-
*
|
|
32
|
-
* if (packet.streamIndex === stream.index) {
|
|
33
|
-
* const filtered = await bsf.process(packet);
|
|
34
|
-
* for (const outPacket of filtered) {
|
|
35
|
-
* // Write to output or process further
|
|
36
|
-
* await output.writePacket(outPacket);
|
|
37
|
-
* }
|
|
38
|
-
* }
|
|
39
|
-
* }
|
|
15
|
+
* // Create H.264 Annex B converter
|
|
16
|
+
* const filter = BitStreamFilterAPI.create('h264_mp4toannexb', stream);
|
|
40
17
|
*
|
|
41
|
-
* //
|
|
42
|
-
* const
|
|
43
|
-
*
|
|
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
|
+
* }
|
|
44
24
|
* ```
|
|
45
25
|
*
|
|
46
26
|
* @example
|
|
47
27
|
* ```typescript
|
|
48
28
|
* // Process packet stream
|
|
49
|
-
* const
|
|
29
|
+
* const filter = BitStreamFilterAPI.create('hevc_mp4toannexb', videoStream);
|
|
50
30
|
*
|
|
51
|
-
* for await (const
|
|
52
|
-
*
|
|
53
|
-
*
|
|
31
|
+
* for await (const packet of filter.packets(input.packets())) {
|
|
32
|
+
* await output.writePacket(packet);
|
|
33
|
+
* packet.free();
|
|
54
34
|
* }
|
|
55
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
|
|
56
40
|
*/
|
|
57
41
|
export class BitStreamFilterAPI {
|
|
58
42
|
ctx;
|
|
@@ -60,11 +44,10 @@ export class BitStreamFilterAPI {
|
|
|
60
44
|
stream;
|
|
61
45
|
isDisposed = false;
|
|
62
46
|
/**
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
* @param
|
|
66
|
-
* @
|
|
67
|
-
* @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
|
|
68
51
|
*/
|
|
69
52
|
constructor(filter, ctx, stream) {
|
|
70
53
|
this.filter = filter;
|
|
@@ -72,26 +55,41 @@ export class BitStreamFilterAPI {
|
|
|
72
55
|
this.stream = stream;
|
|
73
56
|
}
|
|
74
57
|
/**
|
|
75
|
-
* 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.
|
|
76
62
|
*
|
|
77
|
-
*
|
|
78
|
-
* and initialization.
|
|
63
|
+
* Direct mapping to av_bsf_get_by_name() and av_bsf_alloc().
|
|
79
64
|
*
|
|
80
|
-
* @param filterName - Name of the bitstream filter
|
|
81
|
-
* @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
|
|
82
68
|
*
|
|
83
|
-
* @
|
|
69
|
+
* @throws {Error} If filter not found or initialization fails
|
|
70
|
+
* @throws {FFmpegError} If allocation or initialization fails
|
|
84
71
|
*
|
|
85
|
-
* @
|
|
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
|
+
* ```
|
|
86
83
|
*
|
|
87
84
|
* @example
|
|
88
85
|
* ```typescript
|
|
89
|
-
*
|
|
90
|
-
* const
|
|
91
|
-
* const bsf = await BitStreamFilterAPI.create('h264_mp4toannexb', stream);
|
|
86
|
+
* // Remove metadata
|
|
87
|
+
* const filter = BitStreamFilterAPI.create('filter_units', stream);
|
|
92
88
|
* ```
|
|
89
|
+
*
|
|
90
|
+
* @see {@link BitStreamFilter.getByName} For filter discovery
|
|
93
91
|
*/
|
|
94
|
-
static
|
|
92
|
+
static create(filterName, stream) {
|
|
95
93
|
if (!stream) {
|
|
96
94
|
throw new Error('Stream is required');
|
|
97
95
|
}
|
|
@@ -124,28 +122,27 @@ export class BitStreamFilterAPI {
|
|
|
124
122
|
}
|
|
125
123
|
}
|
|
126
124
|
/**
|
|
127
|
-
* Get
|
|
125
|
+
* Get filter name.
|
|
128
126
|
*
|
|
129
|
-
* @
|
|
127
|
+
* @example
|
|
128
|
+
* ```typescript
|
|
129
|
+
* console.log(`Using filter: ${filter.name}`);
|
|
130
|
+
* ```
|
|
130
131
|
*/
|
|
131
132
|
get name() {
|
|
132
133
|
return this.filter.name ?? 'unknown';
|
|
133
134
|
}
|
|
134
|
-
/**
|
|
135
|
-
* Get the associated stream.
|
|
136
|
-
*
|
|
137
|
-
* @returns The stream this filter was created for
|
|
138
|
-
*/
|
|
139
|
-
get streamInfo() {
|
|
140
|
-
return this.stream;
|
|
141
|
-
}
|
|
142
135
|
/**
|
|
143
136
|
* Get output codec parameters.
|
|
144
137
|
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
138
|
+
* Parameters after filter processing.
|
|
139
|
+
* May differ from input parameters.
|
|
147
140
|
*
|
|
148
|
-
* @
|
|
141
|
+
* @example
|
|
142
|
+
* ```typescript
|
|
143
|
+
* const outputParams = filter.outputCodecParameters;
|
|
144
|
+
* console.log(`Output codec: ${outputParams?.codecId}`);
|
|
145
|
+
* ```
|
|
149
146
|
*/
|
|
150
147
|
get outputCodecParameters() {
|
|
151
148
|
return this.ctx.outputCodecParameters;
|
|
@@ -153,33 +150,49 @@ export class BitStreamFilterAPI {
|
|
|
153
150
|
/**
|
|
154
151
|
* Get output time base.
|
|
155
152
|
*
|
|
156
|
-
*
|
|
153
|
+
* Time base after filter processing.
|
|
157
154
|
*
|
|
158
|
-
* @
|
|
155
|
+
* @example
|
|
156
|
+
* ```typescript
|
|
157
|
+
* const tb = filter.outputTimeBase;
|
|
158
|
+
* console.log(`Output timebase: ${tb?.num}/${tb?.den}`);
|
|
159
|
+
* ```
|
|
159
160
|
*/
|
|
160
161
|
get outputTimeBase() {
|
|
161
162
|
return this.ctx.outputTimeBase;
|
|
162
163
|
}
|
|
163
164
|
/**
|
|
164
|
-
* Process a
|
|
165
|
+
* Process a packet through the filter.
|
|
165
166
|
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
167
|
+
* Applies bitstream filter to packet.
|
|
168
|
+
* May produce zero, one, or multiple output packets.
|
|
169
|
+
* Pass null to signal end-of-stream.
|
|
168
170
|
*
|
|
169
|
-
*
|
|
171
|
+
* Direct mapping to av_bsf_send_packet() and av_bsf_receive_packet().
|
|
170
172
|
*
|
|
171
|
-
* @
|
|
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
|
|
172
178
|
*
|
|
173
179
|
* @example
|
|
174
180
|
* ```typescript
|
|
175
|
-
* const
|
|
176
|
-
* const
|
|
177
|
-
*
|
|
178
|
-
*
|
|
179
|
-
* console.log(`Filtered packet: size=${packet.size}`);
|
|
180
|
-
* 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();
|
|
181
185
|
* }
|
|
182
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
|
|
183
196
|
*/
|
|
184
197
|
async process(packet) {
|
|
185
198
|
if (this.isDisposed) {
|
|
@@ -209,32 +222,40 @@ export class BitStreamFilterAPI {
|
|
|
209
222
|
return outputPackets;
|
|
210
223
|
}
|
|
211
224
|
/**
|
|
212
|
-
* Process
|
|
213
|
-
*
|
|
214
|
-
* Async generator that processes packets lazily and yields filtered results.
|
|
215
|
-
* Automatically handles EOF and cleanup.
|
|
225
|
+
* Process packet stream through filter.
|
|
216
226
|
*
|
|
217
|
-
*
|
|
227
|
+
* High-level async generator for filtering packet streams.
|
|
228
|
+
* Automatically handles flushing at end of stream.
|
|
229
|
+
* Yields filtered packets ready for output.
|
|
218
230
|
*
|
|
231
|
+
* @param packets - Async iterable of packets
|
|
219
232
|
* @yields Filtered packets
|
|
233
|
+
* @throws {Error} If filter is disposed
|
|
234
|
+
* @throws {FFmpegError} If filtering fails
|
|
220
235
|
*
|
|
221
236
|
* @example
|
|
222
237
|
* ```typescript
|
|
223
|
-
*
|
|
224
|
-
*
|
|
225
|
-
*
|
|
226
|
-
*
|
|
227
|
-
* for await (const packet of media.packets()) {
|
|
228
|
-
* if (packet.streamIndex === stream.index) {
|
|
229
|
-
* yield packet;
|
|
230
|
-
* }
|
|
231
|
-
* }
|
|
238
|
+
* // Filter entire stream
|
|
239
|
+
* for await (const packet of filter.packets(input.packets())) {
|
|
240
|
+
* await output.writePacket(packet);
|
|
241
|
+
* packet.free();
|
|
232
242
|
* }
|
|
243
|
+
* ```
|
|
233
244
|
*
|
|
234
|
-
*
|
|
235
|
-
*
|
|
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();
|
|
236
254
|
* }
|
|
237
255
|
* ```
|
|
256
|
+
*
|
|
257
|
+
* @see {@link process} For single packet filtering
|
|
258
|
+
* @see {@link flush} For end-of-stream handling
|
|
238
259
|
*/
|
|
239
260
|
async *packets(packets) {
|
|
240
261
|
if (this.isDisposed) {
|
|
@@ -261,21 +282,28 @@ export class BitStreamFilterAPI {
|
|
|
261
282
|
}
|
|
262
283
|
}
|
|
263
284
|
/**
|
|
264
|
-
* Flush
|
|
285
|
+
* Flush filter and get remaining packets.
|
|
286
|
+
*
|
|
287
|
+
* Signals end-of-stream and retrieves buffered packets.
|
|
288
|
+
* Also resets internal filter state.
|
|
265
289
|
*
|
|
266
|
-
*
|
|
267
|
-
* Should be called when all input packets have been processed.
|
|
290
|
+
* Direct mapping to av_bsf_flush().
|
|
268
291
|
*
|
|
269
|
-
* @returns Array of remaining packets
|
|
292
|
+
* @returns Array of remaining packets
|
|
293
|
+
*
|
|
294
|
+
* @throws {Error} If filter is disposed
|
|
270
295
|
*
|
|
271
296
|
* @example
|
|
272
297
|
* ```typescript
|
|
273
|
-
*
|
|
274
|
-
* const remaining = await bsf.flush();
|
|
298
|
+
* const remaining = await filter.flush();
|
|
275
299
|
* for (const packet of remaining) {
|
|
276
300
|
* await output.writePacket(packet);
|
|
301
|
+
* packet.free();
|
|
277
302
|
* }
|
|
278
303
|
* ```
|
|
304
|
+
*
|
|
305
|
+
* @see {@link flushPackets} For async iteration
|
|
306
|
+
* @see {@link reset} For state reset only
|
|
279
307
|
*/
|
|
280
308
|
async flush() {
|
|
281
309
|
if (this.isDisposed) {
|
|
@@ -288,21 +316,23 @@ export class BitStreamFilterAPI {
|
|
|
288
316
|
return filtered;
|
|
289
317
|
}
|
|
290
318
|
/**
|
|
291
|
-
* Flush
|
|
319
|
+
* Flush filter as async generator.
|
|
292
320
|
*
|
|
293
|
-
*
|
|
294
|
-
*
|
|
321
|
+
* Convenient async iteration over remaining packets.
|
|
322
|
+
* Combines flush and iteration.
|
|
295
323
|
*
|
|
296
|
-
* @yields Remaining packets
|
|
324
|
+
* @yields Remaining packets
|
|
325
|
+
* @throws {Error} If filter is disposed
|
|
297
326
|
*
|
|
298
327
|
* @example
|
|
299
328
|
* ```typescript
|
|
300
|
-
*
|
|
301
|
-
* for await (const packet of bsf.flushPackets()) {
|
|
329
|
+
* for await (const packet of filter.flushPackets()) {
|
|
302
330
|
* await output.writePacket(packet);
|
|
303
|
-
*
|
|
331
|
+
* packet.free();
|
|
304
332
|
* }
|
|
305
333
|
* ```
|
|
334
|
+
*
|
|
335
|
+
* @see {@link flush} For array return
|
|
306
336
|
*/
|
|
307
337
|
async *flushPackets() {
|
|
308
338
|
if (this.isDisposed) {
|
|
@@ -314,25 +344,38 @@ export class BitStreamFilterAPI {
|
|
|
314
344
|
}
|
|
315
345
|
}
|
|
316
346
|
/**
|
|
317
|
-
* Get
|
|
318
|
-
*
|
|
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
|
+
* ```
|
|
319
358
|
*/
|
|
320
359
|
getStream() {
|
|
321
360
|
return this.stream;
|
|
322
361
|
}
|
|
323
362
|
/**
|
|
324
|
-
* Reset
|
|
363
|
+
* Reset filter state.
|
|
325
364
|
*
|
|
326
|
-
* Clears internal buffers and resets
|
|
327
|
-
*
|
|
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
|
|
328
371
|
*
|
|
329
372
|
* @example
|
|
330
373
|
* ```typescript
|
|
331
|
-
* //
|
|
332
|
-
*
|
|
333
|
-
* bsf.reset(); // Clear filter state
|
|
334
|
-
* // Continue processing from new position
|
|
374
|
+
* // Reset for new segment
|
|
375
|
+
* filter.reset();
|
|
335
376
|
* ```
|
|
377
|
+
*
|
|
378
|
+
* @see {@link flush} For reset with packet retrieval
|
|
336
379
|
*/
|
|
337
380
|
reset() {
|
|
338
381
|
if (this.isDisposed) {
|
|
@@ -341,18 +384,17 @@ export class BitStreamFilterAPI {
|
|
|
341
384
|
this.ctx.flush();
|
|
342
385
|
}
|
|
343
386
|
/**
|
|
344
|
-
* Dispose of
|
|
387
|
+
* Dispose of filter and free resources.
|
|
345
388
|
*
|
|
346
|
-
*
|
|
347
|
-
*
|
|
389
|
+
* Releases filter context and marks as disposed.
|
|
390
|
+
* Safe to call multiple times.
|
|
348
391
|
*
|
|
349
392
|
* @example
|
|
350
393
|
* ```typescript
|
|
351
|
-
*
|
|
352
|
-
* using bsf = await BitStreamFilterAPI.create('h264_mp4toannexb', stream);
|
|
353
|
-
* // ... use filter
|
|
354
|
-
* } // Automatically disposed when leaving scope
|
|
394
|
+
* filter.dispose();
|
|
355
395
|
* ```
|
|
396
|
+
*
|
|
397
|
+
* @see {@link Symbol.dispose} For automatic cleanup
|
|
356
398
|
*/
|
|
357
399
|
dispose() {
|
|
358
400
|
if (!this.isDisposed) {
|
|
@@ -361,7 +403,20 @@ export class BitStreamFilterAPI {
|
|
|
361
403
|
}
|
|
362
404
|
}
|
|
363
405
|
/**
|
|
364
|
-
*
|
|
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
|
|
365
420
|
*/
|
|
366
421
|
[Symbol.dispose]() {
|
|
367
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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"}
|