Browse Source

* WEBRTC classes

michael 5 years ago
parent
commit
6ba4e00741
1 changed files with 929 additions and 0 deletions
  1. 929 0
      packages/rtl/webrtc.pas

+ 929 - 0
packages/rtl/webrtc.pas

@@ -0,0 +1,929 @@
+Unit webrtc;
+
+{$MODE ObjFPC}
+{$H+}
+{$modeswitch externalclass}
+
+interface
+
+uses SysUtils, JS,web;
+
+{
+  Automatically generated file by TWebIDLToPas on 2020-03-23 14:48:13
+  
+  Used command-line options : 
+  -x
+  web
+  -i
+  /home/michael/webrtc.idl
+  -d
+  TJSObject
+  -t
+  DOMTimeStamp=String,Mediastream=TJSHTMLMediaStream,DOMHighResTimeStamp=double,MediaStreamTrack=JSValue,RTCStatsType=String,EventTarget=TJSEventTarget,EventHandler=TJSEventHandler,Promise=TJSPromise,VoidFunction=TProcedure,Event=TJSEvent,Blob=TJSBlob,ArrayBufferView=TJSTypedArray
+  -p
+  
+  Command-line options translate to: 
+  
+  Options : [coDictionaryAsClass,coaddOptionsToheader]
+  Keyword prefix : 
+  Keyword suffix : _
+  Class prefix : TJS
+  Class suffix : 
+  Field prefix : F
+  WEBIDLversion : v2
+  Type aliases:
+  DOMTimeStamp=String
+  Mediastream=TJSHTMLMediaStream
+  DOMHighResTimeStamp=double
+  MediaStreamTrack=JSValue
+  RTCStatsType=String
+  EventTarget=TJSEventTarget
+  EventHandler=TJSEventHandler
+  Promise=TJSPromise
+  VoidFunction=TProcedure
+  Event=TJSEvent
+  Blob=TJSBlob
+  ArrayBufferView=TJSTypedArray
+}
+Type
+  // Forward class definitions
+  TJSRTCPeerConnection = Class;
+  TJSRTCSessionDescription = Class;
+  TJSRTCIceCandidate = Class;
+  TJSRTCPeerConnectionIceEvent = Class;
+  TJSRTCPeerConnectionIceErrorEvent = Class;
+  TJSRTCCertificate = Class;
+  TJSRTCRtpSender = Class;
+  TJSRTCRtpReceiver = Class;
+  TJSRTCRtpTransceiver = Class;
+  TJSRTCDtlsTransport = Class;
+  TJSRTCIceTransport = Class;
+  TJSRTCTrackEvent = Class;
+  TJSRTCSctpTransport = Class;
+  TJSRTCDataChannel = Class;
+  TJSRTCDataChannelEvent = Class;
+  TJSRTCDTMFSender = Class;
+  TJSRTCDTMFToneChangeEvent = Class;
+  TJSRTCStatsReport = Class;
+  TJSRTCError = Class;
+  TJSRTCErrorEvent = Class;
+  TJSRTCConfiguration = Class;
+  TJSRTCIceServer = Class;
+  TJSRTCOfferAnswerOptions = Class;
+  TJSRTCOfferOptions = Class;
+  TJSRTCAnswerOptions = Class;
+  TJSRTCSessionDescriptionInit = Class;
+  TJSRTCIceCandidateInit = Class;
+  TJSRTCPeerConnectionIceEventInit = Class;
+  TJSRTCPeerConnectionIceErrorEventInit = Class;
+  TJSRTCCertificateExpiration = Class;
+  TJSRTCRtpTransceiverInit = Class;
+  TJSRTCRtpParameters = Class;
+  TJSRTCRtpSendParameters = Class;
+  TJSRTCRtpReceiveParameters = Class;
+  TJSRTCRtpCodingParameters = Class;
+  TJSRTCRtpDecodingParameters = Class;
+  TJSRTCRtpEncodingParameters = Class;
+  TJSRTCRtcpParameters = Class;
+  TJSRTCRtpHeaderExtensionParameters = Class;
+  TJSRTCRtpCodecParameters = Class;
+  TJSRTCRtpCapabilities = Class;
+  TJSRTCRtpCodecCapability = Class;
+  TJSRTCRtpHeaderExtensionCapability = Class;
+  TJSRTCRtpContributingSource = Class;
+  TJSRTCRtpSynchronizationSource = Class;
+  TJSRTCDtlsFingerprint = Class;
+  TJSRTCIceParameters = Class;
+  TJSRTCIceCandidatePair = Class;
+  TJSRTCTrackEventInit = Class;
+  TJSRTCDataChannelInit = Class;
+  TJSRTCDataChannelEventInit = Class;
+  TJSRTCDTMFToneChangeEventInit = Class;
+  TJSRTCStats = Class;
+  TJSRTCErrorInit = Class;
+  TJSRTCErrorEventInit = Class;
+  RTCIceCredentialType = String;
+  RTCIceTransportPolicy = String;
+  RTCBundlePolicy = String;
+  RTCRtcpMuxPolicy = String;
+  RTCSignalingState = String;
+  RTCIceGatheringState = String;
+  RTCPeerConnectionState = String;
+  RTCIceConnectionState = String;
+  RTCSdpType = String;
+  RTCIceProtocol = String;
+  RTCIceTcpCandidateType = String;
+  RTCIceCandidateType = String;
+  RTCRtpTransceiverDirection = String;
+  RTCDegradationPreference = String;
+  RTCDtlsTransportState = String;
+  RTCIceGathererState = String;
+  RTCIceTransportState = String;
+  RTCIceRole = String;
+  RTCIceComponent = String;
+  RTCSctpTransportState = String;
+  RTCDataChannelState = String;
+  RTCErrorDetailType = String;
+  RTCPeerConnectionErrorCallback = Procedure (error : TJSError);
+  RTCSessionDescriptionCallback = Procedure (description : TJSRTCSessionDescriptionInit);
+  
+  { --------------------------------------------------------------------
+    TJSRTCConfiguration
+    --------------------------------------------------------------------}
+  
+  TTJSRTCIceServerDynArray = Array of TJSRTCIceServer;
+  TTJSRTCCertificateDynArray = Array of TJSRTCCertificate;
+  TJSRTCConfiguration = class(TJSObject)
+    iceServers : TTJSRTCIceServerDynArray;
+    iceTransportPolicy : RTCIceTransportPolicy;
+    bundlePolicy : RTCBundlePolicy;
+    rtcpMuxPolicy : RTCRtcpMuxPolicy;
+    peerIdentity : String;
+    certificates : TTJSRTCCertificateDynArray;
+    iceCandidatePoolSize : Byte;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCIceServer
+    --------------------------------------------------------------------}
+  
+  TJSRTCIceServer = class(TJSObject)
+    urls : JSValue;
+    username : String;
+    credentialType : RTCIceCredentialType;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCOfferAnswerOptions
+    --------------------------------------------------------------------}
+  
+  TJSRTCOfferAnswerOptions = class(TJSObject)
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCOfferOptions
+    --------------------------------------------------------------------}
+  
+  TJSRTCOfferOptions = class(TJSObject)
+    iceRestart : boolean;
+    offerToReceiveAudio : boolean;
+    offerToReceiveVideo : boolean;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCAnswerOptions
+    --------------------------------------------------------------------}
+  
+  TJSRTCAnswerOptions = class(TJSObject)
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCSessionDescriptionInit
+    --------------------------------------------------------------------}
+  
+  TJSRTCSessionDescriptionInit = class(TJSObject)
+    type_ : RTCSdpType;external name 'type';
+    sdp : String;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCIceCandidateInit
+    --------------------------------------------------------------------}
+  
+  TJSRTCIceCandidateInit = class(TJSObject)
+    candidate : String;
+    sdpMid : String;
+    sdpMLineIndex : Cardinal;
+    usernameFragment : String;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCPeerConnectionIceEventInit
+    --------------------------------------------------------------------}
+  
+  TJSRTCPeerConnectionIceEventInit = class(TJSObject)
+    candidate : TJSRTCIceCandidate;
+    url : String;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCPeerConnectionIceErrorEventInit
+    --------------------------------------------------------------------}
+  
+  TJSRTCPeerConnectionIceErrorEventInit = class(TJSObject)
+    hostCandidate : String;
+    url : String;
+    errorCode : Cardinal;
+    statusText : String;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCCertificateExpiration
+    --------------------------------------------------------------------}
+  
+  TJSRTCCertificateExpiration = class(TJSObject)
+    expires : String;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCRtpTransceiverInit
+    --------------------------------------------------------------------}
+  
+  TTJSHTMLMediaStreamDynArray = Array of TJSHTMLMediaStream;
+  TTJSRTCRtpEncodingParametersDynArray = Array of TJSRTCRtpEncodingParameters;
+  TJSRTCRtpTransceiverInit = class(TJSObject)
+    direction : RTCRtpTransceiverDirection;
+    streams : TTJSHTMLMediaStreamDynArray;
+    sendEncodings : TTJSRTCRtpEncodingParametersDynArray;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCRtpParameters
+    --------------------------------------------------------------------}
+  
+  TTJSRTCRtpHeaderExtensionParametersDynArray = Array of TJSRTCRtpHeaderExtensionParameters;
+  TTJSRTCRtpCodecParametersDynArray = Array of TJSRTCRtpCodecParameters;
+  TJSRTCRtpParameters = class(TJSObject)
+    headerExtensions : TTJSRTCRtpHeaderExtensionParametersDynArray;
+    rtcp : TJSRTCRtcpParameters;
+    codecs : TTJSRTCRtpCodecParametersDynArray;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCRtpSendParameters
+    --------------------------------------------------------------------}
+  
+  TJSRTCRtpSendParameters = class(TJSObject)
+    transactionId : String;
+    encodings : TTJSRTCRtpEncodingParametersDynArray;
+    degradationPreference : RTCDegradationPreference;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCRtpReceiveParameters
+    --------------------------------------------------------------------}
+  
+  TTJSRTCRtpDecodingParametersDynArray = Array of TJSRTCRtpDecodingParameters;
+  TJSRTCRtpReceiveParameters = class(TJSObject)
+    encodings : TTJSRTCRtpDecodingParametersDynArray;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCRtpCodingParameters
+    --------------------------------------------------------------------}
+  
+  TJSRTCRtpCodingParameters = class(TJSObject)
+    rid : String;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCRtpDecodingParameters
+    --------------------------------------------------------------------}
+  
+  TJSRTCRtpDecodingParameters = class(TJSObject)
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCRtpEncodingParameters
+    --------------------------------------------------------------------}
+  
+  TJSRTCRtpEncodingParameters = class(TJSObject)
+    active : boolean;
+    maxBitrate : NativeInt;
+    scaleResolutionDownBy : Double;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCRtcpParameters
+    --------------------------------------------------------------------}
+  
+  TJSRTCRtcpParameters = class(TJSObject)
+    cname : String;
+    reducedSize : boolean;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCRtpHeaderExtensionParameters
+    --------------------------------------------------------------------}
+  
+  TJSRTCRtpHeaderExtensionParameters = class(TJSObject)
+    uri : String;
+    id : Cardinal;
+    encrypted : boolean;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCRtpCodecParameters
+    --------------------------------------------------------------------}
+  
+  TJSRTCRtpCodecParameters = class(TJSObject)
+    payloadType : Byte;
+    mimeType : String;
+    clockRate : NativeInt;
+    channels : Cardinal;
+    sdpFmtpLine : String;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCRtpCapabilities
+    --------------------------------------------------------------------}
+  
+  TTJSRTCRtpCodecCapabilityDynArray = Array of TJSRTCRtpCodecCapability;
+  TTJSRTCRtpHeaderExtensionCapabilityDynArray = Array of TJSRTCRtpHeaderExtensionCapability;
+  TJSRTCRtpCapabilities = class(TJSObject)
+    codecs : TTJSRTCRtpCodecCapabilityDynArray;
+    headerExtensions : TTJSRTCRtpHeaderExtensionCapabilityDynArray;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCRtpCodecCapability
+    --------------------------------------------------------------------}
+  
+  TJSRTCRtpCodecCapability = class(TJSObject)
+    mimeType : String;
+    clockRate : NativeInt;
+    channels : Cardinal;
+    sdpFmtpLine : String;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCRtpHeaderExtensionCapability
+    --------------------------------------------------------------------}
+  
+  TJSRTCRtpHeaderExtensionCapability = class(TJSObject)
+    uri : String;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCRtpContributingSource
+    --------------------------------------------------------------------}
+  
+  TJSRTCRtpContributingSource = class(TJSObject)
+    timestamp : double;
+    source : NativeInt;
+    audioLevel : Double;
+    rtpTimestamp : NativeInt;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCRtpSynchronizationSource
+    --------------------------------------------------------------------}
+  
+  TJSRTCRtpSynchronizationSource = class(TJSObject)
+    voiceActivityFlag : boolean;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCDtlsFingerprint
+    --------------------------------------------------------------------}
+  
+  TJSRTCDtlsFingerprint = class(TJSObject)
+    algorithm : String;
+    value : String;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCIceParameters
+    --------------------------------------------------------------------}
+  
+  TJSRTCIceParameters = class(TJSObject)
+    usernameFragment : String;
+    password : String;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCIceCandidatePair
+    --------------------------------------------------------------------}
+  
+  TJSRTCIceCandidatePair = class(TJSObject)
+    local : TJSRTCIceCandidate;
+    remote : TJSRTCIceCandidate;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCTrackEventInit
+    --------------------------------------------------------------------}
+  
+  TJSRTCTrackEventInit = class(TJSObject)
+    receiver : TJSRTCRtpReceiver;
+    track : JSValue;
+    streams : TTJSHTMLMediaStreamDynArray;
+    transceiver : TJSRTCRtpTransceiver;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCDataChannelInit
+    --------------------------------------------------------------------}
+  
+  TJSRTCDataChannelInit = class(TJSObject)
+    ordered : boolean;
+    maxPacketLifeTime : Cardinal;
+    maxRetransmits : Cardinal;
+    protocol : String;
+    negotiated : boolean;
+    id : Cardinal;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCDataChannelEventInit
+    --------------------------------------------------------------------}
+  
+  TJSRTCDataChannelEventInit = class(TJSObject)
+    channel : TJSRTCDataChannel;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCDTMFToneChangeEventInit
+    --------------------------------------------------------------------}
+  
+  TJSRTCDTMFToneChangeEventInit = class(TJSObject)
+    tone : String;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCStats
+    --------------------------------------------------------------------}
+  
+  TJSRTCStats = class(TJSObject)
+    timestamp : double;
+    type_ : String;external name 'type';
+    id : String;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCErrorInit
+    --------------------------------------------------------------------}
+  
+  TJSRTCErrorInit = class(TJSObject)
+    errorDetail : RTCErrorDetailType;
+    sdpLineNumber : Integer;
+    httpRequestStatusCode : Integer;
+    sctpCauseCode : Integer;
+    receivedAlert : NativeInt;
+    sentAlert : NativeInt;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCErrorEventInit
+    --------------------------------------------------------------------}
+  
+  TJSRTCErrorEventInit = class(TJSObject)
+    error : TJSRTCError;
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCPeerConnection
+    --------------------------------------------------------------------}
+  
+  TTJSRTCRtpSenderDynArray = Array of TJSRTCRtpSender;
+  TTJSRTCRtpReceiverDynArray = Array of TJSRTCRtpReceiver;
+  TTJSRTCRtpTransceiverDynArray = Array of TJSRTCRtpTransceiver;
+  
+  TJSRTCPeerConnection = class external name 'RTCPeerConnection'  (TJSEventTarget)
+  Private
+    FlocalDescription : TJSRTCSessionDescription; external name 'localDescription'; 
+    FcurrentLocalDescription : TJSRTCSessionDescription; external name 'currentLocalDescription'; 
+    FpendingLocalDescription : TJSRTCSessionDescription; external name 'pendingLocalDescription'; 
+    FremoteDescription : TJSRTCSessionDescription; external name 'remoteDescription'; 
+    FcurrentRemoteDescription : TJSRTCSessionDescription; external name 'currentRemoteDescription'; 
+    FpendingRemoteDescription : TJSRTCSessionDescription; external name 'pendingRemoteDescription'; 
+    FsignalingState : RTCSignalingState; external name 'signalingState'; 
+    FiceGatheringState : RTCIceGatheringState; external name 'iceGatheringState'; 
+    FiceConnectionState : RTCIceConnectionState; external name 'iceConnectionState'; 
+    FconnectionState : RTCPeerConnectionState; external name 'connectionState'; 
+    FcanTrickleIceCandidates : boolean; external name 'canTrickleIceCandidates'; 
+    Fsctp : TJSRTCSctpTransport; external name 'sctp'; 
+  Public
+    
+      onnegotiationneeded : TJSEventHandler;
+      onicecandidate : TJSEventHandler;
+      onicecandidateerror : TJSEventHandler;
+      onsignalingstatechange : TJSEventHandler;
+      oniceconnectionstatechange : TJSEventHandler;
+      onicegatheringstatechange : TJSEventHandler;
+      onconnectionstatechange : TJSEventHandler;
+      ontrack : TJSEventHandler;
+      ondatachannel : TJSEventHandler;
+    constructor New(configuration : TJSRTCConfiguration); overload;
+    constructor New; overload;
+    function createOffer(options : TJSRTCOfferOptions): TJSPromise; overload;
+    function createOffer: TJSPromise; overload;
+    function createAnswer(options : TJSRTCAnswerOptions): TJSPromise; overload;
+    function createAnswer: TJSPromise; overload;
+    function setLocalDescription(description : TJSRTCSessionDescriptionInit): TJSPromise; overload;
+    function setLocalDescription: TJSPromise; overload;
+    function setRemoteDescription(description : TJSRTCSessionDescriptionInit): TJSPromise; overload;
+    function setRemoteDescription: TJSPromise; overload;
+    function addIceCandidate(candidate : TJSRTCIceCandidateInit): TJSPromise; overload;
+    function addIceCandidate: TJSPromise; overload;
+    Procedure restartIce;
+    function getConfiguration: TJSRTCConfiguration;
+    Procedure setConfiguration(configuration : TJSRTCConfiguration);
+    Procedure close;
+    function createOffer(successCallback : RTCSessionDescriptionCallback; failureCallback : RTCPeerConnectionErrorCallback; options : TJSRTCOfferOptions): TJSPromise; overload;
+    function createOffer(successCallback : RTCSessionDescriptionCallback; failureCallback : RTCPeerConnectionErrorCallback): TJSPromise; overload;
+    function createAnswer(successCallback : RTCSessionDescriptionCallback; failureCallback : RTCPeerConnectionErrorCallback): TJSPromise;
+    function addIceCandidate(candidate : TJSRTCIceCandidateInit; successCallback : TProcedure; failureCallback : RTCPeerConnectionErrorCallback): TJSPromise;
+    function generateCertificate(keygenAlgorithm : AlgorithmIdentifier): TJSPromise;
+    function getSenders: TTJSRTCRtpSenderDynArray;
+    function getReceivers: TTJSRTCRtpReceiverDynArray;
+    function getTransceivers: TTJSRTCRtpTransceiverDynArray;
+    function addTrack(track : JSValue; streams : TJSHTMLMediaStream): TJSRTCRtpSender; varargs;
+    Procedure removeTrack(sender : TJSRTCRtpSender);
+    function addTransceiver(trackOrKind : JSValue; init : TJSRTCRtpTransceiverInit): TJSRTCRtpTransceiver; overload;
+    function addTransceiver(trackOrKind : JSValue): TJSRTCRtpTransceiver; overload;
+    function createDataChannel(label_ : String; dataChannelDict : TJSRTCDataChannelInit): TJSRTCDataChannel; overload;
+    function createDataChannel(label_ : String): TJSRTCDataChannel; overload;
+    function getStats(selector : JSValue): TJSPromise; overload;
+    function getStats: TJSPromise; overload;
+    Property localDescription : TJSRTCSessionDescription Read FlocalDescription; 
+    Property currentLocalDescription : TJSRTCSessionDescription Read FcurrentLocalDescription; 
+    Property pendingLocalDescription : TJSRTCSessionDescription Read FpendingLocalDescription; 
+    Property remoteDescription : TJSRTCSessionDescription Read FremoteDescription; 
+    Property currentRemoteDescription : TJSRTCSessionDescription Read FcurrentRemoteDescription; 
+    Property pendingRemoteDescription : TJSRTCSessionDescription Read FpendingRemoteDescription; 
+    Property signalingState : RTCSignalingState Read FsignalingState; 
+    Property iceGatheringState : RTCIceGatheringState Read FiceGatheringState; 
+    Property iceConnectionState : RTCIceConnectionState Read FiceConnectionState; 
+    Property connectionState : RTCPeerConnectionState Read FconnectionState; 
+    Property canTrickleIceCandidates : boolean Read FcanTrickleIceCandidates; 
+    Property sctp : TJSRTCSctpTransport Read Fsctp; 
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCSessionDescription
+    --------------------------------------------------------------------}
+  
+  TJSRTCSessionDescription = class external name 'RTCSessionDescription' 
+  Private
+    Ftype_ : RTCSdpType; external name 'type'; 
+    Fsdp : String; external name 'sdp'; 
+  Public
+    constructor New(descriptionInitDict : TJSRTCSessionDescriptionInit); overload;
+    constructor New; overload;
+    function toJSON: TJSObject;
+    Property type_ : RTCSdpType Read Ftype_; 
+    Property sdp : String Read Fsdp; 
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCIceCandidate
+    --------------------------------------------------------------------}
+  
+  TJSRTCIceCandidate = class external name 'RTCIceCandidate' 
+  Private
+    Fcandidate : String; external name 'candidate'; 
+    FsdpMid : String; external name 'sdpMid'; 
+    FsdpMLineIndex : Cardinal; external name 'sdpMLineIndex'; 
+    Ffoundation : String; external name 'foundation'; 
+    Fcomponent : RTCIceComponent; external name 'component'; 
+    Fpriority : NativeInt; external name 'priority'; 
+    Faddress : String; external name 'address'; 
+    Fprotocol : RTCIceProtocol; external name 'protocol'; 
+    Fport : Cardinal; external name 'port'; 
+    Ftype_ : RTCIceCandidateType; external name 'type'; 
+    FtcpType : RTCIceTcpCandidateType; external name 'tcpType'; 
+    FrelatedAddress : String; external name 'relatedAddress'; 
+    FrelatedPort : Cardinal; external name 'relatedPort'; 
+    FusernameFragment : String; external name 'usernameFragment'; 
+  Public
+    constructor New(candidateInitDict : TJSRTCIceCandidateInit); overload;
+    constructor New; overload;
+    function toJSON: TJSRTCIceCandidateInit;
+    Property candidate : String Read Fcandidate; 
+    Property sdpMid : String Read FsdpMid; 
+    Property sdpMLineIndex : Cardinal Read FsdpMLineIndex; 
+    Property foundation : String Read Ffoundation; 
+    Property component : RTCIceComponent Read Fcomponent; 
+    Property priority : NativeInt Read Fpriority; 
+    Property address : String Read Faddress; 
+    Property protocol : RTCIceProtocol Read Fprotocol; 
+    Property port : Cardinal Read Fport; 
+    Property type_ : RTCIceCandidateType Read Ftype_; 
+    Property tcpType : RTCIceTcpCandidateType Read FtcpType; 
+    Property relatedAddress : String Read FrelatedAddress; 
+    Property relatedPort : Cardinal Read FrelatedPort; 
+    Property usernameFragment : String Read FusernameFragment; 
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCPeerConnectionIceEvent
+    --------------------------------------------------------------------}
+  
+  TJSRTCPeerConnectionIceEvent = class external name 'RTCPeerConnectionIceEvent'  (TJSEvent)
+  Private
+    Fcandidate : TJSRTCIceCandidate; external name 'candidate'; 
+    Furl : String; external name 'url'; 
+  Public
+    constructor New(type_ : String; eventInitDict : TJSRTCPeerConnectionIceEventInit); overload;
+    constructor New(type_ : String); overload;
+    Property candidate : TJSRTCIceCandidate Read Fcandidate; 
+    Property url : String Read Furl; 
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCPeerConnectionIceErrorEvent
+    --------------------------------------------------------------------}
+  
+  TJSRTCPeerConnectionIceErrorEvent = class external name 'RTCPeerConnectionIceErrorEvent'  (TJSEvent)
+  Private
+    Faddress : String; external name 'address'; 
+    Fport : Cardinal; external name 'port'; 
+    Furl : String; external name 'url'; 
+    FerrorCode : Cardinal; external name 'errorCode'; 
+    FerrorText : String; external name 'errorText'; 
+  Public
+    constructor New(type_ : String; eventInitDict : TJSRTCPeerConnectionIceErrorEventInit);
+    Property address : String Read Faddress; 
+    Property port : Cardinal Read Fport; 
+    Property url : String Read Furl; 
+    Property errorCode : Cardinal Read FerrorCode; 
+    Property errorText : String Read FerrorText; 
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCCertificate
+    --------------------------------------------------------------------}
+  
+  TTJSRTCDtlsFingerprintDynArray = Array of TJSRTCDtlsFingerprint;
+  
+  TJSRTCCertificate = class external name 'RTCCertificate' 
+  Private
+    Fexpires : String; external name 'expires'; 
+  Public
+    function getFingerprints: TTJSRTCDtlsFingerprintDynArray;
+    Property expires : String Read Fexpires; 
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCRtpSender
+    --------------------------------------------------------------------}
+  
+  TJSRTCRtpSender = class external name 'RTCRtpSender' 
+  Private
+    Ftrack : JSValue; external name 'track'; 
+    Ftransport : TJSRTCDtlsTransport; external name 'transport'; 
+    Fdtmf : TJSRTCDTMFSender; external name 'dtmf'; 
+  Public
+    function getCapabilities(kind : String): TJSRTCRtpCapabilities;
+    function setParameters(parameters : TJSRTCRtpSendParameters): TJSPromise;
+    function getParameters: TJSRTCRtpSendParameters;
+    function replaceTrack(withTrack : JSValue): TJSPromise;
+    Procedure setStreams(streams : TJSHTMLMediaStream); varargs;
+    function getStats: TJSPromise;
+    Property track : JSValue Read Ftrack; 
+    Property transport : TJSRTCDtlsTransport Read Ftransport; 
+    Property dtmf : TJSRTCDTMFSender Read Fdtmf; 
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCRtpReceiver
+    --------------------------------------------------------------------}
+  
+  TTJSRTCRtpContributingSourceDynArray = Array of TJSRTCRtpContributingSource;
+  TTJSRTCRtpSynchronizationSourceDynArray = Array of TJSRTCRtpSynchronizationSource;
+  
+  TJSRTCRtpReceiver = class external name 'RTCRtpReceiver' 
+  Private
+    Ftrack : JSValue; external name 'track'; 
+    Ftransport : TJSRTCDtlsTransport; external name 'transport'; 
+  Public
+    function getCapabilities(kind : String): TJSRTCRtpCapabilities;
+    function getParameters: TJSRTCRtpReceiveParameters;
+    function getContributingSources: TTJSRTCRtpContributingSourceDynArray;
+    function getSynchronizationSources: TTJSRTCRtpSynchronizationSourceDynArray;
+    function getStats: TJSPromise;
+    Property track : JSValue Read Ftrack; 
+    Property transport : TJSRTCDtlsTransport Read Ftransport; 
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCRtpTransceiver
+    --------------------------------------------------------------------}
+  
+  TJSRTCRtpTransceiver = class external name 'RTCRtpTransceiver' 
+  Private
+    Fmid : String; external name 'mid'; 
+    Fsender : TJSRTCRtpSender; external name 'sender'; 
+    Freceiver : TJSRTCRtpReceiver; external name 'receiver'; 
+    FcurrentDirection : RTCRtpTransceiverDirection; external name 'currentDirection'; 
+  Public
+      direction : RTCRtpTransceiverDirection;
+    Procedure stop;
+    Procedure setCodecPreferences(codecs : TTJSRTCRtpCodecCapabilityDynArray);
+    Property mid : String Read Fmid; 
+    Property sender : TJSRTCRtpSender Read Fsender; 
+    Property receiver : TJSRTCRtpReceiver Read Freceiver; 
+    Property currentDirection : RTCRtpTransceiverDirection Read FcurrentDirection; 
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCDtlsTransport
+    --------------------------------------------------------------------}
+  
+  TTJSArrayBufferDynArray = Array of TJSArrayBuffer;
+  
+  TJSRTCDtlsTransport = class external name 'RTCDtlsTransport'  (TJSEventTarget)
+  Private
+    FiceTransport : TJSRTCIceTransport; external name 'iceTransport'; 
+    Fstate : RTCDtlsTransportState; external name 'state'; 
+  Public
+      onstatechange : TJSEventHandler;
+      onerror : TJSEventHandler;
+    function getRemoteCertificates: TTJSArrayBufferDynArray;
+    Property iceTransport : TJSRTCIceTransport Read FiceTransport; 
+    Property state : RTCDtlsTransportState Read Fstate; 
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCIceTransport
+    --------------------------------------------------------------------}
+  
+  TTJSRTCIceCandidateDynArray = Array of TJSRTCIceCandidate;
+  
+  TJSRTCIceTransport = class external name 'RTCIceTransport'  (TJSEventTarget)
+  Private
+    Frole : RTCIceRole; external name 'role'; 
+    Fcomponent : RTCIceComponent; external name 'component'; 
+    Fstate : RTCIceTransportState; external name 'state'; 
+    FgatheringState : RTCIceGathererState; external name 'gatheringState'; 
+  Public
+      onstatechange : TJSEventHandler;
+      ongatheringstatechange : TJSEventHandler;
+      onselectedcandidatepairchange : TJSEventHandler;
+    function getLocalCandidates: TTJSRTCIceCandidateDynArray;
+    function getRemoteCandidates: TTJSRTCIceCandidateDynArray;
+    function getSelectedCandidatePair: TJSRTCIceCandidatePair;
+    function getLocalParameters: TJSRTCIceParameters;
+    function getRemoteParameters: TJSRTCIceParameters;
+    Property role : RTCIceRole Read Frole; 
+    Property component : RTCIceComponent Read Fcomponent; 
+    Property state : RTCIceTransportState Read Fstate; 
+    Property gatheringState : RTCIceGathererState Read FgatheringState; 
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCTrackEvent
+    --------------------------------------------------------------------}
+  
+  TJSRTCTrackEvent = class external name 'RTCTrackEvent'  (TJSEvent)
+  Private
+    Freceiver : TJSRTCRtpReceiver; external name 'receiver'; 
+    Ftrack : JSValue; external name 'track'; 
+    Fstreams : TTJSHTMLMediaStreamDynArray; external name 'streams'; 
+    Ftransceiver : TJSRTCRtpTransceiver; external name 'transceiver'; 
+  Public
+    constructor New(type_ : String; eventInitDict : TJSRTCTrackEventInit);
+    Property receiver : TJSRTCRtpReceiver Read Freceiver; 
+    Property track : JSValue Read Ftrack; 
+    Property streams : TTJSHTMLMediaStreamDynArray Read Fstreams; 
+    Property transceiver : TJSRTCRtpTransceiver Read Ftransceiver; 
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCSctpTransport
+    --------------------------------------------------------------------}
+  
+  TJSRTCSctpTransport = class external name 'RTCSctpTransport'  (TJSEventTarget)
+  Private
+    Ftransport : TJSRTCDtlsTransport; external name 'transport'; 
+    Fstate : RTCSctpTransportState; external name 'state'; 
+    FmaxMessageSize : Double; external name 'maxMessageSize'; 
+    FmaxChannels : Cardinal; external name 'maxChannels'; 
+  Public
+      onstatechange : TJSEventHandler;
+    Property transport : TJSRTCDtlsTransport Read Ftransport; 
+    Property state : RTCSctpTransportState Read Fstate; 
+    Property maxMessageSize : Double Read FmaxMessageSize; 
+    Property maxChannels : Cardinal Read FmaxChannels; 
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCDataChannel
+    --------------------------------------------------------------------}
+  
+  TJSRTCDataChannel = class external name 'RTCDataChannel'  (TJSEventTarget)
+  Private
+    Flabel_ : String; external name 'label'; 
+    Fordered : boolean; external name 'ordered'; 
+    FmaxPacketLifeTime : Cardinal; external name 'maxPacketLifeTime'; 
+    FmaxRetransmits : Cardinal; external name 'maxRetransmits'; 
+    Fprotocol : String; external name 'protocol'; 
+    Fnegotiated : boolean; external name 'negotiated'; 
+    Fid : Cardinal; external name 'id'; 
+    FreadyState : RTCDataChannelState; external name 'readyState'; 
+    FbufferedAmount : NativeInt; external name 'bufferedAmount'; 
+  Public
+      bufferedAmountLowThreshold : NativeInt;
+      onopen : TJSEventHandler;
+      onbufferedamountlow : TJSEventHandler;
+      onerror : TJSEventHandler;
+      onclosing : TJSEventHandler;
+      onclose : TJSEventHandler;
+      onmessage : TJSEventHandler;
+      binaryType : String;
+    Procedure close;
+    Procedure send(data : String);
+    Procedure send(data : TJSBlob);
+    Procedure send(data : TJSArrayBuffer);
+    Procedure send(data : TJSTypedArray);
+    Property label_ : String Read Flabel_; 
+    Property ordered : boolean Read Fordered; 
+    Property maxPacketLifeTime : Cardinal Read FmaxPacketLifeTime; 
+    Property maxRetransmits : Cardinal Read FmaxRetransmits; 
+    Property protocol : String Read Fprotocol; 
+    Property negotiated : boolean Read Fnegotiated; 
+    Property id : Cardinal Read Fid; 
+    Property readyState : RTCDataChannelState Read FreadyState; 
+    Property bufferedAmount : NativeInt Read FbufferedAmount; 
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCDataChannelEvent
+    --------------------------------------------------------------------}
+  
+  TJSRTCDataChannelEvent = class external name 'RTCDataChannelEvent'  (TJSEvent)
+  Private
+    Fchannel : TJSRTCDataChannel; external name 'channel'; 
+  Public
+    constructor New(type_ : String; eventInitDict : TJSRTCDataChannelEventInit);
+    Property channel : TJSRTCDataChannel Read Fchannel; 
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCDTMFSender
+    --------------------------------------------------------------------}
+  
+  TJSRTCDTMFSender = class external name 'RTCDTMFSender'  (TJSEventTarget)
+  Private
+    FcanInsertDTMF : boolean; external name 'canInsertDTMF'; 
+    FtoneBuffer : String; external name 'toneBuffer'; 
+  Public
+      ontonechange : TJSEventHandler;
+    Procedure insertDTMF(tones : String; duration : NativeInt; interToneGap : NativeInt); overload;
+    Procedure insertDTMF(tones : String); overload;
+    Procedure insertDTMF(tones : String; duration : NativeInt); overload;
+    Property canInsertDTMF : boolean Read FcanInsertDTMF; 
+    Property toneBuffer : String Read FtoneBuffer; 
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCDTMFToneChangeEvent
+    --------------------------------------------------------------------}
+  
+  TJSRTCDTMFToneChangeEvent = class external name 'RTCDTMFToneChangeEvent'  (TJSEvent)
+  Private
+    Ftone : String; external name 'tone'; 
+  Public
+    constructor New(type_ : String; eventInitDict : TJSRTCDTMFToneChangeEventInit);
+    Property tone : String Read Ftone; 
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCStatsReport
+    --------------------------------------------------------------------}
+  
+  TJSRTCStatsReport = class external name 'RTCStatsReport' 
+  Private
+  Public
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCError
+    --------------------------------------------------------------------}
+  
+  TJSRTCError = class external name 'RTCError'  (TJSError)
+  Private
+    FerrorDetail : RTCErrorDetailType; external name 'errorDetail'; 
+    FsdpLineNumber : Integer; external name 'sdpLineNumber'; 
+    FhttpRequestStatusCode : Integer; external name 'httpRequestStatusCode'; 
+    FsctpCauseCode : Integer; external name 'sctpCauseCode'; 
+    FreceivedAlert : NativeInt; external name 'receivedAlert'; 
+    FsentAlert : NativeInt; external name 'sentAlert'; 
+  Public
+    constructor New(init : TJSRTCErrorInit; message : String); overload;
+    constructor New(init : TJSRTCErrorInit); overload;
+    Property errorDetail : RTCErrorDetailType Read FerrorDetail; 
+    Property sdpLineNumber : Integer Read FsdpLineNumber; 
+    Property httpRequestStatusCode : Integer Read FhttpRequestStatusCode; 
+    Property sctpCauseCode : Integer Read FsctpCauseCode; 
+    Property receivedAlert : NativeInt Read FreceivedAlert; 
+    Property sentAlert : NativeInt Read FsentAlert; 
+  end;
+  
+  { --------------------------------------------------------------------
+    TJSRTCErrorEvent
+    --------------------------------------------------------------------}
+  
+  TJSRTCErrorEvent = class external name 'RTCErrorEvent'  (TJSEvent)
+  Private
+    Ferror : TJSRTCError; external name 'error'; 
+  Public
+    constructor New(type_ : String; eventInitDict : TJSRTCErrorEventInit);
+    Property error : TJSRTCError Read Ferror; 
+  end;
+
+implementation
+
+
+end.