node-av 1.1.0 → 1.3.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 -59
- package/dist/api/bitstream-filter.d.ts +183 -123
- package/dist/api/bitstream-filter.js +185 -127
- package/dist/api/bitstream-filter.js.map +1 -1
- package/dist/api/decoder.d.ts +282 -130
- package/dist/api/decoder.js +290 -142
- package/dist/api/decoder.js.map +1 -1
- package/dist/api/encoder.d.ts +249 -160
- package/dist/api/encoder.js +276 -207
- package/dist/api/encoder.js.map +1 -1
- package/dist/api/filter-presets.d.ts +1944 -96
- package/dist/api/filter-presets.js +2059 -105
- package/dist/api/filter-presets.js.map +1 -1
- package/dist/api/filter.d.ts +264 -200
- package/dist/api/filter.js +269 -231
- package/dist/api/filter.js.map +1 -1
- package/dist/api/hardware.d.ts +246 -117
- package/dist/api/hardware.js +440 -217
- 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 -55
- package/dist/api/io-stream.js +43 -40
- package/dist/api/io-stream.js.map +1 -1
- package/dist/api/media-input.d.ts +242 -139
- package/dist/api/media-input.js +205 -103
- package/dist/api/media-input.js.map +1 -1
- package/dist/api/media-output.d.ts +208 -126
- package/dist/api/media-output.js +212 -126
- package/dist/api/media-output.js.map +1 -1
- package/dist/api/pipeline.d.ts +361 -38
- package/dist/api/pipeline.js +255 -14
- package/dist/api/pipeline.js.map +1 -1
- package/dist/api/types.d.ts +26 -187
- package/dist/api/utilities/audio-sample.d.ts +0 -8
- package/dist/api/utilities/audio-sample.js +0 -8
- package/dist/api/utilities/audio-sample.js.map +1 -1
- package/dist/api/utilities/channel-layout.d.ts +0 -8
- package/dist/api/utilities/channel-layout.js +0 -8
- package/dist/api/utilities/channel-layout.js.map +1 -1
- package/dist/api/utilities/image.d.ts +0 -8
- package/dist/api/utilities/image.js +0 -8
- package/dist/api/utilities/image.js.map +1 -1
- package/dist/api/utilities/index.d.ts +3 -3
- package/dist/api/utilities/index.js +3 -3
- package/dist/api/utilities/index.js.map +1 -1
- package/dist/api/utilities/media-type.d.ts +1 -9
- package/dist/api/utilities/media-type.js +1 -9
- package/dist/api/utilities/media-type.js.map +1 -1
- package/dist/api/utilities/pixel-format.d.ts +1 -9
- package/dist/api/utilities/pixel-format.js +1 -9
- package/dist/api/utilities/pixel-format.js.map +1 -1
- package/dist/api/utilities/sample-format.d.ts +1 -9
- package/dist/api/utilities/sample-format.js +1 -9
- package/dist/api/utilities/sample-format.js.map +1 -1
- package/dist/api/utilities/streaming.d.ts +0 -8
- package/dist/api/utilities/streaming.js +0 -8
- package/dist/api/utilities/streaming.js.map +1 -1
- package/dist/api/utilities/timestamp.d.ts +0 -8
- package/dist/api/utilities/timestamp.js +0 -8
- package/dist/api/utilities/timestamp.js.map +1 -1
- package/dist/api/utils.d.ts +1 -2
- package/dist/api/utils.js +11 -0
- package/dist/api/utils.js.map +1 -1
- package/dist/constants/constants.d.ts +1 -1
- package/dist/constants/constants.js +2 -0
- package/dist/constants/constants.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.d.ts +1 -0
- package/dist/lib/binding.js +7 -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 +266 -283
- package/dist/lib/codec.js +270 -287
- 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 +3 -2
- package/dist/lib/index.js +3 -3
- 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 +118 -106
- package/dist/lib/native-types.js +0 -7
- package/dist/lib/native-types.js.map +1 -1
- package/dist/lib/option.d.ts +437 -218
- package/dist/lib/option.js +462 -226
- 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 +435 -181
- package/dist/lib/utilities.js +438 -182
- package/dist/lib/utilities.js.map +1 -1
- package/install/check.js +0 -1
- package/install/ffmpeg.js +0 -11
- package/package.json +25 -18
- package/release_notes.md +24 -59
- package/CHANGELOG.md +0 -8
|
@@ -1,58 +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_EOF } from '../constants/constants.js';
|
|
13
|
-
import { AVERROR_EAGAIN, BitStreamFilter, BitStreamFilterContext, FFmpegError, Packet } from '../lib/index.js';
|
|
1
|
+
import { AVERROR_EAGAIN, AVERROR_EOF } from '../constants/constants.js';
|
|
2
|
+
import { 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,42 @@ 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.
|
|
76
59
|
*
|
|
77
|
-
*
|
|
78
|
-
* and
|
|
60
|
+
* Initializes filter with stream codec parameters.
|
|
61
|
+
* Configures time base and prepares for packet processing.
|
|
79
62
|
*
|
|
80
|
-
*
|
|
81
|
-
* @param stream - Stream to filter
|
|
63
|
+
* Direct mapping to av_bsf_get_by_name() and av_bsf_alloc().
|
|
82
64
|
*
|
|
83
|
-
* @
|
|
65
|
+
* @param filterName - Name of the bitstream filter
|
|
66
|
+
* @param stream - Stream to apply filter to
|
|
67
|
+
* @returns Configured bitstream filter
|
|
84
68
|
*
|
|
85
|
-
* @throws {Error} If filter
|
|
69
|
+
* @throws {Error} If filter not found or initialization fails
|
|
70
|
+
*
|
|
71
|
+
* @throws {FFmpegError} If allocation or initialization fails
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* // H.264 MP4 to Annex B conversion
|
|
76
|
+
* const filter = BitStreamFilterAPI.create('h264_mp4toannexb', videoStream);
|
|
77
|
+
* ```
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```typescript
|
|
81
|
+
* // AAC ADTS to ASC conversion
|
|
82
|
+
* const filter = BitStreamFilterAPI.create('aac_adtstoasc', audioStream);
|
|
83
|
+
* ```
|
|
86
84
|
*
|
|
87
85
|
* @example
|
|
88
86
|
* ```typescript
|
|
89
|
-
*
|
|
90
|
-
* const
|
|
91
|
-
* const bsf = await BitStreamFilterAPI.create('h264_mp4toannexb', stream);
|
|
87
|
+
* // Remove metadata
|
|
88
|
+
* const filter = BitStreamFilterAPI.create('filter_units', stream);
|
|
92
89
|
* ```
|
|
90
|
+
*
|
|
91
|
+
* @see {@link BitStreamFilter.getByName} For filter discovery
|
|
93
92
|
*/
|
|
94
|
-
static
|
|
93
|
+
static create(filterName, stream) {
|
|
95
94
|
if (!stream) {
|
|
96
95
|
throw new Error('Stream is required');
|
|
97
96
|
}
|
|
@@ -124,28 +123,27 @@ export class BitStreamFilterAPI {
|
|
|
124
123
|
}
|
|
125
124
|
}
|
|
126
125
|
/**
|
|
127
|
-
* Get
|
|
126
|
+
* Get filter name.
|
|
128
127
|
*
|
|
129
|
-
* @
|
|
128
|
+
* @example
|
|
129
|
+
* ```typescript
|
|
130
|
+
* console.log(`Using filter: ${filter.name}`);
|
|
131
|
+
* ```
|
|
130
132
|
*/
|
|
131
133
|
get name() {
|
|
132
134
|
return this.filter.name ?? 'unknown';
|
|
133
135
|
}
|
|
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
136
|
/**
|
|
143
137
|
* Get output codec parameters.
|
|
144
138
|
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
139
|
+
* Parameters after filter processing.
|
|
140
|
+
* May differ from input parameters.
|
|
147
141
|
*
|
|
148
|
-
* @
|
|
142
|
+
* @example
|
|
143
|
+
* ```typescript
|
|
144
|
+
* const outputParams = filter.outputCodecParameters;
|
|
145
|
+
* console.log(`Output codec: ${outputParams?.codecId}`);
|
|
146
|
+
* ```
|
|
149
147
|
*/
|
|
150
148
|
get outputCodecParameters() {
|
|
151
149
|
return this.ctx.outputCodecParameters;
|
|
@@ -153,33 +151,50 @@ export class BitStreamFilterAPI {
|
|
|
153
151
|
/**
|
|
154
152
|
* Get output time base.
|
|
155
153
|
*
|
|
156
|
-
*
|
|
154
|
+
* Time base after filter processing.
|
|
157
155
|
*
|
|
158
|
-
* @
|
|
156
|
+
* @example
|
|
157
|
+
* ```typescript
|
|
158
|
+
* const tb = filter.outputTimeBase;
|
|
159
|
+
* console.log(`Output timebase: ${tb?.num}/${tb?.den}`);
|
|
160
|
+
* ```
|
|
159
161
|
*/
|
|
160
162
|
get outputTimeBase() {
|
|
161
163
|
return this.ctx.outputTimeBase;
|
|
162
164
|
}
|
|
163
165
|
/**
|
|
164
|
-
* Process a
|
|
166
|
+
* Process a packet through the filter.
|
|
167
|
+
*
|
|
168
|
+
* Applies bitstream filter to packet.
|
|
169
|
+
* May produce zero, one, or multiple output packets.
|
|
170
|
+
* Pass null to signal end-of-stream.
|
|
165
171
|
*
|
|
166
|
-
*
|
|
167
|
-
* One input packet may produce zero, one, or multiple output packets.
|
|
172
|
+
* Direct mapping to av_bsf_send_packet() and av_bsf_receive_packet().
|
|
168
173
|
*
|
|
169
|
-
* @param packet - Packet to filter
|
|
174
|
+
* @param packet - Packet to filter or null for EOF
|
|
175
|
+
* @returns Array of filtered packets
|
|
170
176
|
*
|
|
171
|
-
* @
|
|
177
|
+
* @throws {Error} If filter is disposed
|
|
178
|
+
*
|
|
179
|
+
* @throws {FFmpegError} If filtering fails
|
|
172
180
|
*
|
|
173
181
|
* @example
|
|
174
182
|
* ```typescript
|
|
175
|
-
* const
|
|
176
|
-
* const
|
|
177
|
-
*
|
|
178
|
-
*
|
|
179
|
-
* console.log(`Filtered packet: size=${packet.size}`);
|
|
180
|
-
* await output.writePacket(packet);
|
|
183
|
+
* const outputPackets = await filter.process(inputPacket);
|
|
184
|
+
* for (const packet of outputPackets) {
|
|
185
|
+
* console.log(`Filtered packet: pts=${packet.pts}`);
|
|
186
|
+
* packet.free();
|
|
181
187
|
* }
|
|
182
188
|
* ```
|
|
189
|
+
*
|
|
190
|
+
* @example
|
|
191
|
+
* ```typescript
|
|
192
|
+
* // Flush filter
|
|
193
|
+
* const remaining = await filter.process(null);
|
|
194
|
+
* ```
|
|
195
|
+
*
|
|
196
|
+
* @see {@link flush} For explicit flushing
|
|
197
|
+
* @see {@link packets} For stream processing
|
|
183
198
|
*/
|
|
184
199
|
async process(packet) {
|
|
185
200
|
if (this.isDisposed) {
|
|
@@ -209,32 +224,41 @@ export class BitStreamFilterAPI {
|
|
|
209
224
|
return outputPackets;
|
|
210
225
|
}
|
|
211
226
|
/**
|
|
212
|
-
* Process
|
|
213
|
-
*
|
|
214
|
-
* Async generator that processes packets lazily and yields filtered results.
|
|
215
|
-
* Automatically handles EOF and cleanup.
|
|
227
|
+
* Process packet stream through filter.
|
|
216
228
|
*
|
|
217
|
-
*
|
|
229
|
+
* High-level async generator for filtering packet streams.
|
|
230
|
+
* Automatically handles flushing at end of stream.
|
|
231
|
+
* Yields filtered packets ready for output.
|
|
218
232
|
*
|
|
233
|
+
* @param packets - Async iterable of packets
|
|
219
234
|
* @yields Filtered packets
|
|
235
|
+
* @throws {Error} If filter is disposed
|
|
236
|
+
*
|
|
237
|
+
* @throws {FFmpegError} If filtering fails
|
|
220
238
|
*
|
|
221
239
|
* @example
|
|
222
240
|
* ```typescript
|
|
223
|
-
*
|
|
224
|
-
*
|
|
225
|
-
*
|
|
226
|
-
*
|
|
227
|
-
* for await (const packet of media.packets()) {
|
|
228
|
-
* if (packet.streamIndex === stream.index) {
|
|
229
|
-
* yield packet;
|
|
230
|
-
* }
|
|
231
|
-
* }
|
|
241
|
+
* // Filter entire stream
|
|
242
|
+
* for await (const packet of filter.packets(input.packets())) {
|
|
243
|
+
* await output.writePacket(packet);
|
|
244
|
+
* packet.free();
|
|
232
245
|
* }
|
|
246
|
+
* ```
|
|
233
247
|
*
|
|
234
|
-
*
|
|
235
|
-
*
|
|
248
|
+
* @example
|
|
249
|
+
* ```typescript
|
|
250
|
+
* // Chain with decoder
|
|
251
|
+
* const decoder = await Decoder.create(stream);
|
|
252
|
+
* const filter = BitStreamFilterAPI.create('h264_mp4toannexb', stream);
|
|
253
|
+
*
|
|
254
|
+
* for await (const frame of decoder.frames(filter.packets(input.packets()))) {
|
|
255
|
+
* // Process frames
|
|
256
|
+
* frame.free();
|
|
236
257
|
* }
|
|
237
258
|
* ```
|
|
259
|
+
*
|
|
260
|
+
* @see {@link process} For single packet filtering
|
|
261
|
+
* @see {@link flush} For end-of-stream handling
|
|
238
262
|
*/
|
|
239
263
|
async *packets(packets) {
|
|
240
264
|
if (this.isDisposed) {
|
|
@@ -261,21 +285,28 @@ export class BitStreamFilterAPI {
|
|
|
261
285
|
}
|
|
262
286
|
}
|
|
263
287
|
/**
|
|
264
|
-
* Flush
|
|
288
|
+
* Flush filter and get remaining packets.
|
|
265
289
|
*
|
|
266
|
-
*
|
|
267
|
-
*
|
|
290
|
+
* Signals end-of-stream and retrieves buffered packets.
|
|
291
|
+
* Also resets internal filter state.
|
|
268
292
|
*
|
|
269
|
-
*
|
|
293
|
+
* Direct mapping to av_bsf_flush().
|
|
294
|
+
*
|
|
295
|
+
* @returns Array of remaining packets
|
|
296
|
+
*
|
|
297
|
+
* @throws {Error} If filter is disposed
|
|
270
298
|
*
|
|
271
299
|
* @example
|
|
272
300
|
* ```typescript
|
|
273
|
-
*
|
|
274
|
-
* const remaining = await bsf.flush();
|
|
301
|
+
* const remaining = await filter.flush();
|
|
275
302
|
* for (const packet of remaining) {
|
|
276
303
|
* await output.writePacket(packet);
|
|
304
|
+
* packet.free();
|
|
277
305
|
* }
|
|
278
306
|
* ```
|
|
307
|
+
*
|
|
308
|
+
* @see {@link flushPackets} For async iteration
|
|
309
|
+
* @see {@link reset} For state reset only
|
|
279
310
|
*/
|
|
280
311
|
async flush() {
|
|
281
312
|
if (this.isDisposed) {
|
|
@@ -288,21 +319,23 @@ export class BitStreamFilterAPI {
|
|
|
288
319
|
return filtered;
|
|
289
320
|
}
|
|
290
321
|
/**
|
|
291
|
-
* Flush
|
|
322
|
+
* Flush filter as async generator.
|
|
292
323
|
*
|
|
293
|
-
*
|
|
294
|
-
*
|
|
324
|
+
* Convenient async iteration over remaining packets.
|
|
325
|
+
* Combines flush and iteration.
|
|
295
326
|
*
|
|
296
|
-
* @yields Remaining packets
|
|
327
|
+
* @yields Remaining packets
|
|
328
|
+
* @throws {Error} If filter is disposed
|
|
297
329
|
*
|
|
298
330
|
* @example
|
|
299
331
|
* ```typescript
|
|
300
|
-
*
|
|
301
|
-
* for await (const packet of bsf.flushPackets()) {
|
|
332
|
+
* for await (const packet of filter.flushPackets()) {
|
|
302
333
|
* await output.writePacket(packet);
|
|
303
|
-
*
|
|
334
|
+
* packet.free();
|
|
304
335
|
* }
|
|
305
336
|
* ```
|
|
337
|
+
*
|
|
338
|
+
* @see {@link flush} For array return
|
|
306
339
|
*/
|
|
307
340
|
async *flushPackets() {
|
|
308
341
|
if (this.isDisposed) {
|
|
@@ -314,25 +347,38 @@ export class BitStreamFilterAPI {
|
|
|
314
347
|
}
|
|
315
348
|
}
|
|
316
349
|
/**
|
|
317
|
-
* Get
|
|
318
|
-
*
|
|
350
|
+
* Get associated stream.
|
|
351
|
+
*
|
|
352
|
+
* Returns the stream this filter was created for.
|
|
353
|
+
*
|
|
354
|
+
* @returns Associated stream
|
|
355
|
+
*
|
|
356
|
+
* @example
|
|
357
|
+
* ```typescript
|
|
358
|
+
* const stream = filter.getStream();
|
|
359
|
+
* console.log(`Filtering stream ${stream.index}`);
|
|
360
|
+
* ```
|
|
319
361
|
*/
|
|
320
362
|
getStream() {
|
|
321
363
|
return this.stream;
|
|
322
364
|
}
|
|
323
365
|
/**
|
|
324
|
-
* Reset
|
|
366
|
+
* Reset filter state.
|
|
367
|
+
*
|
|
368
|
+
* Clears internal buffers and resets filter.
|
|
369
|
+
* Does not dispose resources.
|
|
325
370
|
*
|
|
326
|
-
*
|
|
327
|
-
*
|
|
371
|
+
* Direct mapping to av_bsf_flush().
|
|
372
|
+
*
|
|
373
|
+
* @throws {Error} If filter is disposed
|
|
328
374
|
*
|
|
329
375
|
* @example
|
|
330
376
|
* ```typescript
|
|
331
|
-
* //
|
|
332
|
-
*
|
|
333
|
-
* bsf.reset(); // Clear filter state
|
|
334
|
-
* // Continue processing from new position
|
|
377
|
+
* // Reset for new segment
|
|
378
|
+
* filter.reset();
|
|
335
379
|
* ```
|
|
380
|
+
*
|
|
381
|
+
* @see {@link flush} For reset with packet retrieval
|
|
336
382
|
*/
|
|
337
383
|
reset() {
|
|
338
384
|
if (this.isDisposed) {
|
|
@@ -341,18 +387,17 @@ export class BitStreamFilterAPI {
|
|
|
341
387
|
this.ctx.flush();
|
|
342
388
|
}
|
|
343
389
|
/**
|
|
344
|
-
* Dispose of
|
|
390
|
+
* Dispose of filter and free resources.
|
|
345
391
|
*
|
|
346
|
-
*
|
|
347
|
-
*
|
|
392
|
+
* Releases filter context and marks as disposed.
|
|
393
|
+
* Safe to call multiple times.
|
|
348
394
|
*
|
|
349
395
|
* @example
|
|
350
396
|
* ```typescript
|
|
351
|
-
*
|
|
352
|
-
* using bsf = await BitStreamFilterAPI.create('h264_mp4toannexb', stream);
|
|
353
|
-
* // ... use filter
|
|
354
|
-
* } // Automatically disposed when leaving scope
|
|
397
|
+
* filter.dispose();
|
|
355
398
|
* ```
|
|
399
|
+
*
|
|
400
|
+
* @see {@link Symbol.dispose} For automatic cleanup
|
|
356
401
|
*/
|
|
357
402
|
dispose() {
|
|
358
403
|
if (!this.isDisposed) {
|
|
@@ -361,7 +406,20 @@ export class BitStreamFilterAPI {
|
|
|
361
406
|
}
|
|
362
407
|
}
|
|
363
408
|
/**
|
|
364
|
-
*
|
|
409
|
+
* Dispose of filter.
|
|
410
|
+
*
|
|
411
|
+
* Implements Disposable interface for automatic cleanup.
|
|
412
|
+
* Equivalent to calling dispose().
|
|
413
|
+
*
|
|
414
|
+
* @example
|
|
415
|
+
* ```typescript
|
|
416
|
+
* {
|
|
417
|
+
* using filter = BitStreamFilterAPI.create('h264_mp4toannexb', stream);
|
|
418
|
+
* // Use filter...
|
|
419
|
+
* } // Automatically disposed
|
|
420
|
+
* ```
|
|
421
|
+
*
|
|
422
|
+
* @see {@link dispose} For manual cleanup
|
|
365
423
|
*/
|
|
366
424
|
[Symbol.dispose]() {
|
|
367
425
|
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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"}
|