{ This file is part of the Pas2JS run time library. Copyright (c) 2020 by Michael Van Canneyt OpenTok.js import classes. Actual Opentok API is copyright Tokbox/Nexmo/Vonage See the file COPYING.FPC, included in this distribution, for details about the copyright. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. **********************************************************************} unit libopentok; {$mode objfpc} {$modeswitch externalclass} interface uses JS, web, types; Type TJSMediaStreamTrack = class external name 'MediaStreamTrack' (TJSObject); { --------------------------------------------------------------------- Forward declarations ---------------------------------------------------------------------} TOT = Class; TOTArchiveEvent = Class; TOTAudioLevelUpdatedEvent = Class; TOTCapabilities = Class; TOTConnection = Class; TOTConnectionEvent = Class; TOTDevice = Class; TOTError = Class; TOTEvent = Class; TOTEventDispatcher = Class; TOTExceptionEvent = Class; TOTGetDevicesResponse = Class; TOTGetUserMediaOptions = Class; TOTInitPublisherOptions = Class; TOTInitSessionOptions = Class; TOTMediaStoppedEvent = Class; TOTPublisher = Class; TOTPublisherStats = Class; TOTPublisherStyleOptions = Class; TOTScreenSharingCapabilities = Class; TOTSession = Class; TOTSessionConnectEvent = Class; TOTSessionDisonnectEvent = Class; TOTSignalEvent = Class; TOTStream = Class; TOTStreamEvent = Class; TOTStreamPropertyChangedEvent = Class; TOTSubscriber = Class; TOTSubscriberStats = Class; TOTSubscriberStyleOptions = Class; TOTSupportedCodecsResponse = Class; TOTUIStyle = Class; TOTVideoElementCreatedEvent = Class; TOTVideoEnabledChangedEvent = Class; TOTConnectionDynArray = Array of TOTConnection; TOTStreamDynArray = Array of TOTStream; { --------------------------------------------------------------------- Events ---------------------------------------------------------------------} TOTEvent = Class external name 'ArchiveEvent' (TJSEvent) Public Function isDefaultPrevented : Boolean; end; { TOTStreamEvent } TOTBaseStreamEvent = Class external name 'StreamEvent' (TOTEvent) private FStream: TOTStream; external name 'stream'; public Property Stream : TOTStream read FStream; end; { TOTStreamEvent } TOTStreamEvent = Class external name 'StreamEvent' (TOTBaseStreamEvent) private Fcancelable: Boolean; external name 'cancelable'; FReason: string; external name 'reason'; Public Property Cancelable : Boolean Read Fcancelable; Property Reason : string read FReason; end; { TOTStreamPropertyChangedEvent } TOTStreamPropertyChangedEvent = Class external name 'StreamPropertyChangedEvent' (TOTBaseStreamEvent) Private FChangedProperty: string; external name 'changedProperty'; FNewValue: TJSObject; external name 'newValue'; FOldValue: TJSObject; external name 'oldValue'; Public Property ChangedProperty : string read FChangedProperty; Property NewValue : TJSObject Read FNewValue; Property OldValue : TJSObject Read FOldValue; end; { TOTSessionConnectEvent } TOTSessionConnectEvent = Class external name 'SessionConnect' (TOTEvent) private FReason: string; external name 'reason'; Public Property Reason : string read FReason; end; { TOTSessionDisonnectEvent } TOTSessionDisonnectEvent = Class external name 'SessionDisconnect' (TOTEvent) private FConnections: TOTConnectionDynArray; external name 'connections'; FStreams: TOTStreamDynArray; external name 'streams'; Public Property Connections : TOTConnectionDynArray Read FConnections; Property Streams : TOTStreamDynArray Read FStreams; end; { TOTSignalEvent } TOTSignalEvent = Class external name 'SignalEvent' (TOTEvent) private FData: string; external name 'data'; FFrom: TOTConnection; external name 'from'; Ftype: string; external name 'type'; Public Property Data : string read FData; Property From : TOTConnection Read FFrom; Property Type_ : string read Ftype; end; { TOTAudioLevelUpdatedEvent } TOTAudioLevelUpdatedEvent = Class external name 'AudioLevelUpdatedEvent' (TOTEvent) private faudiolevel: Double; external name 'audioLevel'; Public Property AudioLevel : Double read faudiolevel; end; { TOTConnectionEvent } TOTConnectionEvent = Class external name 'ConnectionEvent' (TOTEvent) private fconnection: TOTConnection;external name 'connection'; freason: string;external name 'reason'; Public Property Connection : TOTConnection read fconnection; Property Reason : string read freason; end; { TOTExceptionEvent } TOTExceptionEvent = Class external name 'ExceptionEvent' (TOTEvent) private FCode: nativeint;external name 'code'; FMessage: string;external name 'message'; FTitle: string;external name 'title'; Public Property Code : nativeint read FCode; Property Message : string read FMessage; Property Title : string read FTitle; end; { TOTMediaStoppedEvent } TOTMediaStoppedEvent = Class external name 'MediaStoppedEvent' (TOTEvent) private FMessage: string; external name 'message'; FTitle: string; external name 'title'; FTrack: TJSMediaStreamTrack; external name 'track'; Public Property Message : string read FMessage; Property Title : string Read FTitle; Property Track : TJSMediaStreamTrack Read FTrack; end; { TOTArchiveEvent } TOTArchiveEvent = Class external name 'ArchiveEvent' (TOTEvent) private FID: string; external name 'id'; FName: string; external name 'name'; Public Property ID : string read FID; Property Name : string read FName; end; { TOTVideoElementCreatedEvent } TOTVideoElementCreatedEvent = Class external name 'VideoElementCreatedEvent' (TOTEvent) private Felement: TJSHTMLElement; external name 'element'; Public Property Element : TJSHTMLElement Read Felement; end; { TOTVideoEnabledChangedEvent } TOTVideoEnabledChangedEvent = Class external name 'VideoEnabledChangedEvent' (TOTEvent) private FCancelable: Boolean; external name 'cancelable'; FReason: string; external name 'reason'; FTarget: TJSObject; external name 'target'; FType: string; external name 'type'; Public Property Cancelable : Boolean Read FCancelable; Property Reason : string Read FReason; Property Target : TJSObject Read FTarget; Property Type_ : string read FType; end; { --------------------------------------------------------------------- Real classes ---------------------------------------------------------------------} { TOTError } TOTError = class external name 'Error' (TJSError) Private FCode: nativeint; external name 'code'; FName: string; external name 'name'; Public Property Code : nativeint read FCode Write FCode; Property name : string read FName Write FName; end; TOTErrorHandler = reference to procedure(aErr : TOTError); { TOTEventDispatcher } TOTEventDispatcher = Class external name 'EventDispatcher' (TJSObject) Public Procedure off(aType : string; aHandler : TJSEventHandler); overload; Procedure off(aType : string); overload; Procedure off(aTypes : TJSObject; aContext : JSValue); overload; Procedure off(aTypes : TJSObject); overload; Function on_(aType : string; aHandler : TJSEventHandler) : TOTEventDispatcher; overload; external name 'on'; Function on_(aType : string; aHandler : TJSEventHandler; aContext : JSValue): TOTEventDispatcher; overload; external name 'on'; Function on_(aType : string; aHandler : TJSRawEventHandler) : TOTEventDispatcher; overload; external name 'on'; Function on_(aType : string; aHandler : TJSRawEventHandler; aContext : JSValue): TOTEventDispatcher; overload; external name 'on'; Function once(aType : string; aHandler : TJSRawEventHandler) : TJSObject; overload; Function once(aType : string; aHandler : TJSRawEventHandler; aContext : JSValue) : TJSObject; overload; Function once(aType : string; aHandler : TJSEventHandler) : TJSObject; overload; Function once(aType : string; aHandler : TJSEventHandler; aContext : JSValue) : TJSObject; overload; end; TOTConnection = Class external name 'Connection' (TJSObject) Private FconnectionId : string; external name 'connectionId'; FcreationTime : NativeInt; external name 'creationTime'; Fdata : string; external name 'data'; Public Property connectionId : string Read FconnectionId Write FconnectionId; Property creationTime : NativeInt Read FcreationTime Write FcreationTime; Property data : string Read Fdata Write Fdata; end; TOTMediaResolution = Record height : nativeint; width : nativeint; end; { TOTStream } TOTStream = Class external name 'Stream' (TJSObject) private FConnection: TOTConnection; external name 'connection'; FCreationTime: NativeInt; external name 'creationTime'; FFrameRate: NativeInt; external name 'frameRate'; FHasAudio: Boolean; external name 'hasAudio'; FHasVideo: Boolean; external name 'hasVideo'; FName: string; external name 'name'; FStreamID: string; external name 'streamId'; FvideoDimensions: TOTMediaResolution; external name 'videoDimensions'; FVideoType: string; external name 'videoType'; Public Property Connection : TOTConnection Read FConnection; Property CreationTime : NativeInt Read FCreationTime; Property FrameRate : NativeInt Read FFrameRate; Property HasAudio : Boolean Read FHasAudio; Property HasVideo : Boolean Read FHasVideo; Property Name : string Read FName; Property StreamId : string Read FStreamID; Property VideoDimensions : TOTMediaResolution Read FvideoDimensions; Property VideoType : string Read FVideoType; end; TOTCapabilities = Class external name 'Capabilities' (TJSObject) Private FforceDisconnect : byte; external name 'forceDisconnect'; FforceUnpublish : byte; external name 'forceUnpublish'; Fpublish : byte; external name 'publish'; Fsubscribe : byte; external name 'subscribe'; Public Property forceDisconnect : byte Read FforceDisconnect Write FforceDisconnect; Property forceUnpublish : byte Read FforceUnpublish Write FforceUnpublish; Property publish : byte Read Fpublish Write Fpublish; Property subscribe : byte Read Fsubscribe Write Fsubscribe; end; { TOTScreenSharingCapabilities } TOTScreenSharingCapabilities = Class external name 'Object' (TJSOBject) private FextensionRegistered: Boolean; external name 'extensionRegistered'; FextensionInstalled: boolean; external name 'extensionInstalled'; FextensionRequired: string; external name 'extensionRequired'; FSupported: boolean;external name 'supported'; FsupportedSources: TJSObject;external name 'supportedSources'; Public Property extensionInstalled : boolean Read FextensionInstalled; Property supported : boolean read FSupported; Property supportedSources : TJSObject read FsupportedSources ; deprecated; Property extensionRequired : string read FextensionRequired; Property extensionRegistered : Boolean read FextensionRegistered; end; TOTScreenSharingCapabilityCallback = reference to Procedure (aResponse : TOTScreenSharingCapabilities); { TOTDevice } TOTDevice = class external name 'Object' (TJSOBject) private FDeviceID: string; external name 'deviceId'; FKind: string; external name 'kind'; FLabel: String; external name 'label'; Public Property DeviceId : string read FDeviceID; Property Kind : string read FKind; Property Label_ : String read FLabel; end; TOTDeviceDynArray = Array of TOTDevice; { TOTGetDevicesResponse } TOTGetDevicesResponse = Class external name 'Object' (TJSOBject) private FDevices: TOTDeviceDynArray; external name 'devices'; FError: TOTError; external name 'devices'; Public Property Devices : TOTDeviceDynArray read FDevices; Property Error : TOTError read FError; end; TOTGetDevicesCallback = reference to Procedure (aResponse : TOTGetDevicesResponse); { TOTSupportedCodecsResponse } TOTSupportedCodecsResponse = class external name 'Object' (TJSObject) private FvideoDecoders: TStringDynArray; external name 'videoDecoders'; FVideoEncoders: TStringDynArray; external name 'videoEncoders'; public Property VideoDecoders : TStringDynArray Read FvideoDecoders; Property VideoEncoders : TStringDynArray read FVideoEncoders; end; TOTGetUserMediaOptions = class external name 'Object' (TJSObject) Private FaudioSource : JSValue; external name 'audioSource'; FaudioSourceString : String; external name 'audioSource'; FaudioSourceBoolean : boolean; external name 'audioSource'; FaudioSourceTrack : TJSMediaStreamTrack; external name 'audioSource'; FenableStereo : Boolean; external name 'enableStereo'; FdisableAudioProcessing : Boolean; external name 'disableAudioProcessing'; FfacingMode : string; external name 'facingMode'; FframeRate : Byte;external name 'frameRate'; FmaxResolution : TOTMediaResolution; external name 'maxResolution'; Fresolution : string; external name 'resolution'; FvideoSource : JSValue; external name 'videoSource'; FvideoSourceString : String; external name 'videoSource'; FvideoSourceBoolean : boolean; external name 'videoSource'; FvideoSourceTrack : TJSMediaStreamTrack; external name 'videoSource'; Public Property AudioSource : JSValue Read FaudioSource Write FaudioSource; Property AudioSourceString : String Read FaudioSourceString Write FaudioSourceString; Property AudioSourceBoolean : boolean Read FaudioSourceBoolean Write FaudioSourceBoolean; Property AudioSourceTrack : TJSMediaStreamTrack Read FaudioSourceTrack Write FaudioSourceTrack; Property DisableAudioProcessing : Boolean Read FdisableAudioProcessing Write FdisableAudioProcessing; Property EnableStereo : Boolean Read FenableStereo Write FenableStereo; Property FacingMode : string Read FfacingMode Write FfacingMode; Property FrameRate : Byte Read FframeRate Write FframeRate; Property MaxResolution : TOTMediaResolution Read FmaxResolution Write FmaxResolution; Property Resolution : string Read Fresolution Write Fresolution; Property VideoSource : JSValue Read FvideoSource Write FvideoSource; Property VideoSourceString : String Read FvideoSourceString Write FvideoSourceString; Property VideoSourceBoolean : boolean Read FvideoSourceBoolean Write FvideoSourceBoolean; Property VideoSourceTrack : TJSMediaStreamTrack Read FvideoSourceTrack Write FvideoSourceTrack; end; TOTUIStyle = Class external name 'Object' (TJSObject) Public FarchiveStatusDisplayMode : string; external name 'archiveStatusDisplayMode'; FaudioLevelDisplayMode : string; external name 'audioLevelDisplayMode'; FbackgroundImageURI : String; external name 'backgroundImageURI'; FbuttonDisplayMode : String; external name 'buttonDisplayMode'; FnameDisplayMode : string; external name 'nameDisplayMode'; Public Property ArchiveStatusDisplayMode : string Read FarchiveStatusDisplayMode Write FarchiveStatusDisplayMode; Property AudioLevelDisplayMode : string Read FaudioLevelDisplayMode Write FaudioLevelDisplayMode; Property BackgroundImageURI : String Read FbackgroundImageURI Write FbackgroundImageURI; Property ButtonDisplayMode : String Read FbuttonDisplayMode Write FbuttonDisplayMode; Property NameDisplayMode : string Read FnameDisplayMode Write FnameDisplayMode; end; TOTInitPublisherOptions = Class external name 'Object' (TOTGetUserMediaOptions) Private FaudioBitrate : Nativeint; external name 'audioBitrate'; FaudioFallbackEnabled : Boolean; external name 'audioFallbackEnabled'; FfitMode: string; external name 'fitMode'; Fheight : NativeInt; external name 'height'; FheightString : String; external name 'height'; // Same as height but as string; FinsertDefaultUI : Boolean; external name 'insertDefaultUI'; FinsertMode : string; external name 'insertMode'; Fmirror : boolean; external name 'mirror'; Fname : string;external name 'name'; FpublishAudio : Boolean; external name 'publishAudio'; FpublishVideo : Boolean; external name 'publishVideo'; FshowControls : Boolean; external name 'showControls'; Fstyle : TOTUIStyle; external name 'style'; FusePreviousDeviceSelection : Boolean; external name 'usePreviousDeviceSelection'; Fwidth : NativeInt; external name 'width'; FwidthString : String; external name 'width'; // Same as width but as string; Public Property AudioBitrate : Nativeint Read FaudioBitrate Write FaudioBitrate ; Property AudioFallbackEnabled : Boolean Read FaudioFallbackEnabled Write FaudioFallbackEnabled ; Property FitMode: string Read FfitMode Write FfitMode ; Property Height : NativeInt Read Fheight Write Fheight ; Property HeightString : String Read FheightString Write FheightString ; Property InsertDefaultUI : Boolean Read FinsertDefaultUI Write FinsertDefaultUI ; Property InsertMode : string Read FinsertMode Write FinsertMode ; Property Mirror : boolean Read Fmirror Write Fmirror ; Property Name : string Read Fname Write Fname ; Property PublishAudio : Boolean Read FpublishAudio Write FpublishAudio ; Property PublishVideo : Boolean Read FpublishVideo Write FpublishVideo ; Property ShowControls : Boolean Read FshowControls Write FshowControls ; Property Style : TOTUIStyle Read Fstyle Write Fstyle ; Property UsePreviousDeviceSelection : Boolean Read FusePreviousDeviceSelection Write FusePreviousDeviceSelection ; Property Width : NativeInt Read Fwidth Write Fwidth ; Property WidthString : String Read FwidthString Write FwidthString ; end; TOTInitPublisherCallback = TOTErrorHandler; TOTInitSessionOptions = Class external name 'Object' (TJSObject) Protected FconnectionEventsSuppressed : Boolean; external name 'connectionEventsSuppressed'; FipWhitelist : boolean; external name 'ipWhitelist'; FiceConfig : TJSObject; external name 'iceConfig'; Public Property ConnectionEventsSuppressed : Boolean Read FconnectionEventsSuppressed Write FconnectionEventsSuppressed ; Property IPWhitelist : boolean Read FipWhitelist Write FipWhitelist ; Property IceConfig : TJSObject Read FiceConfig Write FiceConfig ; end; TOTSubscriberAudioStats = record bytesReceived : NativeInt; packetsLost : NativeInt; packetsReceived : NativeInt; end; TOTSubscriberVideoStats = record bytesReceived : NativeInt; frameRate : NativeInt; packetsLost : NativeInt; packetsReceived : NativeInt; end; { TOTSubscriberStats } TOTSubscriberStats = Class external name 'Object' (TJSObject) private Faudio: TOTSubscriberAudioStats; external name 'audio'; FTimeStamp: NativeInt; external name 'timestamp'; Fvideo: TOTSubscriberVideoStats; external name 'video'; Public Property audio : TOTSubscriberAudioStats Read Faudio; Property timestamp : NativeInt Read FTimeStamp; Property video : TOTSubscriberVideoStats Read Fvideo; end; TOTSubscriberStatsCallBack = Reference to Procedure (Error : TOTError; Stats : TOTSubscriberStats); TOTSubscriberStyleOptions = class external name 'Object' (TJSObject) Private FaudioBlockedDisplayMode : string; external name 'audioBlockedDisplayMode'; FaudioLevelDisplayMode : string; external name 'audioLevelDisplayMode'; FarchiveStatusDisplayMode : string; external name 'archiveStatusDisplayMode'; FbackgroundImageURI : String; external name 'backgroundImageURI'; FbuttonDisplayMode : string; external name 'buttonDisplayMode'; FnameDisplayMode : string; external name 'nameDisplayMode'; FvideoDisabledDisplayMode : string; external name 'videoDisabledDisplayMode'; Public Property AudioBlockedDisplayMode : string Read FaudioBlockedDisplayMode Write FaudioBlockedDisplayMode ; Property AudioLevelDisplayMode : string Read FaudioLevelDisplayMode Write FaudioLevelDisplayMode ; Property ArchiveStatusDisplayMode : string Read FarchiveStatusDisplayMode Write FarchiveStatusDisplayMode ; Property BackgroundImageURI : String Read FbackgroundImageURI Write FbackgroundImageURI ; Property ButtonDisplayMode : string Read FbuttonDisplayMode Write FbuttonDisplayMode ; Property NameDisplayMode : string Read FnameDisplayMode Write FnameDisplayMode ; Property VideoDisabledDisplayMode : string Read FvideoDisabledDisplayMode Write FvideoDisabledDisplayMode ; end; { TOTSubscriber } TOTSubscriber = Class external name 'Subscriber' (TOTEventDispatcher) private FElement: TJSHTMLElement; external name 'element'; FID: String; external name 'id'; FStream: TOTStream; external name 'stream'; Public Function getAudioVolume : NativeInt; Function getImgData : String; Procedure getStats(CallBack : TOTSubscriberStatsCallBack); Function getStyle : TJSObject; Function isAudioBlocked : boolean; Function restrictFrameRate(aValue : Boolean) : TOTSubscriber; Function setAudioVolume(aValue : NativeInt) : TOTSubscriber; Procedure setPreferredFrameRate(aFrameRate : NativeInt); Procedure setPreferredResolution(aResolution : TOTMediaResolution); Function setStyle(aStyle : TOTSubscriberStyleOptions) : TOTSubscriber; overload; Function setStyle(aProp,aValue : String): TOTSubscriber; overload; Function subscribeToAudio(aValue : Boolean) : TOTSubscriber; Function subscribeToVideo(aValue : Boolean) : TOTSubscriber; Function videoHeight : NativeInt; Function videoWidth : NativeInt; Public Property Element : TJSHTMLElement Read FElement; Property ID : String Read FID; Property Stream : TOTStream Read FStream; end; TOTSubscriberArray = Array of TOTSubscriber; { TOTSession } TOTConnectCallBack = TOTErrorHandler; TOTSignalData = Class external name 'Object' (TJSObject) Private Fdata : string; external name 'data'; FretryAfterReconnect : Boolean; external name 'retryAfterReconnect'; Fto : TOTConnection; external name 'to'; FType : string; external name 'type'; Public Property Data : string Read FData Write FData; Property RetryAfterReconnect : Boolean Read FretryAfterReconnect Write FretryAfterReconnect; Property To_ : TOTConnection Read FTo Write FTo; Property Type_ : string Read FType Write FType; end; { TJSSubscribeStyle } TJSSubscribeStyle = class external name 'Object' (TJSObject) Private FaudioBlockedDisplayMode : string; external name 'audioBlockedDisplayMode'; FaudioLeveldDisplayMode : string; external name 'audioLeveldDisplayMode'; FbackgroundImageURI : String; external name 'backgroundImageURI'; FbuttonDisplayMode : string; external name 'buttonDisplayMode'; FnameDisplayMode : string; external name 'nameDisplayMode'; FvideoDisabledDisplayMode : String; external name 'videoDisabledDisplayMode'; Public Property AudioBlockedDisplayMode : string Read FaudioBlockedDisplayMode Write FaudioBlockedDisplayMode; Property AudioLeveldDisplayMode : string Read FaudioLeveldDisplayMode Write FaudioLeveldDisplayMode; Property BackgroundImageURI : String Read FbackgroundImageURI Write FbackgroundImageURI; Property ButtonDisplayMode : string Read FbuttonDisplayMode Write FbuttonDisplayMode; Property NameDisplayMode : string Read FnameDisplayMode Write FnameDisplayMode; Property VideoDisabledDisplayMode : String Read FvideoDisabledDisplayMode Write FvideoDisabledDisplayMode; end; { TOTInitSubscriberOptions } TOTInitSubscriberOptions = class external name 'Object' (TJSObject) Private FaudioVolume : Byte; external name 'audioVolume'; Ffitmode : string; external name 'fitmode'; Fheight : NativeInt; external name 'height'; FheightString : String; external name 'height'; FinsertDefaultUI : Boolean; external name 'insertDefaultUI'; FinsertMode : string; external name 'insertMode'; FpreferredFrameRate : NativeInt; external name 'preferredFrameRate'; FpreferredResolution : TOTMediaResolution; external name 'preferredResolution'; FshowControls : Boolean; external name 'showControls'; Fstyle : TJSSubscribeStyle; external name 'style'; FsubscribeToAudio : Boolean; external name 'subscribeToAudio'; FsubscribeToVideo : Boolean; external name 'subscribeToVideo'; FtestNetwork : Boolean; external name 'testNetwork'; Fwidth : NativeInt; external name 'width'; FwidthString : String; external name 'width'; Public Property AudioVolume : Byte read FaudioVolume Write FaudioVolume; Property Fitmode : string read Ffitmode Write Ffitmode; Property Height : NativeInt read Fheight Write Fheight; Property HeightString : String read FheightString Write FheightString; // height as string; Property InsertDefaultUI : Boolean read FinsertDefaultUI Write FinsertDefaultUI; Property InsertMode : string read FinsertMode Write FinsertMode; Property PreferredFrameRate : NativeInt read FpreferredFrameRate Write FpreferredFrameRate; Property PreferredResolution : TOTMediaResolution read FpreferredResolution Write FpreferredResolution; Property ShowControls : Boolean read FshowControls Write FshowControls; Property Style : TJSSubscribeStyle read Fstyle Write Fstyle; Property SubscribeToAudio : Boolean read FsubscribeToAudio Write FsubscribeToAudio; Property SubscribeToVideo : Boolean read FsubscribeToVideo Write FsubscribeToVideo; Property TestNetwork : Boolean read FtestNetwork Write FtestNetwork; Property Width : NativeInt read Fwidth Write Fwidth; Property WidthString : String read FwidthString Write FwidthString; // width as string; end; TOTSession = Class external name 'Session' (TOTEventDispatcher) private FCapabilities: TOTCapabilities; external name 'capabilities'; FConnection: TOTConnection; external name 'connection'; FSessionID: string; external name 'sessionId'; public Procedure connect(aToken : String; callback : TOTConnectCallBack); Procedure disconnect; Procedure forceDisconnect(aConnection : TOTConnection; callBack : TOTConnectCallBack); Procedure forceUnpublish(aStream : TOTStream; callBack : TOTConnectCallBack); Function getPublisherForStream(aStream : TOTStream) : TOTPublisher; Function getSubscribersForStream(aStream : TOTStream) : TOTSubscriberArray; Function publish(aPublisher : TOTPublisher; callBack : TOTErrorHandler) : TOTPublisher; overload; Function publish(aPublisher : TOTPublisher) : TOTPublisher; overload; Procedure signal(aSignal : TJSObject; callBack :TOTErrorHandler); Procedure signal(aSignal : TOTSignalData; callBack :TOTErrorHandler); Function subscribe(stream : TOTStream; target : TJSHTMLElement; aProperties : TOTInitSubscriberOptions; callBack : TOTErrorHandler) : TOTSubscriber; overload; Function subscribe(stream : TOTStream; targetID : String; aProperties : TOTInitSubscriberOptions; callBack : TOTErrorHandler) : TOTSubscriber; overload; Procedure unpublish(aPublisher : TOTPublisher); Procedure unsubscribe(aSubscriber : TOTSubscriber); Public Property Capabilities : TOTCapabilities Read FCapabilities; Property Connnection : TOTConnection Read FConnection; Property SessionId : string Read FSessionID; end; TOTPublisherAudioStats = record bytesSent : NativeInt; packetsLost : NativeInt; packetsSent : NativeInt; end; TOTPublisherVideoStats = record bytesSent : NativeInt; frameRate : NativeInt; packetsLost : NativeInt; packetsSent : NativeInt; end; TOTPublisherStatsRecord = record audio : TOTPublisherAudioStats; timestamp : NativeInt; video : TOTPublisherVideoStats; end; { TOTPublisherStats } TOTPublisherStats = class external name 'Object' (TJSObject) private FConnectionID: String; external name 'connectionId'; FStats: TOTPublisherStatsRecord; external name 'stats'; FSubscriberID: String; external name 'subscriberId'; Public Property ConnectionId : String read FConnectionID; Property Stats : TOTPublisherStatsRecord read FStats; Property SubscriberId : String Read FSubscriberID; end; TOTPublisherStatsArray = Array of TOTPublisherStats; TOTPublisherStatsCallback = Reference to Procedure (error : TOTError; StatsArray : TOTPublisherStatsArray); { TOTPublisherStyleOptions } TOTPublisherStyleOptions = class external name 'Object' (TJSObject) Private FarchiveStatusDisplayMode : string; external name 'archiveStatusDisplayMode'; FaudioLevelDisplayMode : string; external name 'audioLevelDisplayMode'; FbackgroundImageURI : String; external name 'backgroundImageURI'; FbuttonDisplayMode : string; external name 'buttonDisplayMode'; FnameDisplayMode : string; external name 'nameDisplayMode'; Public Property ArchiveStatusDisplayMode : string Read FArchiveStatusDisplayMode Write FArchiveStatusDisplayMode; Property AudioLevelDisplayMode : string Read FaudioLevelDisplayMode Write FaudioLevelDisplayMode; Property BackgroundImageURI : String Read FbackgroundImageURI Write FbackgroundImageURI; Property ButtonDisplayMode : string Read FbuttonDisplayMode Write FbuttonDisplayMode; Property NameDisplayMode : string Read FnameDisplayMode Write FnameDisplayMode; end; { TOTPublisher } TOTPublisher = Class external name 'Publisher' (TOTEventDispatcher) private FaccessAllowed: Boolean; external name 'accessAllowed'; Felement: TJSHTMLElement; external name 'element'; FID: string;external name 'id'; FSession: TOTSession;external name 'session'; FStream: TOTStream;external name 'stream'; public Function cycleVideo : TJSPromise; Function destroy : TOTPublisher; Function getAudioSource : TJSMediaStreamTrack; Function getImgData : String; Procedure getStats (callback : TOTPublisherStatsCallback); Function getStyle : TJSObject; Procedure publishAudio(value : Boolean); Procedure publishVideo(value : Boolean); Function setAudioSource(aID : String) : TJSPromise; overload; Function setAudioSource(aStream : TJSMediaStreamTrack) : TJSPromise; overload; Function setStyle(aStyle : TOTPublisherStyleOptions) : TOTPublisher; overload; Function setStyle(aProp,aValue : String): TOTPublisher; overload; Function videoHeight : NativeInt; Function videoWidth : NativeInt; Public Property AccessAllowed : Boolean read FaccessAllowed; Property Element : TJSHTMLElement read Felement; Property ID : string read FID; Property Stream : TOTStream Read FStream; Property Session : TOTSession read FSession; end; { --------------------------------------------------------------------- Main class, serves as namespace. ---------------------------------------------------------------------} { TOT } TOTReportIssueCallBack = reference to Procedure (err : TOTError; reportID : string); TOT = Class external name 'OT' (TOTEventDispatcher) Public const NONE : Integer; const ERROR : Integer; const WARN : Integer; const INFO : Integer; const LOG_ : Integer; // Cannot use external name :( const DEBUG : Integer; Public class Procedure checkScreenSharingCapability(callBack : TOTScreenSharingCapabilityCallback); class Function checkSystemRequirements : NativeInt; class Procedure getDevices(callBack : TOTGetDevicesCallback); class Function getSupportedCodecs : TJSPromise; class Function getUserMedia : TJSPromise; class Function getUserMedia(options : TOTGetUserMediaOptions) : TJSPromise; class Function initPublisher(aElement : TJSHTMLElement; properties : TOTInitPublisherOptions; CompletionHandler : TOTInitPublisherCallback) : TOTPublisher; class Function initPublisher(aElementId : String; properties : TOTInitPublisherOptions; CompletionHandler : TOTInitPublisherCallback) : TOTPublisher; class Function initSession(APIKey,SessionID : String) : TOTSession; overload; class Function initSession(APIKey,SessionID : String; Options : TOTInitSessionOptions) : TOTSession; overload; class Procedure log(msg : string); class Procedure registerScreenSharingExtension(kind : String; id : string; version : Integer); class Procedure reportIssue(aCallBack : TOTReportIssueCallBack); class Procedure setLogLevel(Number : String); class Procedure unblockAudio; class Procedure upgradeSystemRequirements; end; TOTClass = Class of TOT; var OpenTok : TOTClass; external name 'OT'; implementation end.