node-av 3.1.3 → 4.0.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 +65 -52
- package/binding.gyp +4 -0
- package/dist/api/audio-frame-buffer.d.ts +201 -0
- package/dist/api/audio-frame-buffer.js +275 -0
- package/dist/api/audio-frame-buffer.js.map +1 -0
- package/dist/api/bitstream-filter.d.ts +319 -78
- package/dist/api/bitstream-filter.js +680 -151
- package/dist/api/bitstream-filter.js.map +1 -1
- package/dist/api/constants.d.ts +44 -0
- package/dist/api/constants.js +45 -0
- package/dist/api/constants.js.map +1 -0
- package/dist/api/data/test_av1.ivf +0 -0
- package/dist/api/data/test_mjpeg.mjpeg +0 -0
- package/dist/api/data/test_vp8.ivf +0 -0
- package/dist/api/data/test_vp9.ivf +0 -0
- package/dist/api/decoder.d.ts +279 -17
- package/dist/api/decoder.js +998 -209
- package/dist/api/decoder.js.map +1 -1
- package/dist/api/{media-input.d.ts → demuxer.d.ts} +294 -44
- package/dist/api/demuxer.js +1968 -0
- package/dist/api/demuxer.js.map +1 -0
- package/dist/api/encoder.d.ts +308 -50
- package/dist/api/encoder.js +1133 -111
- package/dist/api/encoder.js.map +1 -1
- package/dist/api/filter-presets.d.ts +12 -5
- package/dist/api/filter-presets.js +21 -7
- package/dist/api/filter-presets.js.map +1 -1
- package/dist/api/filter.d.ts +406 -40
- package/dist/api/filter.js +966 -139
- package/dist/api/filter.js.map +1 -1
- package/dist/api/{fmp4.d.ts → fmp4-stream.d.ts} +141 -140
- package/dist/api/fmp4-stream.js +539 -0
- package/dist/api/fmp4-stream.js.map +1 -0
- package/dist/api/hardware.d.ts +58 -6
- package/dist/api/hardware.js +127 -11
- package/dist/api/hardware.js.map +1 -1
- package/dist/api/index.d.ts +6 -4
- package/dist/api/index.js +14 -8
- package/dist/api/index.js.map +1 -1
- package/dist/api/io-stream.d.ts +3 -3
- package/dist/api/io-stream.js +5 -4
- package/dist/api/io-stream.js.map +1 -1
- package/dist/api/{media-output.d.ts → muxer.d.ts} +274 -60
- package/dist/api/muxer.js +1934 -0
- package/dist/api/muxer.js.map +1 -0
- package/dist/api/pipeline.d.ts +77 -29
- package/dist/api/pipeline.js +435 -425
- package/dist/api/pipeline.js.map +1 -1
- package/dist/api/rtp-stream.d.ts +312 -0
- package/dist/api/rtp-stream.js +630 -0
- package/dist/api/rtp-stream.js.map +1 -0
- package/dist/api/types.d.ts +476 -55
- package/dist/api/utilities/async-queue.d.ts +91 -0
- package/dist/api/utilities/async-queue.js +162 -0
- package/dist/api/utilities/async-queue.js.map +1 -0
- package/dist/api/utilities/audio-sample.d.ts +1 -1
- package/dist/api/utilities/image.d.ts +1 -1
- package/dist/api/utilities/index.d.ts +2 -0
- package/dist/api/utilities/index.js +4 -0
- package/dist/api/utilities/index.js.map +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/scheduler.d.ts +169 -0
- package/dist/api/utilities/scheduler.js +136 -0
- package/dist/api/utilities/scheduler.js.map +1 -0
- package/dist/api/utilities/streaming.d.ts +74 -15
- package/dist/api/utilities/streaming.js +170 -12
- package/dist/api/utilities/streaming.js.map +1 -1
- package/dist/api/utilities/timestamp.d.ts +1 -1
- package/dist/api/webrtc-stream.d.ts +288 -0
- package/dist/api/webrtc-stream.js +440 -0
- package/dist/api/webrtc-stream.js.map +1 -0
- package/dist/constants/constants.d.ts +51 -1
- package/dist/constants/constants.js +47 -1
- package/dist/constants/constants.js.map +1 -1
- package/dist/constants/encoders.d.ts +2 -1
- package/dist/constants/encoders.js +4 -3
- package/dist/constants/encoders.js.map +1 -1
- package/dist/constants/hardware.d.ts +26 -0
- package/dist/constants/hardware.js +27 -0
- package/dist/constants/hardware.js.map +1 -0
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.js +1 -0
- package/dist/constants/index.js.map +1 -1
- package/dist/lib/binding.d.ts +19 -8
- package/dist/lib/binding.js.map +1 -1
- package/dist/lib/codec-context.d.ts +87 -0
- package/dist/lib/codec-context.js +125 -4
- package/dist/lib/codec-context.js.map +1 -1
- package/dist/lib/codec-parameters.d.ts +183 -1
- package/dist/lib/codec-parameters.js +209 -0
- package/dist/lib/codec-parameters.js.map +1 -1
- package/dist/lib/codec-parser.d.ts +23 -0
- package/dist/lib/codec-parser.js +25 -0
- package/dist/lib/codec-parser.js.map +1 -1
- package/dist/lib/codec.d.ts +26 -4
- package/dist/lib/codec.js +35 -0
- package/dist/lib/codec.js.map +1 -1
- package/dist/lib/dictionary.js +1 -0
- package/dist/lib/dictionary.js.map +1 -1
- package/dist/lib/error.js +1 -1
- package/dist/lib/error.js.map +1 -1
- package/dist/lib/filter-context.d.ts +52 -11
- package/dist/lib/filter-context.js +56 -12
- package/dist/lib/filter-context.js.map +1 -1
- package/dist/lib/filter-graph.d.ts +9 -0
- package/dist/lib/filter-graph.js +13 -0
- package/dist/lib/filter-graph.js.map +1 -1
- package/dist/lib/filter.d.ts +21 -0
- package/dist/lib/filter.js +28 -0
- package/dist/lib/filter.js.map +1 -1
- package/dist/lib/format-context.d.ts +48 -14
- package/dist/lib/format-context.js +76 -7
- package/dist/lib/format-context.js.map +1 -1
- package/dist/lib/frame.d.ts +168 -0
- package/dist/lib/frame.js +212 -0
- package/dist/lib/frame.js.map +1 -1
- package/dist/lib/hardware-device-context.d.ts +3 -2
- package/dist/lib/hardware-device-context.js.map +1 -1
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.js +2 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/input-format.d.ts +21 -0
- package/dist/lib/input-format.js +42 -2
- package/dist/lib/input-format.js.map +1 -1
- package/dist/lib/native-types.d.ts +48 -26
- package/dist/lib/option.d.ts +25 -13
- package/dist/lib/option.js +28 -0
- package/dist/lib/option.js.map +1 -1
- package/dist/lib/output-format.d.ts +22 -1
- package/dist/lib/output-format.js +28 -0
- package/dist/lib/output-format.js.map +1 -1
- package/dist/lib/packet.d.ts +35 -0
- package/dist/lib/packet.js +52 -2
- package/dist/lib/packet.js.map +1 -1
- package/dist/lib/stream.d.ts +126 -0
- package/dist/lib/stream.js +188 -5
- package/dist/lib/stream.js.map +1 -1
- package/dist/lib/sync-queue.d.ts +179 -0
- package/dist/lib/sync-queue.js +197 -0
- package/dist/lib/sync-queue.js.map +1 -0
- package/dist/lib/types.d.ts +27 -1
- package/dist/lib/utilities.d.ts +281 -53
- package/dist/lib/utilities.js +298 -55
- package/dist/lib/utilities.js.map +1 -1
- package/package.json +20 -19
- package/dist/api/fmp4.js +0 -710
- package/dist/api/fmp4.js.map +0 -1
- package/dist/api/media-input.js +0 -1075
- package/dist/api/media-input.js.map +0 -1
- package/dist/api/media-output.js +0 -1040
- package/dist/api/media-output.js.map +0 -1
- package/dist/api/webrtc.d.ts +0 -664
- package/dist/api/webrtc.js +0 -1132
- package/dist/api/webrtc.js.map +0 -1
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
import { MediaStreamTrack, RTCIceCandidate, RTCPeerConnection, RTCRtpCodecParameters, RTCSessionDescription } from 'werift';
|
|
2
|
+
import { AV_CODEC_ID_AV1, AV_CODEC_ID_H264, AV_CODEC_ID_HEVC, AV_CODEC_ID_OPUS, AV_CODEC_ID_PCM_ALAW, AV_CODEC_ID_PCM_MULAW, AV_CODEC_ID_VP8, AV_CODEC_ID_VP9, } from '../constants/constants.js';
|
|
3
|
+
import { RTPStream } from './rtp-stream.js';
|
|
4
|
+
/**
|
|
5
|
+
* Complete WebRTC session management with werift integration.
|
|
6
|
+
*
|
|
7
|
+
* Provides end-to-end WebRTC streaming with automatic SDP negotiation,
|
|
8
|
+
* ICE candidate handling, and peer connection management.
|
|
9
|
+
* Built on top of {@link RTPStream} for generic RTP streaming with WebRTC-specific
|
|
10
|
+
* protocol details handled automatically.
|
|
11
|
+
* Integrates with werift library for RTCPeerConnection and media track handling.
|
|
12
|
+
* Ideal for building complete WebRTC streaming applications with minimal code.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { WebRTCStream } from 'node-av/api';
|
|
17
|
+
*
|
|
18
|
+
* // Create session from media source
|
|
19
|
+
* const session = await WebRTCStream.create('rtsp://camera.local/stream', {
|
|
20
|
+
* mtu: 1200,
|
|
21
|
+
* hardware: 'auto',
|
|
22
|
+
* iceServers: [{ urls: 'stun:stun.l.google.com:19302' }],
|
|
23
|
+
* onIceCandidate: (candidate) => {
|
|
24
|
+
* sendToClient({ type: 'candidate', value: candidate });
|
|
25
|
+
* }
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* // Process SDP offer from client
|
|
29
|
+
* const answer = await session.setOffer(clientOffer);
|
|
30
|
+
* sendToClient({ type: 'answer', value: answer });
|
|
31
|
+
*
|
|
32
|
+
* // Start streaming
|
|
33
|
+
* await session.start();
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* // Complete WebSocket signaling server
|
|
39
|
+
* import { WebSocket } from 'ws';
|
|
40
|
+
*
|
|
41
|
+
* ws.on('message', async (data) => {
|
|
42
|
+
* const msg = JSON.parse(data);
|
|
43
|
+
*
|
|
44
|
+
* if (msg.type === 'offer') {
|
|
45
|
+
* const session = await WebRTCStream.create(msg.url, {
|
|
46
|
+
* hardware: 'auto',
|
|
47
|
+
* onIceCandidate: (candidate) => {
|
|
48
|
+
* ws.send(JSON.stringify({ type: 'candidate', value: candidate }));
|
|
49
|
+
* }
|
|
50
|
+
* });
|
|
51
|
+
*
|
|
52
|
+
* const answer = await session.setOffer(msg.value);
|
|
53
|
+
* ws.send(JSON.stringify({ type: 'answer', value: answer }));
|
|
54
|
+
*
|
|
55
|
+
* await session.start();
|
|
56
|
+
* } else if (msg.type === 'candidate') {
|
|
57
|
+
* session.addIceCandidate(msg.value);
|
|
58
|
+
* }
|
|
59
|
+
* });
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* @see {@link RTPStream} For library-agnostic RTP streaming
|
|
63
|
+
* @see {@link Demuxer} For input media handling
|
|
64
|
+
* @see {@link HardwareContext} For GPU acceleration
|
|
65
|
+
*/
|
|
66
|
+
export class WebRTCStream {
|
|
67
|
+
stream;
|
|
68
|
+
pc = null;
|
|
69
|
+
videoTrack = null;
|
|
70
|
+
audioTrack = null;
|
|
71
|
+
options;
|
|
72
|
+
pendingIceCandidates = [];
|
|
73
|
+
/**
|
|
74
|
+
* @param options - Session configuration options
|
|
75
|
+
*
|
|
76
|
+
* Use {@link create} factory method
|
|
77
|
+
*
|
|
78
|
+
* @internal
|
|
79
|
+
*/
|
|
80
|
+
constructor(options) {
|
|
81
|
+
this.options = {
|
|
82
|
+
onIceCandidate: options.onIceCandidate ?? (() => { }),
|
|
83
|
+
onClose: options.onClose ?? (() => { }),
|
|
84
|
+
iceServers: options.iceServers ?? [],
|
|
85
|
+
...options,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Create a WebRTC session from a media source.
|
|
90
|
+
*
|
|
91
|
+
* Opens the input media, creates internal streaming components, and prepares
|
|
92
|
+
* for WebRTC peer connection negotiation. Does not start streaming yet.
|
|
93
|
+
* Call {@link setOffer} to negotiate SDP and {@link start} to begin streaming.
|
|
94
|
+
*
|
|
95
|
+
* @param inputUrl - Media source URL (RTSP, file path, HTTP, etc.)
|
|
96
|
+
*
|
|
97
|
+
* @param options - Session configuration options
|
|
98
|
+
*
|
|
99
|
+
* @returns Configured WebRTC session instance
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```typescript
|
|
103
|
+
* const session = await WebRTCStream.create('rtsp://camera.local/stream', {
|
|
104
|
+
* mtu: 1200,
|
|
105
|
+
* hardware: 'auto',
|
|
106
|
+
* iceServers: [{ urls: 'stun:stun.l.google.com:19302' }]
|
|
107
|
+
* });
|
|
108
|
+
* ```
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```typescript
|
|
112
|
+
* // Session from file with hardware acceleration
|
|
113
|
+
* const session = await WebRTCStream.create('video.mp4', {
|
|
114
|
+
* hardware: {
|
|
115
|
+
* deviceType: AV_HWDEVICE_TYPE_CUDA
|
|
116
|
+
* }
|
|
117
|
+
* });
|
|
118
|
+
* ```
|
|
119
|
+
*/
|
|
120
|
+
static create(inputUrl, options = {}) {
|
|
121
|
+
const session = new WebRTCStream(options);
|
|
122
|
+
// Create stream with WebRTC-specific codec support
|
|
123
|
+
session.stream = RTPStream.create(inputUrl, {
|
|
124
|
+
video: options.video,
|
|
125
|
+
audio: options.audio,
|
|
126
|
+
hardware: options.hardware,
|
|
127
|
+
inputOptions: options.inputOptions,
|
|
128
|
+
supportedVideoCodecs: [AV_CODEC_ID_H264, AV_CODEC_ID_HEVC, AV_CODEC_ID_VP8, AV_CODEC_ID_VP9, AV_CODEC_ID_AV1],
|
|
129
|
+
supportedAudioCodecs: [AV_CODEC_ID_OPUS, AV_CODEC_ID_PCM_ALAW, AV_CODEC_ID_PCM_MULAW],
|
|
130
|
+
onVideoPacket: (rtp) => {
|
|
131
|
+
session.videoTrack?.writeRtp(rtp);
|
|
132
|
+
},
|
|
133
|
+
onAudioPacket: (rtp) => {
|
|
134
|
+
session.audioTrack?.writeRtp(rtp);
|
|
135
|
+
},
|
|
136
|
+
onClose: (error) => {
|
|
137
|
+
session.options.onClose?.(error);
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
return session;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Start streaming media to WebRTC peer connection.
|
|
144
|
+
*
|
|
145
|
+
* Begins the media processing pipeline, reading packets from input,
|
|
146
|
+
* transcoding if necessary, and sending RTP packets to media tracks.
|
|
147
|
+
* Note: The stream is automatically started by {@link setOffer}, so calling
|
|
148
|
+
* this method explicitly is optional. This method is provided for cases where
|
|
149
|
+
* you need explicit control over when streaming begins.
|
|
150
|
+
*
|
|
151
|
+
* @returns Promise that resolves when streaming completes
|
|
152
|
+
*
|
|
153
|
+
* @throws {FFmpegError} If transcoding or muxing fails
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```typescript
|
|
157
|
+
* const session = await WebRTCStream.create('input.mp4');
|
|
158
|
+
* session.onIceCandidate = (c) => sendToRemote(c);
|
|
159
|
+
*
|
|
160
|
+
* const answer = await session.setOffer(remoteOffer);
|
|
161
|
+
* sendToRemote(answer);
|
|
162
|
+
* // Stream is already started by setOffer
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
165
|
+
async start() {
|
|
166
|
+
await this.stream.start();
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Stop streaming gracefully and clean up all resources.
|
|
170
|
+
*
|
|
171
|
+
* Stops the stream, closes peer connection, and releases all resources.
|
|
172
|
+
* Safe to call multiple times. After stopping, you can call start() again
|
|
173
|
+
* to restart the session.
|
|
174
|
+
*
|
|
175
|
+
* @example
|
|
176
|
+
* ```typescript
|
|
177
|
+
* const session = await WebRTCStream.create('input.mp4');
|
|
178
|
+
* await session.start();
|
|
179
|
+
*
|
|
180
|
+
* // Stop after 10 seconds
|
|
181
|
+
* setTimeout(async () => await session.stop(), 10000);
|
|
182
|
+
* ```
|
|
183
|
+
*/
|
|
184
|
+
async stop() {
|
|
185
|
+
await this.stream.stop();
|
|
186
|
+
this.pc?.close();
|
|
187
|
+
this.videoTrack = null;
|
|
188
|
+
this.audioTrack = null;
|
|
189
|
+
this.pc = null;
|
|
190
|
+
this.pendingIceCandidates = [];
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Get detected codec information.
|
|
194
|
+
*
|
|
195
|
+
* Returns RTP codec parameters and FFmpeg codec IDs for video and audio.
|
|
196
|
+
* Useful for inspecting what codecs will be used in the WebRTC session.
|
|
197
|
+
* The input is automatically opened during {@link create}, so codecs can be
|
|
198
|
+
* detected immediately after session creation.
|
|
199
|
+
*
|
|
200
|
+
* @returns Codec configuration for video and audio streams
|
|
201
|
+
*
|
|
202
|
+
* @example
|
|
203
|
+
* ```typescript
|
|
204
|
+
* const session = await WebRTCStream.create('input.mp4');
|
|
205
|
+
* const codecs = session.getCodecs();
|
|
206
|
+
*
|
|
207
|
+
* console.log('Video:', codecs.video.mimeType);
|
|
208
|
+
* console.log('Audio:', codecs.audio?.mimeType);
|
|
209
|
+
* ```
|
|
210
|
+
*/
|
|
211
|
+
getCodecs() {
|
|
212
|
+
const input = this.stream.getInput();
|
|
213
|
+
if (!input) {
|
|
214
|
+
return {
|
|
215
|
+
video: undefined,
|
|
216
|
+
audio: undefined,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
const videoStream = input.video();
|
|
220
|
+
const audioStream = input.audio();
|
|
221
|
+
return {
|
|
222
|
+
video: this.getVideoCodecConfig(videoStream?.codecpar.codecId),
|
|
223
|
+
audio: this.getAudioCodecConfig(audioStream?.codecpar.codecId),
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Process SDP offer from remote peer and generate SDP answer.
|
|
228
|
+
*
|
|
229
|
+
* Creates RTCPeerConnection with detected codecs, sets up media tracks,
|
|
230
|
+
* processes the remote SDP offer, and generates a local SDP answer.
|
|
231
|
+
* Also configures ICE candidate handling via {@link onIceCandidate} callback.
|
|
232
|
+
* Must be called before {@link start}.
|
|
233
|
+
*
|
|
234
|
+
* @param offerSdp - SDP offer string from remote WebRTC peer
|
|
235
|
+
*
|
|
236
|
+
* @returns SDP answer string to send back to remote peer
|
|
237
|
+
*
|
|
238
|
+
* @example
|
|
239
|
+
* ```typescript
|
|
240
|
+
* const session = await WebRTCStream.create('input.mp4');
|
|
241
|
+
*
|
|
242
|
+
* // Setup ICE candidate handler first
|
|
243
|
+
* session.onIceCandidate = (candidate) => {
|
|
244
|
+
* sendToRemote({ type: 'candidate', value: candidate });
|
|
245
|
+
* };
|
|
246
|
+
*
|
|
247
|
+
* // Process offer and send answer
|
|
248
|
+
* const answer = await session.setOffer(remoteOffer);
|
|
249
|
+
* sendToRemote({ type: 'answer', value: answer });
|
|
250
|
+
*
|
|
251
|
+
* // Start streaming
|
|
252
|
+
* await session.start();
|
|
253
|
+
* ```
|
|
254
|
+
*/
|
|
255
|
+
async setOffer(offerSdp) {
|
|
256
|
+
const codecs = this.getCodecs();
|
|
257
|
+
const videoConfig = codecs.video;
|
|
258
|
+
delete videoConfig.codecId;
|
|
259
|
+
const audioConfig = codecs.audio ?? {
|
|
260
|
+
mimeType: 'audio/opus',
|
|
261
|
+
clockRate: 48000,
|
|
262
|
+
channels: 2,
|
|
263
|
+
payloadType: 111,
|
|
264
|
+
};
|
|
265
|
+
delete audioConfig.codecId;
|
|
266
|
+
// Create PeerConnection with detected codecs
|
|
267
|
+
const codecParams = {
|
|
268
|
+
video: [
|
|
269
|
+
new RTCRtpCodecParameters({
|
|
270
|
+
...videoConfig,
|
|
271
|
+
}),
|
|
272
|
+
],
|
|
273
|
+
audio: [
|
|
274
|
+
new RTCRtpCodecParameters({
|
|
275
|
+
...audioConfig,
|
|
276
|
+
}),
|
|
277
|
+
],
|
|
278
|
+
};
|
|
279
|
+
this.pc = new RTCPeerConnection({
|
|
280
|
+
codecs: codecParams,
|
|
281
|
+
iceServers: this.options.iceServers,
|
|
282
|
+
});
|
|
283
|
+
// Setup ICE candidate handling
|
|
284
|
+
this.pc.onIceCandidate.subscribe((candidate) => {
|
|
285
|
+
if (candidate?.candidate && this.options.onIceCandidate) {
|
|
286
|
+
this.options.onIceCandidate(candidate.candidate);
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
// Setup tracks
|
|
290
|
+
this.pc.onRemoteTransceiverAdded.subscribe(async (transceiver) => {
|
|
291
|
+
if (transceiver.kind === 'video') {
|
|
292
|
+
this.videoTrack = new MediaStreamTrack({ kind: 'video' });
|
|
293
|
+
transceiver.sender.replaceTrack(this.videoTrack);
|
|
294
|
+
transceiver.setDirection('sendonly');
|
|
295
|
+
}
|
|
296
|
+
else if (transceiver.kind === 'audio' && this.audioTrack === null) {
|
|
297
|
+
this.audioTrack = new MediaStreamTrack({ kind: 'audio' });
|
|
298
|
+
transceiver.sender.replaceTrack(this.audioTrack);
|
|
299
|
+
transceiver.setDirection('sendonly');
|
|
300
|
+
}
|
|
301
|
+
else if (transceiver.kind === 'audio') {
|
|
302
|
+
// Backchannel
|
|
303
|
+
const [track] = await transceiver.onTrack.asPromise();
|
|
304
|
+
const input = this.stream.getInput();
|
|
305
|
+
const ctx = input?.getFormatContext();
|
|
306
|
+
const streams = ctx?.getRTSPStreamInfo();
|
|
307
|
+
const backchannel = streams?.find((s) => s.direction === 'sendonly' && s.mediaType === 'audio');
|
|
308
|
+
track.onReceiveRtp.subscribe(async (rtp) => {
|
|
309
|
+
if (backchannel && this.stream.isStreamActive) {
|
|
310
|
+
try {
|
|
311
|
+
await ctx?.sendRTSPPacket(backchannel.streamIndex, rtp.serialize());
|
|
312
|
+
}
|
|
313
|
+
catch {
|
|
314
|
+
// Ignore send errors
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
});
|
|
320
|
+
// Set remote description and create answer
|
|
321
|
+
await this.pc.setRemoteDescription(new RTCSessionDescription(offerSdp, 'offer'));
|
|
322
|
+
const answer = await this.pc.createAnswer();
|
|
323
|
+
this.pc.setLocalDescription(answer);
|
|
324
|
+
// Apply any buffered ICE candidates now that remote description is set
|
|
325
|
+
if (this.pendingIceCandidates.length > 0) {
|
|
326
|
+
for (const candidate of this.pendingIceCandidates) {
|
|
327
|
+
this.pc.addIceCandidate(new RTCIceCandidate({ candidate }));
|
|
328
|
+
}
|
|
329
|
+
this.pendingIceCandidates = [];
|
|
330
|
+
}
|
|
331
|
+
return this.pc.localDescription?.sdp ?? '';
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Add ICE candidate from remote peer.
|
|
335
|
+
*
|
|
336
|
+
* Processes ICE candidates received from the remote peer via signaling channel.
|
|
337
|
+
* Should be called whenever a new candidate message arrives from remote peer.
|
|
338
|
+
* Can be called multiple times as candidates are discovered.
|
|
339
|
+
*
|
|
340
|
+
* Supports ICE trickling: If called before {@link setOffer}, candidates are buffered
|
|
341
|
+
* and applied automatically once the remote description is set.
|
|
342
|
+
*
|
|
343
|
+
* @param candidate - ICE candidate string from remote peer
|
|
344
|
+
*
|
|
345
|
+
* @example
|
|
346
|
+
* ```typescript
|
|
347
|
+
* // In signaling message handler
|
|
348
|
+
* if (msg.type === 'candidate') {
|
|
349
|
+
* session.addIceCandidate(msg.value);
|
|
350
|
+
* }
|
|
351
|
+
* ```
|
|
352
|
+
*/
|
|
353
|
+
addIceCandidate(candidate) {
|
|
354
|
+
// Buffer candidates if peer connection not ready yet (ICE trickling)
|
|
355
|
+
if (!this.pc?.remoteDescription) {
|
|
356
|
+
this.pendingIceCandidates.push(candidate);
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
// Apply candidate immediately if peer connection is ready
|
|
360
|
+
this.pc.addIceCandidate(new RTCIceCandidate({ candidate }));
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Get video codec configuration from input stream.
|
|
364
|
+
*
|
|
365
|
+
* @param codecId - FFmpeg codec ID
|
|
366
|
+
*
|
|
367
|
+
* @returns RTP codec parameters with codec ID or undefined if unsupported
|
|
368
|
+
*
|
|
369
|
+
* @internal
|
|
370
|
+
*/
|
|
371
|
+
getVideoCodecConfig(codecId) {
|
|
372
|
+
let mimeType;
|
|
373
|
+
const clockRate = 90000;
|
|
374
|
+
let payloadType;
|
|
375
|
+
switch (codecId) {
|
|
376
|
+
case AV_CODEC_ID_H264:
|
|
377
|
+
mimeType = 'video/H264';
|
|
378
|
+
payloadType = 96;
|
|
379
|
+
break;
|
|
380
|
+
case AV_CODEC_ID_HEVC:
|
|
381
|
+
mimeType = 'video/H265';
|
|
382
|
+
payloadType = 96;
|
|
383
|
+
break;
|
|
384
|
+
case AV_CODEC_ID_VP8:
|
|
385
|
+
mimeType = 'video/VP8';
|
|
386
|
+
payloadType = 96;
|
|
387
|
+
break;
|
|
388
|
+
case AV_CODEC_ID_VP9:
|
|
389
|
+
mimeType = 'video/VP9';
|
|
390
|
+
payloadType = 98;
|
|
391
|
+
break;
|
|
392
|
+
case AV_CODEC_ID_AV1:
|
|
393
|
+
mimeType = 'video/AV1';
|
|
394
|
+
payloadType = 98;
|
|
395
|
+
break;
|
|
396
|
+
default:
|
|
397
|
+
return undefined;
|
|
398
|
+
}
|
|
399
|
+
return { mimeType, clockRate, payloadType, codecId };
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Get audio codec configuration from input stream.
|
|
403
|
+
*
|
|
404
|
+
* @param codecId - FFmpeg codec ID
|
|
405
|
+
*
|
|
406
|
+
* @returns RTP codec parameters with codec ID or undefined if unsupported
|
|
407
|
+
*
|
|
408
|
+
* @internal
|
|
409
|
+
*/
|
|
410
|
+
getAudioCodecConfig(codecId) {
|
|
411
|
+
let mimeType;
|
|
412
|
+
let clockRate;
|
|
413
|
+
let channels;
|
|
414
|
+
let payloadType;
|
|
415
|
+
switch (codecId) {
|
|
416
|
+
case AV_CODEC_ID_OPUS:
|
|
417
|
+
mimeType = 'audio/opus';
|
|
418
|
+
clockRate = 48000;
|
|
419
|
+
channels = 2;
|
|
420
|
+
payloadType = 111;
|
|
421
|
+
break;
|
|
422
|
+
case AV_CODEC_ID_PCM_ALAW:
|
|
423
|
+
mimeType = 'audio/PCMA';
|
|
424
|
+
clockRate = 8000;
|
|
425
|
+
channels = 1;
|
|
426
|
+
payloadType = 8;
|
|
427
|
+
break;
|
|
428
|
+
case AV_CODEC_ID_PCM_MULAW:
|
|
429
|
+
mimeType = 'audio/PCMU';
|
|
430
|
+
clockRate = 8000;
|
|
431
|
+
channels = 1;
|
|
432
|
+
payloadType = 0;
|
|
433
|
+
break;
|
|
434
|
+
default:
|
|
435
|
+
return undefined;
|
|
436
|
+
}
|
|
437
|
+
return { mimeType, clockRate, channels, payloadType, codecId };
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
//# sourceMappingURL=webrtc-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webrtc-stream.js","sourceRoot":"","sources":["../../src/api/webrtc-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Generated from FFmpeg headers
|
|
4
4
|
* DO NOT EDIT MANUALLY
|
|
5
5
|
*/
|
|
6
|
+
import type { IRational } from '../lib/types.js';
|
|
6
7
|
declare const __ffmpeg_brand: unique symbol;
|
|
7
8
|
export type AVMediaType = number & {
|
|
8
9
|
readonly [__ffmpeg_brand]: 'AVMediaType';
|
|
@@ -27,6 +28,12 @@ export type AVCodecConfig = number & {
|
|
|
27
28
|
};
|
|
28
29
|
export declare const AV_CODEC_CONFIG_PIX_FORMAT: AVCodecConfig;
|
|
29
30
|
export declare const AV_CODEC_CONFIG_FRAME_RATE: AVCodecConfig;
|
|
31
|
+
export declare const AV_CODEC_CONFIG_SAMPLE_RATE: AVCodecConfig;
|
|
32
|
+
export declare const AV_CODEC_CONFIG_SAMPLE_FORMAT: AVCodecConfig;
|
|
33
|
+
export declare const AV_CODEC_CONFIG_CHANNEL_LAYOUT: AVCodecConfig;
|
|
34
|
+
export declare const AV_CODEC_CONFIG_COLOR_RANGE: AVCodecConfig;
|
|
35
|
+
export declare const AV_CODEC_CONFIG_COLOR_SPACE: AVCodecConfig;
|
|
36
|
+
export declare const AV_CODEC_CONFIG_ALPHA_MODE: AVCodecConfig;
|
|
30
37
|
export type AVPictureStructure = number & {
|
|
31
38
|
readonly [__ffmpeg_brand]: 'AVPictureStructure';
|
|
32
39
|
};
|
|
@@ -804,6 +811,7 @@ export type AVChannelOrder = number & {
|
|
|
804
811
|
export declare const AV_CHANNEL_ORDER_UNSPEC: AVChannelOrder;
|
|
805
812
|
export declare const AV_CHANNEL_ORDER_NATIVE: AVChannelOrder;
|
|
806
813
|
export declare const AV_CHANNEL_ORDER_CUSTOM: AVChannelOrder;
|
|
814
|
+
export declare const AV_CHANNEL_ORDER_AMBISONIC: AVChannelOrder;
|
|
807
815
|
export type AVMatrixEncoding = number & {
|
|
808
816
|
readonly [__ffmpeg_brand]: 'AVMatrixEncoding';
|
|
809
817
|
};
|
|
@@ -924,7 +932,6 @@ export declare const AV_HWDEVICE_TYPE_D3D12VA: AVHWDeviceType;
|
|
|
924
932
|
export declare const AV_HWDEVICE_TYPE_AMF: AVHWDeviceType;
|
|
925
933
|
export declare const AV_HWDEVICE_TYPE_OHCODEC: AVHWDeviceType;
|
|
926
934
|
export declare const AV_HWDEVICE_TYPE_RKMPP: AVHWDeviceType;
|
|
927
|
-
export declare const AV_HWDEVICE_TYPE_NB: AVHWDeviceType;
|
|
928
935
|
export type AVHWFrameTransferDirection = number & {
|
|
929
936
|
readonly [__ffmpeg_brand]: 'AVHWFrameTransferDirection';
|
|
930
937
|
};
|
|
@@ -974,6 +981,7 @@ export declare const AV_ROUND_INF: AVRounding;
|
|
|
974
981
|
export declare const AV_ROUND_DOWN: AVRounding;
|
|
975
982
|
export declare const AV_ROUND_UP: AVRounding;
|
|
976
983
|
export declare const AV_ROUND_NEAR_INF: AVRounding;
|
|
984
|
+
export declare const AV_ROUND_PASS_MINMAX: AVRounding;
|
|
977
985
|
export type AVOptionType = number & {
|
|
978
986
|
readonly [__ffmpeg_brand]: 'AVOptionType';
|
|
979
987
|
};
|
|
@@ -1353,6 +1361,8 @@ export declare const AVCOL_PRI_SMPTE431: AVColorPrimaries;
|
|
|
1353
1361
|
export declare const AVCOL_PRI_SMPTE432: AVColorPrimaries;
|
|
1354
1362
|
export declare const AVCOL_PRI_EBU3213: AVColorPrimaries;
|
|
1355
1363
|
export declare const AVCOL_PRI_NB: AVColorPrimaries;
|
|
1364
|
+
export declare const AVCOL_PRI_EXT_BASE: AVColorPrimaries;
|
|
1365
|
+
export declare const AVCOL_PRI_EXT_NB: AVColorPrimaries;
|
|
1356
1366
|
export type AVColorTransferCharacteristic = number & {
|
|
1357
1367
|
readonly [__ffmpeg_brand]: 'AVColorTransferCharacteristic';
|
|
1358
1368
|
};
|
|
@@ -1376,6 +1386,8 @@ export declare const AVCOL_TRC_SMPTE2084: AVColorTransferCharacteristic;
|
|
|
1376
1386
|
export declare const AVCOL_TRC_SMPTE428: AVColorTransferCharacteristic;
|
|
1377
1387
|
export declare const AVCOL_TRC_ARIB_STD_B67: AVColorTransferCharacteristic;
|
|
1378
1388
|
export declare const AVCOL_TRC_NB: AVColorTransferCharacteristic;
|
|
1389
|
+
export declare const AVCOL_TRC_EXT_BASE: AVColorTransferCharacteristic;
|
|
1390
|
+
export declare const AVCOL_TRC_EXT_NB: AVColorTransferCharacteristic;
|
|
1379
1391
|
export type AVColorSpace = number & {
|
|
1380
1392
|
readonly [__ffmpeg_brand]: 'AVColorSpace';
|
|
1381
1393
|
};
|
|
@@ -1447,6 +1459,14 @@ export type AVStereo3DType = number & {
|
|
|
1447
1459
|
readonly [__ffmpeg_brand]: 'AVStereo3DType';
|
|
1448
1460
|
};
|
|
1449
1461
|
export declare const AV_STEREO3D_2D: AVStereo3DType;
|
|
1462
|
+
export declare const AV_STEREO3D_SIDEBYSIDE: AVStereo3DType;
|
|
1463
|
+
export declare const AV_STEREO3D_TOPBOTTOM: AVStereo3DType;
|
|
1464
|
+
export declare const AV_STEREO3D_FRAMESEQUENCE: AVStereo3DType;
|
|
1465
|
+
export declare const AV_STEREO3D_CHECKERBOARD: AVStereo3DType;
|
|
1466
|
+
export declare const AV_STEREO3D_SIDEBYSIDE_QUINCUNX: AVStereo3DType;
|
|
1467
|
+
export declare const AV_STEREO3D_LINES: AVStereo3DType;
|
|
1468
|
+
export declare const AV_STEREO3D_COLUMNS: AVStereo3DType;
|
|
1469
|
+
export declare const AV_STEREO3D_UNSPEC: AVStereo3DType;
|
|
1450
1470
|
export type AVStereo3DView = number & {
|
|
1451
1471
|
readonly [__ffmpeg_brand]: 'AVStereo3DView';
|
|
1452
1472
|
};
|
|
@@ -1504,6 +1524,13 @@ export type AVVideoHintType = number & {
|
|
|
1504
1524
|
};
|
|
1505
1525
|
export declare const AV_VIDEO_HINT_TYPE_CONSTANT: AVVideoHintType;
|
|
1506
1526
|
export declare const AV_VIDEO_HINT_TYPE_CHANGED: AVVideoHintType;
|
|
1527
|
+
export type AVBufferSrcFlag = number & {
|
|
1528
|
+
readonly [__ffmpeg_brand]: 'AVBufferSrcFlag';
|
|
1529
|
+
};
|
|
1530
|
+
export declare const AV_BUFFERSRC_FLAG_NONE: AVBufferSrcFlag;
|
|
1531
|
+
export declare const AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT: AVBufferSrcFlag;
|
|
1532
|
+
export declare const AV_BUFFERSRC_FLAG_PUSH: AVBufferSrcFlag;
|
|
1533
|
+
export declare const AV_BUFFERSRC_FLAG_KEEP_REF: AVBufferSrcFlag;
|
|
1507
1534
|
export type SwsPixelType = number & {
|
|
1508
1535
|
readonly [__ffmpeg_brand]: 'SwsPixelType';
|
|
1509
1536
|
};
|
|
@@ -2162,6 +2189,10 @@ export type AVPTSWrap = number & {
|
|
|
2162
2189
|
export declare const AV_PTS_WRAP_IGNORE: AVPTSWrap;
|
|
2163
2190
|
export declare const AV_PTS_WRAP_ADD_OFFSET: AVPTSWrap;
|
|
2164
2191
|
export declare const AV_PTS_WRAP_SUB_OFFSET: AVPTSWrap;
|
|
2192
|
+
export type AVHave = number & {
|
|
2193
|
+
readonly [__ffmpeg_brand]: 'AVHave';
|
|
2194
|
+
};
|
|
2195
|
+
export declare const AV_HAVE_BIGENDIAN: AVHave;
|
|
2165
2196
|
export type AVUTF8Flag = number & {
|
|
2166
2197
|
readonly [__ffmpeg_brand]: 'AVUTF8Flag';
|
|
2167
2198
|
};
|
|
@@ -2234,5 +2265,24 @@ export declare const AVERROR_EXPERIMENTAL: AVError;
|
|
|
2234
2265
|
export declare const AVERROR_INPUT_CHANGED: AVError;
|
|
2235
2266
|
export declare const AVERROR_OUTPUT_CHANGED: AVError;
|
|
2236
2267
|
export { AVERROR_EACCES, AVERROR_EAGAIN, AVERROR_EBUSY, AVERROR_EEXIST, AVERROR_EINVAL, AVERROR_EIO, AVERROR_EISDIR, AVERROR_EMFILE, AVERROR_ENODEV, AVERROR_ENOENT, AVERROR_ENOMEM, AVERROR_ENOSPC, AVERROR_ENOTDIR, AVERROR_EPERM, AVERROR_EPIPE, AVERROR_ERANGE, } from '../lib/error.js';
|
|
2268
|
+
export declare const AV_TIME_BASE_Q: IRational;
|
|
2237
2269
|
export declare const AV_NOPTS_VALUE = -9223372036854775808n;
|
|
2270
|
+
export declare const INT8_MIN = -128;
|
|
2271
|
+
export declare const INT8_MAX = 127;
|
|
2272
|
+
export declare const UINT8_MAX = 255;
|
|
2273
|
+
export declare const INT16_MIN = -32768;
|
|
2274
|
+
export declare const INT16_MAX = 32767;
|
|
2275
|
+
export declare const UINT16_MAX = 65535;
|
|
2276
|
+
export declare const INT32_MIN = -2147483648;
|
|
2277
|
+
export declare const INT32_MAX = 2147483647;
|
|
2278
|
+
export declare const UINT32_MAX = 4294967295;
|
|
2279
|
+
export declare const INT64_MIN = -9223372036854775808n;
|
|
2280
|
+
export declare const INT64_MAX = 9223372036854775807n;
|
|
2281
|
+
export declare const UINT64_MAX = 18446744073709551615n;
|
|
2282
|
+
export declare const INT_MIN = -2147483648;
|
|
2283
|
+
export declare const INT_MAX = 2147483647;
|
|
2284
|
+
export declare const UINT_MAX = 4294967295;
|
|
2285
|
+
export declare const LONG_MIN = -9223372036854775808n;
|
|
2286
|
+
export declare const LONG_MAX = 9223372036854775807n;
|
|
2287
|
+
export declare const ULONG_MAX = 18446744073709551615n;
|
|
2238
2288
|
export declare function cast<T>(value: number): T;
|