blob: 7db6d4fc32f0716b056e2d2244a151f7be4b8fca [file] [log] [blame]
// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
//
// API docs from [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web).
// Attributions and copyright licensing by Mozilla Contributors is licensed
// under [CC-BY-SA 2.5](https://creativecommons.org/licenses/by-sa/2.5/.
// Generated from Web IDL definitions.
@JS()
library;
import 'dart:js_interop';
import 'dom.dart';
import 'html.dart';
import 'streams.dart';
import 'webcryptoapi.dart';
typedef RTCRtpTransform = JSObject;
typedef SmallCryptoKeyID = int;
typedef CryptoKeyID = JSAny;
typedef SFrameTransformRole = String;
typedef SFrameTransformErrorEventType = String;
typedef RTCEncodedVideoFrameType = String;
extension type SFrameTransformOptions._(JSObject _) implements JSObject {
external factory SFrameTransformOptions({SFrameTransformRole role});
external set role(SFrameTransformRole value);
external SFrameTransformRole get role;
}
extension type SFrameTransform._(JSObject _) implements EventTarget, JSObject {
external factory SFrameTransform([SFrameTransformOptions options]);
external JSPromise<JSAny?> setEncryptionKey(
CryptoKey key, [
CryptoKeyID keyID,
]);
external set onerror(EventHandler value);
external EventHandler get onerror;
external ReadableStream get readable;
external WritableStream get writable;
}
extension type SFrameTransformErrorEvent._(JSObject _)
implements Event, JSObject {
external factory SFrameTransformErrorEvent(
String type,
SFrameTransformErrorEventInit eventInitDict,
);
external SFrameTransformErrorEventType get errorType;
external CryptoKeyID? get keyID;
external JSAny? get frame;
}
extension type SFrameTransformErrorEventInit._(JSObject _)
implements EventInit, JSObject {
external factory SFrameTransformErrorEventInit({
bool bubbles,
bool cancelable,
bool composed,
required SFrameTransformErrorEventType errorType,
required JSAny? frame,
CryptoKeyID? keyID,
});
external set errorType(SFrameTransformErrorEventType value);
external SFrameTransformErrorEventType get errorType;
external set frame(JSAny? value);
external JSAny? get frame;
external set keyID(CryptoKeyID? value);
external CryptoKeyID? get keyID;
}
extension type RTCEncodedVideoFrameMetadata._(JSObject _) implements JSObject {
external factory RTCEncodedVideoFrameMetadata({
int frameId,
JSArray<JSNumber> dependencies,
int width,
int height,
int spatialIndex,
int temporalIndex,
int synchronizationSource,
int payloadType,
JSArray<JSNumber> contributingSources,
int timestamp,
int rtpTimestamp,
String mimeType,
});
external set frameId(int value);
external int get frameId;
external set dependencies(JSArray<JSNumber> value);
external JSArray<JSNumber> get dependencies;
external set width(int value);
external int get width;
external set height(int value);
external int get height;
external set spatialIndex(int value);
external int get spatialIndex;
external set temporalIndex(int value);
external int get temporalIndex;
external set synchronizationSource(int value);
external int get synchronizationSource;
external set payloadType(int value);
external int get payloadType;
external set contributingSources(JSArray<JSNumber> value);
external JSArray<JSNumber> get contributingSources;
external set timestamp(int value);
external int get timestamp;
external set rtpTimestamp(int value);
external int get rtpTimestamp;
external set mimeType(String value);
external String get mimeType;
}
/// The **`RTCEncodedVideoFrame`** of the
/// [WebRTC API](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API)
/// represents an encoded video frame in the WebRTC receiver or sender pipeline,
/// which may be modified using a
/// [WebRTC Encoded Transform](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Using_Encoded_Transforms).
///
/// > **Note:** This feature is available in
/// > [_Dedicated_ Web Workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API#worker_types).
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCEncodedVideoFrame).
extension type RTCEncodedVideoFrame._(JSObject _) implements JSObject {
/// The **`getMetadata()`** method of the [RTCEncodedVideoFrame] interface
/// returns an object containing the metadata associated with the frame.
///
/// This includes information about the frame, including its size, video
/// encoding, other frames needed to construct a full image, timestamp, and
/// other information.
external RTCEncodedVideoFrameMetadata getMetadata();
external RTCEncodedVideoFrameType get type;
external set data(JSArrayBuffer value);
external JSArrayBuffer get data;
}
extension type RTCEncodedAudioFrameMetadata._(JSObject _) implements JSObject {
external factory RTCEncodedAudioFrameMetadata({
int synchronizationSource,
int payloadType,
JSArray<JSNumber> contributingSources,
int sequenceNumber,
int rtpTimestamp,
String mimeType,
});
external set synchronizationSource(int value);
external int get synchronizationSource;
external set payloadType(int value);
external int get payloadType;
external set contributingSources(JSArray<JSNumber> value);
external JSArray<JSNumber> get contributingSources;
external set sequenceNumber(int value);
external int get sequenceNumber;
external set rtpTimestamp(int value);
external int get rtpTimestamp;
external set mimeType(String value);
external String get mimeType;
}
/// The **`RTCEncodedAudioFrame`** of the
/// [WebRTC API](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API)
/// represents an encoded audio frame in the WebRTC receiver or sender pipeline,
/// which may be modified using a
/// [WebRTC Encoded Transform](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Using_Encoded_Transforms).
///
/// The interface provides methods and properties to get metadata about the
/// frame, allowing its format and order in the sequence of frames to be
/// determined.
/// The `data` property gives access to the encoded frame data as a buffer,
/// which might be encrypted, or otherwise modified by a transform.
///
/// > **Note:** This feature is available in
/// > [_Dedicated_ Web Workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API#worker_types).
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCEncodedAudioFrame).
extension type RTCEncodedAudioFrame._(JSObject _) implements JSObject {
/// The **`getMetadata()`** method of the [RTCEncodedAudioFrame] interface
/// returns an object containing the metadata associated with the frame.
///
/// This includes information about the frame, including the audio encoding
/// used, the synchronization source and contributing sources, and the
/// sequence number (for incoming frames).
external RTCEncodedAudioFrameMetadata getMetadata();
external set data(JSArrayBuffer value);
external JSArrayBuffer get data;
}
/// The **`RTCTransformEvent`** of the
/// [WebRTC API](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API)
/// represent an event that is fired in a dedicated worker when an encoded frame
/// has been queued for processing by a
/// [WebRTC Encoded Transform](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Using_Encoded_Transforms).
///
/// The interface has a [RTCTransformEvent.transformer] property that exposes a
/// readable stream and a writable stream.
/// A worker should read encoded frames from `transformer.readable`, modify them
/// as needed, and write them to `transformer.writable` in the same order and
/// without any duplication.
///
/// At time of writing there is just one event based on `RTCTransformEvent`:
/// [DedicatedWorkerGlobalScope.rtctransform_event].
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCTransformEvent).
extension type RTCTransformEvent._(JSObject _) implements Event, JSObject {
external RTCRtpScriptTransformer get transformer;
}
/// The **`RTCRtpScriptTransformer`** interface of the
/// [WebRTC API](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API)
/// provides a worker-side
/// [Stream API](https://developer.mozilla.org/en-US/docs/Web/API/Streams_API)
/// interface that a
/// [WebRTC Encoded Transform](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Using_Encoded_Transforms)
/// can use to modify encoded media frames in the incoming and outgoing WebRTC
/// pipelines.
///
/// > **Note:** This feature is available in
/// > [_Dedicated_ Web Workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API#worker_types).
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpScriptTransformer).
extension type RTCRtpScriptTransformer._(JSObject _)
implements EventTarget, JSObject {
/// The **`generateKeyFrame()`** method of the [RTCRtpScriptTransformer]
/// interface causes a video encoder to generate a key frame.
external JSPromise<JSNumber> generateKeyFrame([String rid]);
/// The **`sendKeyFrameRequest()`** method of the [RTCRtpScriptTransformer]
/// interface may be called by a
/// [WebRTC Encoded Transform](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Using_Encoded_Transforms)
/// that is processing incoming encoded video frames, in order to request a
/// key frame from the sender.
///
/// The method may only be called when receiving _video_ (not audio) frames
/// and if, for whatever reason, a recipient will not be able to decode the
/// video without a new key frame.
/// Note that the user agent can decide that the request for a key frame is
/// not necessary, in which case the returned promise will fulfill even though
/// the request was not actually sent.
///
/// > **Note:** It might be called, for example, if a new user joins a WebRTC
/// > conference, in order to reduce the time before they receive a key frame
/// > and can hence start displaying video.
/// > For more information see
/// > [Triggering a key frame](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Using_Encoded_Transforms#triggering_a_key_frame)
/// > in Using WebRTC Encoded Transforms.
external JSPromise<JSAny?> sendKeyFrameRequest();
external ReadableStream get readable;
external WritableStream get writable;
external set onkeyframerequest(EventHandler value);
external EventHandler get onkeyframerequest;
external JSAny? get options;
}
/// The **`RTCRtpScriptTransform`** interface of the
/// [WebRTC API](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API) is
/// used to insert a
/// [WebRTC Encoded Transform](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Using_Encoded_Transforms)
/// (a [TransformStream] running in a worker thread) into the WebRTC sender and
/// receiver pipelines.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpScriptTransform).
extension type RTCRtpScriptTransform._(JSObject _) implements JSObject {
external factory RTCRtpScriptTransform(
Worker worker, [
JSAny? options,
JSArray<JSObject> transfer,
]);
}
extension type KeyFrameRequestEvent._(JSObject _) implements Event, JSObject {
external factory KeyFrameRequestEvent(
String type, [
String rid,
]);
external String? get rid;
}