UNPKG

ngx-agora

Version:

Angular wrapper for Agora RTC client (https://www.agora.io/en/)

4,839 lines 190 kB
import { Injectable, Inject, ɵɵdefineInjectable, ɵɵinject, Component, NgModule } from '@angular/core';
import * as agoraSDK from 'agora-rtc-sdk';

/**
 * @fileoverview added by tsickle
 * Generated from: lib/ngx-agora.service.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * Provides access to the Agora web API, including the AgoraRTC and Client objects.
 */
var NgxAgoraService = /** @class */ (function () {
    function NgxAgoraService(config) {
        this.config = config;
        /**
         * All audio devices collected from the AgoraRTC `getDevices()` method.
         * @see [getDevices()](https://docs.agora.io/en/Video/API%20Reference/web/globals.html#getdevices)
         *
         */
        this.audioDevices = [];
        /**
         * All video devices collected from the AgoraRTC `getDevices()` method.
         * @see [getDevices()](https://docs.agora.io/en/Video/API%20Reference/web/globals.html#getdevices)
         */
        this.videoDevices = [];
        /**
         * Instance reference to the `static` AgoraRTC library object.
         */
        this.AgoraRTC = NgxAgoraService.AgoraRTC;
        if (!this.checkSystemRequirements()) {
            this.AgoraRTC.Logger.error('Web RTC is not supported in this browser');
        }
        else {
            this.collectDevices();
        }
    }
    /**
     * Checks the Web Browser Compatibility
     *
     * This method checks the compatibility between the Web SDK and the current web browser.
     * Use this method before calling createClient to check the compatibility between the system and the web browser.
     *
     * - true: The Web SDK is compatible with the current web browser.
     * - false: The Web SDK is not compatible with the current web browser.
     *
     * @remark
     * Agora has yet to conduct comprehensive tests on Chromium kernel browsers, such as QQ and 360.
     * Agora will gradually achieve compatibility on most mainstream browsers in subsequent versions of the Web SDK.
     */
    /**
     * Checks the Web Browser Compatibility
     *
     * This method checks the compatibility between the Web SDK and the current web browser.
     * Use this method before calling createClient to check the compatibility between the system and the web browser.
     *
     * - true: The Web SDK is compatible with the current web browser.
     * - false: The Web SDK is not compatible with the current web browser.
     *
     * \@remark
     * Agora has yet to conduct comprehensive tests on Chromium kernel browsers, such as QQ and 360.
     * Agora will gradually achieve compatibility on most mainstream browsers in subsequent versions of the Web SDK.
     * @return {?}
     */
    NgxAgoraService.prototype.checkSystemRequirements = /**
     * Checks the Web Browser Compatibility
     *
     * This method checks the compatibility between the Web SDK and the current web browser.
     * Use this method before calling createClient to check the compatibility between the system and the web browser.
     *
     * - true: The Web SDK is compatible with the current web browser.
     * - false: The Web SDK is not compatible with the current web browser.
     *
     * \@remark
     * Agora has yet to conduct comprehensive tests on Chromium kernel browsers, such as QQ and 360.
     * Agora will gradually achieve compatibility on most mainstream browsers in subsequent versions of the Web SDK.
     * @return {?}
     */
    function () {
        return this.AgoraRTC.checkSystemRequirements();
    };
    /**
     * Creates a Client object.
     *
     * This method creates and returns a client object. You can only call this method once each call session.
     *
     * @param config
     * Defines the property of the client, see
     * [ClientConfig](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.clientconfig.html) for details.
     * @param [autoInitializing=true] Ngx-agora by default automatically initializes the client with the provided `AppID` after it is created.
     * Set this property to `false` to disable this functionality, if you are going to call `init()` separately
     * (after creating the client only).
     * @param [onSuccess] The callback when the method succeeds.
     * @param [onFailure] The callback when the method fails.
     *
     * @example
     * AgoraRTC.createClient(config);
     */
    /**
     * Creates a Client object.
     *
     * This method creates and returns a client object. You can only call this method once each call session.
     *
     * \@example
     * AgoraRTC.createClient(config);
     * @param {?} config
     * Defines the property of the client, see
     * [ClientConfig](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.clientconfig.html) for details.
     * @param {?=} autoInitializing
     * @param {?=} onSuccess
     * @param {?=} onFailure
     * @return {?}
     */
    NgxAgoraService.prototype.createClient = /**
     * Creates a Client object.
     *
     * This method creates and returns a client object. You can only call this method once each call session.
     *
     * \@example
     * AgoraRTC.createClient(config);
     * @param {?} config
     * Defines the property of the client, see
     * [ClientConfig](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.clientconfig.html) for details.
     * @param {?=} autoInitializing
     * @param {?=} onSuccess
     * @param {?=} onFailure
     * @return {?}
     */
    function (config, autoInitializing, onSuccess, onFailure) {
        if (autoInitializing === void 0) { autoInitializing = true; }
        this.client = this.AgoraRTC.createClient(config);
        if (autoInitializing) {
            this.init(this.config.AppID, onSuccess, onFailure);
        }
        return this.client;
    };
    /**
     * This method creates and returns a stream object.
     *
     * @example
     * AgoraRTC.createStream(spec)
     *
     * @param spec Defines the properties of the stream
     * @see [StreamSpec](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.streamspec.html) for details.
     */
    /**
     * This method creates and returns a stream object.
     *
     * \@example
     * AgoraRTC.createStream(spec)
     *
     * @see [StreamSpec](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.streamspec.html) for details.
     * @param {?} spec Defines the properties of the stream
     * @return {?}
     */
    NgxAgoraService.prototype.createStream = /**
     * This method creates and returns a stream object.
     *
     * \@example
     * AgoraRTC.createStream(spec)
     *
     * @see [StreamSpec](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.streamspec.html) for details.
     * @param {?} spec Defines the properties of the stream
     * @return {?}
     */
    function (spec) {
        if (!spec.microphoneId && this.audioDevices && this.audioDevices.length) {
            /** @type {?} */
            var defaultMic = this.audioDevices[0].deviceId;
            spec.microphoneId = defaultMic;
        }
        if (!spec.cameraId && this.videoDevices && this.videoDevices.length) {
            /** @type {?} */
            var defaultCamera = this.videoDevices[0].deviceId;
            spec.cameraId = spec.cameraId || defaultCamera;
        }
        return this.AgoraRTC.createStream(spec);
    };
    /**
     * Initializes the Client object.
     *
     * @param appId Pass in the App ID for your project.
     * ASCII characters only, and the string length must be greater than 0 and less than 256 bytes.
     * To get your App ID,
     * @see [Get an App ID](https://docs.agora.io/en/Video/web_prepare?platform=Web#create-an-agora-account-and-get-an-app-id).
     * @param [onSuccess] The callback when the method succeeds.
     * @param [onFailure] The callback when the method fails.
     *
     * @example
     * this.ngxAgoraService.client.init(appId, () => {
     * console.log("client initialized");
     * // Join a channel
     * //……
     * }, error => {
     *     console.log("client init failed ", err);
     *     // Error handling
     * });
     */
    /**
     * Initializes the Client object.
     *
     * @see [Get an App ID](https://docs.agora.io/en/Video/web_prepare?platform=Web#create-an-agora-account-and-get-an-app-id).
     * \@example
     * this.ngxAgoraService.client.init(appId, () => {
     * console.log("client initialized");
     * // Join a channel
     * //……
     * }, error => {
     *     console.log("client init failed ", err);
     *     // Error handling
     * });
     * @param {?} appId Pass in the App ID for your project.
     * ASCII characters only, and the string length must be greater than 0 and less than 256 bytes.
     * To get your App ID,
     * @param {?=} onSuccess
     * @param {?=} onFailure
     * @return {?}
     */
    NgxAgoraService.prototype.init = /**
     * Initializes the Client object.
     *
     * @see [Get an App ID](https://docs.agora.io/en/Video/web_prepare?platform=Web#create-an-agora-account-and-get-an-app-id).
     * \@example
     * this.ngxAgoraService.client.init(appId, () => {
     * console.log("client initialized");
     * // Join a channel
     * //……
     * }, error => {
     *     console.log("client init failed ", err);
     *     // Error handling
     * });
     * @param {?} appId Pass in the App ID for your project.
     * ASCII characters only, and the string length must be greater than 0 and less than 256 bytes.
     * To get your App ID,
     * @param {?=} onSuccess
     * @param {?=} onFailure
     * @return {?}
     */
    function (appId, onSuccess, onFailure) {
        this.client.init(appId, onSuccess, onFailure);
    };
    /**
     * Attempts to automatically collect audio and video devices from the AgoraRTC `getDevices()` method.
     */
    /**
     * Attempts to automatically collect audio and video devices from the AgoraRTC `getDevices()` method.
     * @private
     * @return {?}
     */
    NgxAgoraService.prototype.collectDevices = /**
     * Attempts to automatically collect audio and video devices from the AgoraRTC `getDevices()` method.
     * @private
     * @return {?}
     */
    function () {
        var _this = this;
        this.AgoraRTC.getDevices((/**
         * @param {?} devices
         * @return {?}
         */
        function (devices) {
            /** @type {?} */
            var audioDevices = devices.filter((/**
             * @param {?} device
             * @return {?}
             */
            function (device) {
                return device.kind === 'audioinput' && device.deviceId !== 'default';
            }));
            /** @type {?} */
            var videoDevices = devices.filter((/**
             * @param {?} device
             * @return {?}
             */
            function (device) {
                return device.kind === 'videoinput' && device.deviceId !== 'default';
            }));
            _this.audioDevices = audioDevices;
            _this.videoDevices = videoDevices;
        }));
    };
    NgxAgoraService.AgoraRTC = agoraSDK;
    NgxAgoraService.decorators = [
        { type: Injectable, args: [{
                    providedIn: 'root'
                },] }
    ];
    /** @nocollapse */
    NgxAgoraService.ctorParameters = function () { return [
        { type: undefined, decorators: [{ type: Inject, args: ['config',] }] }
    ]; };
    /** @nocollapse */ NgxAgoraService.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgxAgoraService_Factory() { return new NgxAgoraService(ɵɵinject("config")); }, token: NgxAgoraService, providedIn: "root" });
    return NgxAgoraService;
}());
if (false) {
    /**
     * @type {?}
     * @private
     */
    NgxAgoraService.AgoraRTC;
    /**
     * The local Agora.io Client object.
     * @see [Web Client](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html)
     * @type {?}
     */
    NgxAgoraService.prototype.client;
    /**
     * All audio devices collected from the AgoraRTC `getDevices()` method.
     * @see [getDevices()](https://docs.agora.io/en/Video/API%20Reference/web/globals.html#getdevices)
     *
     * @type {?}
     */
    NgxAgoraService.prototype.audioDevices;
    /**
     * All video devices collected from the AgoraRTC `getDevices()` method.
     * @see [getDevices()](https://docs.agora.io/en/Video/API%20Reference/web/globals.html#getdevices)
     * @type {?}
     */
    NgxAgoraService.prototype.videoDevices;
    /**
     * Instance reference to the `static` AgoraRTC library object.
     * @type {?}
     */
    NgxAgoraService.prototype.AgoraRTC;
    /**
     * @type {?}
     * @private
     */
    NgxAgoraService.prototype.config;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/ngx-agora.component.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
var NgxAgoraComponent = /** @class */ (function () {
    function NgxAgoraComponent() {
    }
    /**
     * @return {?}
     */
    NgxAgoraComponent.prototype.ngOnInit = /**
     * @return {?}
     */
    function () {
    };
    NgxAgoraComponent.decorators = [
        { type: Component, args: [{
                    selector: 'lib-ngx-agora',
                    template: "\n    <p>\n      ngx-agora works!\n    </p>\n  "
                }] }
    ];
    /** @nocollapse */
    NgxAgoraComponent.ctorParameters = function () { return []; };
    return NgxAgoraComponent;
}());

/**
 * @fileoverview added by tsickle
 * Generated from: lib/ngx-agora.module.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
var NgxAgoraModule = /** @class */ (function () {
    function NgxAgoraModule() {
    }
    /**
     * @param {?} config
     * @return {?}
     */
    NgxAgoraModule.forRoot = /**
     * @param {?} config
     * @return {?}
     */
    function (config) {
        return {
            ngModule: NgxAgoraModule,
            providers: [NgxAgoraService, { provide: 'config', useValue: config }]
        };
    };
    NgxAgoraModule.decorators = [
        { type: NgModule, args: [{
                    declarations: [NgxAgoraComponent],
                    exports: [NgxAgoraComponent]
                },] }
    ];
    return NgxAgoraModule;
}());

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/agora-client.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * The Client object returned by the [createClient](https://docs.agora.io/en/Video/API%20Reference/web/globals.html#createclient)
 * method provides access to much of the core AgoraRTC functionality.
 *
 * @see [Web Client](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html)
 * @record
 */
function AgoraClient() { }
if (false) {
    /**
     * Injects an Online Media Stream to a Live Broadcast
     *
     * If this method is called successfully, the server pulls the voice or video stream and
     * injects it into a live channel. This is applicable to scenarios where all of the audience members
     * in the channel can watch a live show and interact with each other.
     *
     *
     * This method call triggers the following callbacks:
     *
     * - On the local client:
     *   - `Client.on("streamInjectedStatus")`, with the state of injecting the online stream.
     *   - `Client.on("stream-added")` and `Client.on("peer-online")` (uid: 666), if the online media stream is injected into the channel.
     *
     * - On the remote client:
     *   - `Client.on("stream-added")` and `Client.on("peer-online")` (uid: 666), if the online media stream is injected into the channel.
     *
     * \@remarks
     * You can only inject one online media stream into the same channel at the same time.
     * Ensure that you [enable the RTMP Converter service](https://docs.agora.io/en/Video/cdn_streaming_web#prerequisites)
     * before using this function.
     *
     * \@param url URL address of the live streaming.
     * ASCII characters only, and the string length must be greater than 0 and less than 256 bytes.
     * Valid protocols are RTMP, HLS, and HTTP-FLV.
     *
     * - Supported FLV audio codec type: AAC.
     * - Supported FLV video codec type: H.264 (AVC).
     *
     * \@param config Configuration of the inject stream, see
     * [InjectStreamConfig](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.injectstreamconfig.html) for details.
     *
     * @see [Inject an Online Media Stream](https://docs.agora.io/en/Interactive%20Broadcast/inject_stream_web?platform=Web) for details.
     * @type {?}
     */
    AgoraClient.prototype.addInjectStreamUrl;
    /**
     * Configures the CDN Live Streaming
     *
     * @deprecated Agora recommends using the following methods instead:
     *  - [startLiveStreaming](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#startlivestreaming)
     *  - [setLiveTranscoding](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#setlivetranscoding)
     *  - [stopLiveStreaming](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#stoplivestreaming)
     * \@description
     * This method configures the CDN live streaming before joining a channel.
     * Call [configPublisher](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#configpublisher) before
     * [Client.join](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#join).
     * \@example
     * client.configPublisher({
     *  width: 360,
     *  height: 640,
     *  framerate: 30,
     *  bitrate: 500,
     *  publishUrl: "rtmp://xxx/xxx/"
     * });
     * @type {?}
     */
    AgoraClient.prototype.configPublisher;
    /**
     * Disables dual streams.
     *
     * \@example
     * client.disableDualStream(() => {
     *   console.log("Disable dual stream success!")
     * }, err => {
     *   console.log(err)
     * })
     * @type {?}
     */
    AgoraClient.prototype.disableDualStream;
    /**
     * Enables the SDK to report the active remote users who are speaking and their volume regularly.
     *
     * If this method is enabled, the SDK will return the volumes every two seconds, regardless of whether there are active speakers.
     *
     * \@remark
     * If you have multiple web pages running the Web SDK, this function might not work.
     *
     * \@example
     * client.enableAudioVolumeIndicator(); // Triggers the "volume-indicator" callback event every two seconds.
     * client.on("volume-indicator", evt => {
     *   evt.attr.forEach((volume, index) => {
     *     console.log(`#${index} UID ${volume.uid} Level ${volume.level}`);
     *   });
     * });
     * @type {?}
     */
    AgoraClient.prototype.enableAudioVolumeIndicator;
    /**
     * Enables the dual-stream mode on the publisher side.
     *
     * Dual streams are a hybrid of a high-video stream and a low-video stream:
     * - High-video stream: high bitrate, high resolution
     * - Low-video stream: low bitrate, low resolution
     *
     * \@example
     * client.enableDualStream(() => {
     *   console.log("Enable dual stream success!")
     * }, err => {
     *   console,log(err)
     * })
     *
     * \@remark
     * This method does not apply to the following scenarios:
     * - The stream is created by defining the audioSource and videoSource properties.
     * - Audio-only mode (audio: true, video: false)
     * - Safari browser on iOS
     * - Screen-sharing scenario
     * @type {?}
     */
    AgoraClient.prototype.enableDualStream;
    /**
     * Enumerates the available video input devices, such as cameras.
     *
     * If this method succeeds, the SDK returns a list of video input devices in an array of MediaDeviceInfo objects.
     * @type {?}
     */
    AgoraClient.prototype.getCameras;
    /**
     * This method returns the state of the connection between the SDK and Agora's edge server.
     *
     * \@description
     * The connection state:
     *  - DISCONNECTED: The SDK is disconnected from Agora's edge server.
     *    This is the initial state before
     *    [Client.join](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#join).
     *    The SDK also enters this state after the app calls
     *    [Client.leave](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#leave).
     *  - CONNECTING: The SDK is connecting to Agora's edge server. The SDK enters this state when
     *    calling [Client.join](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#join)
     *    or reconnecting to Agora's edge server automatically after the connection is lost.
     *  - CONNECTED: The SDK is connected to Agora's edge server and joins a channel. You can now publish or
     *    subscribe to a stream in the channel.
     *  - DISCONNECTING: The SDK is disconnecting from Agora's edge server. The SDK enters this state when calling
     *    [Client.leave](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#leave).
     * @type {?}
     */
    AgoraClient.prototype.getConnectionState;
    /**
     * Retrieves the Audio Statistics of the Local Stream
     *
     * This method retrieves the audio statistics of the published stream,
     * including audio codec type, sampling rate, bitrate, and so on.
     *
     * \@description
     *  - Some of the statistics are calculated after the stream-published event, which may take at most 3 seconds.
     * - This method supports the Chrome browser only.
     * \@example
     * client.getLocalAudioStats((localAudioStats) => {
     *  Object.keys(localAudioStats).forEach(uid => {
     *   console.log(`Audio CodecType from ${uid}: ${localAudioStats[uid].CodecType}`);
     *   console.log(`Audio MuteState from ${uid}: ${localAudioStats[uid].MuteState}`);
     *   console.log(`Audio RecordingLevel from ${uid}: ${localAudioStats[uid].RecordingLevel}`);
     *   console.log(`Audio SamplingRate from ${uid}: ${localAudioStats[uid].SamplingRate}`);
     *   console.log(`Audio SendBitrate from ${uid}: ${localAudioStats[uid].SendBitrate}`);
     *   console.log(`Audio SendLevel from ${uid}: ${localAudioStats[uid].SendLevel}`);
     *  })
     * });
     * @type {?}
     */
    AgoraClient.prototype.getLocalAudioStats;
    /**
     * Retrieves the Video Statistics of the Local Stream
     *
     * This method retrieves the video statistics of the published stream, including video resolution, bitrate, frame rate, and so on.
     *
     * \@description
     * Some of the statistics are calculated after the stream-published event, which may take at most 3 seconds.
     * This method supports the Chrome browser only.
     * @type {?}
     */
    AgoraClient.prototype.getLocalVideoStats;
    /**
     * Gets the Statistics of the System Network
     * @deprecated from v2.5.1, use getTransportStats instead.
     *
     * This method gets the statistics of the browser's local network.
     * Currently only the network type information is provided, see NetworkType.
     *
     * \@description
     * Chrome 61+ is required for this function, and the compatibility is not guaranteed. See Network Information API for details.
     * @type {?}
     */
    AgoraClient.prototype.getNetworkStats;
    /**
     * Enumerates Audio Output Devices
     *
     * This method enumerates the available audio output devices, such as speakers.
     * If this method succeeds, the SDK returns a list of audio output devices in an array of
     * [MediaDeviceInfo](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.mediadeviceinfo.html) objects.
     * @type {?}
     */
    AgoraClient.prototype.getPlayoutDevices;
    /**
     * Enumerates Audio Input Devices
     *
     * This method enumerates the available audio input devices, such as microphones.
     * If this method succeeds, the SDK returns a list of audio input devices in an array of MediaDeviceInfo objects.
     * @type {?}
     */
    AgoraClient.prototype.getRecordingDevices;
    /**
     * Retrieves the Audio Statistics of the Remote Stream
     * This method retrieves the audio statistics of the remote stream, including audio codec type, packet loss rate, bitrate, and so on.
     *
     * \@description
     * The statistics are calculated after the `stream-subscribed` event, which may take at most 3 seconds.
     * This method supports the Chrome browser only.
     * @type {?}
     */
    AgoraClient.prototype.getRemoteAudioStats;
    /**
     * Retrieves the Video Statistics of the Remote Stream
     * This method retrieves the video statistics of the remote stream, including packet loss rate, video bitrate, frame rate, and so on.
     *
     * \@description
     * The statistics are calculated after the `stream-subscribed` event, which may take at most 3 seconds.
     * This method supports the Chrome browser only.
     * @type {?}
     */
    AgoraClient.prototype.getRemoteVideoStats;
    /**
     * Gets the Statistics of the Session
     * This method gets the statistics of the session connection.
     *
     * \@description
     * This method should be called after joining the channel, and it may take at most 3 seconds to retrieve the statistics.
     * This method supports the Chrome browser only.
     * @type {?}
     */
    AgoraClient.prototype.getSessionStats;
    /**
     * Gets the Statistics of the System
     *
     * This method gets the statistics of the system.
     *
     * Currently only the battery level information is provided.
     * @see [BatteryLevel](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.systemstats.html#batterylevel).
     *
     * \@description
     * This feature is experimental.
     * @see [Battery Status API](https://developer.mozilla.org/en-US/docs/Web/API/Battery_Status_API) for browser compatibility.
     * @type {?}
     */
    AgoraClient.prototype.getSystemStats;
    /**
     * Gets the Statistics of the Transmission
     * This method gets the statistics of the transmission quality to Agora service.
     *
     * \@description
     * Calculation of the statistics may take at most 3 seconds.
     * This method supports the Chrome browser only.
     * @type {?}
     */
    AgoraClient.prototype.getTransportStats;
    /**
     * Initializes the Client object.
     *
     * \@param appId Pass in the App ID for your project.
     * ASCII characters only, and the string length must be greater than 0 and less than 256 bytes.
     * To get your App ID,
     * @see [Get an App ID](https://docs.agora.io/en/Video/web_prepare?platform=Web#create-an-agora-account-and-get-an-app-id).
     * \@param [onSuccess] The callback when the method succeeds.
     * \@param [onFailure] The callback when the method fails.
     *
     * \@example
     * client.init(appId, () => {
     * console.log("client initialized");
     * // Join a channel
     * //……
     * }, err => {
     *     console.log("client init failed ", err);
     *     // Error handling
     * });
     * @type {?}
     */
    AgoraClient.prototype.init;
    /**
     * Joins an AgoraRTC Channel
     * This method joins an AgoraRTC channel.
     *
     * \@description
     * All users in the same channel should have the same type (number or string) of uid.
     *  - If you use a number as the user ID, it should be a 32-bit unsigned integer with a value ranging from 0 to (232-1).
     *  - If you use a string as the user ID, the maximum length is 255 characters.
     *
     * \@param tokenOrKey
     * - Low security requirements: Pass null as the parameter value.
     * - High security requirements: Pass the string of the Token or Channel Key as the parameter value. See Use Security Keys for details.
     * \@param channel
     * A string that provides a unique channel name for the Agora session. The length must be within 64 bytes. Supported character scopes:
     * - 26 lowercase English letters a-z
     * - 26 uppercase English letters A-Z
     * - 10 numbers 0-9
     * - Space
     * - "!", "#", "$", "%", "&", "(", ")", "+", "-", ":", ";", "<", "=", ".", ">", "?", "\@", "[", "]", "^", "_", "{", "}", "|", "~", ","
     * \@param uid The user ID, an integer or a string, ASCII characters only. Ensure this ID is unique.
     * If you set the uid to null, the server assigns one and returns it in the onSuccess callback.
     * \@param [onSuccess] The callback when the method succeeds. The server returns the uid which represents the identity of the user.
     * \@param [onFailure] The callback when the method fails.
     * \@example
     * client.join(<token>, "1024", null, uid => {
     *    console.log("client" + uid + "joined channel");
     *    // Create a local stream
     *    //……
     * }, err => {
     *    console.error("client join failed ", err);
     *    // Error handling
     * });
     *
     * @type {?}
     */
    AgoraClient.prototype.join;
    /**
     * Leaves an AgoraRTC Channel
     *
     * This method enables a user to leave a channel.
     *
     * \@param [onSuccess] The callback when the method succeeds.
     * \@param [onFailure] The callback when the method fails.
     * \@example
     * client.leave(_ => {
     *     console.log("client leaves channel");
     *     //……
     * }, err => {
     *     console.log("client leave failed ", err);
     *     //error handling
     * });
     * @type {?}
     */
    AgoraClient.prototype.leave;
    /**
     * This method removes the events attached by the Client.on() method.
     *
     * \@example
     * client.on("stream-published", function processStreamPublished(evt) {
     *  console.log("Stream Published");
     *  evt.stream.play("divId");
     *  client.off("stream-published", processStreamPublished);
     * })
     * @type {?}
     */
    AgoraClient.prototype.off;
    /**
     * Occurs when an Agora.io event connected to the local client is received from the SDK.
     *
     * @see [On](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#on)
     * for all variations of this core function.
     * @type {?}
     */
    AgoraClient.prototype.on;
    /**
     * Publishes a Local Stream
     * This method publishes a local stream to the SD-RTN.
     *
     * \@description
     * In a live broadcast, whoever calls this API is the host.
     *
     * \@param stream Stream object, which represents the local stream.
     * \@param [onFailure] The callback when the method fails.
     * \@example
     * client.publish(stream, err => {
     *    console.log(err);
     *    //……
     * })
     * @type {?}
     */
    AgoraClient.prototype.publish;
    /**
     * Removes the Injected Stream
     *
     * This method removes the HTTP/HTTPS URL address (added by addInjectStreamUrl) from the live broadcast.
     *
     * \@param url URL address of the live streaming. ASCII characters only, and the string
     * length must be greater that 0 and less than 256 bytes.
     * @type {?}
     */
    AgoraClient.prototype.removeInjectStreamUrl;
    /**
     * This method renews your channel key.
     *
     * Once the Channel Key schema is enabled, the key expires after a certain period of time.
     * When the onFailure callback reports the error DYNAMIC_KEY_TIMEOUT, the application should renew the
     * Channel Key by calling this method. Not doing so will result in SDK disconnecting with the server.
     * @type {?}
     */
    AgoraClient.prototype.renewChannelKey;
    /**
     * This method renews your token.
     *
     * Once the Token schema is enabled, the token expires after a certain period of time.
     * In case of the `onTokenPrivilegeWillExpire` or `onTokenPrivilegeDidExpire` callback events, the application
     * should renew the Token by calling this method. Not doing so will result in SDK disconnecting with the server.
     *
     * \@param token Specifies the renewed Token.
     * @type {?}
     */
    AgoraClient.prototype.renewToken;
    /**
     * Sets the role of the user.
     *
     * This method is applicable only to the live mode.
     * Sets the role of the user such as a host or an audience (default), before joining a channel.
     * This method can be used to switch the user role after the user joins a channel.
     *
     * In live mode ([mode](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.clientconfig.html#mode) is set as live):
     * - Before joining the channel, you can call this method to set the role.
     * - After joining the channel, you can call this method to switch the role:
     *   When you call [publish](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#publish),
     *   the user role switches to host; when you call
     *   [unpublish](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#unpublish),
     *   the user role switches to audience.
     *   After calling [publish](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#publish),
     *   if you call this method and set the user role as audience,
     *   [unpublish](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#unpublish) is called automatically.
     *
     * In communication mode
     * ([mode](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.clientconfig.html#mode) set as `rtc`),
     * this method does not take effect. All users are host by default.
     *
     * \@param role User role in a live broadcast:
     * - "audience": Audience, the default role. An audience can only receive streams.
     * - "host": Host. A host can both send and receive streams.
     *
     * \@example
     * client.setClientRole('host', _ => {
     *    console.log("setHost success");
     *  }, e => {
     *    console.log("setHost failed", e);
     *  })
     * @type {?}
     */
    AgoraClient.prototype.setClientRole;
    /**
     * This method sets the encryption mode.
     *
     * \@description
     * Ensure that you call this API before
     * [Client.join](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#join).
     *
     * \@param encryptionMode
     * - aes-128-xts: Sets the encryption mode as AES128XTS.
     * - aes-256-xts: Sets the encryption mode as AES256XTS.
     * - aes-128-ecb: Sets the encryption mode as AES128ECB.
     * @type {?}
     */
    AgoraClient.prototype.setEncryptionMode;
    /**
     * This method enables the built-in encryption.
     *
     * \@description
     * Ensure that you call this API before
     * [Client.join](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#join).
     *
     * \@param password
     * - The encryption password. ASCII characters only, and the string length must be greater than 0 and less than 256 bytes.
     * @type {?}
     */
    AgoraClient.prototype.setEncryptionSecret;
    /**
     * This method sets the video layout and audio for CDN live.
     *
     * \@description
     * Call [setLiveTranscoding](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#setlivetranscoding)
     * after [createStream](https://docs.agora.io/en/Video/API%20Reference/web/globals.html#createstream).
     * For details, see [Push Streams to the CDN](https://docs.agora.io/en/Video/push_stream_web).
     * @type {?}
     */
    AgoraClient.prototype.setLiveTranscoding;
    /**
     * Sets the Low-video Stream Parameter
     *
     * If you enabled the dual-stream mode by calling
     * [Client.enableDualStream](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#enabledualstream),
     * use this method to set the low-video stream profile.
     * If you do not set the low-video stream profile, the SDK will assign default values based on your stream video profile.
     *
     * \@description
     * - As different web browsers have different restrictions on the video profile, the parameters you set
     *   may fail to take effect. The Firefox browser has a fixed frame rate of 30 fps, therefore the frame
     *   rate settings do not work on the Firefox browser.
     * - Due to limitations of some devices and browsers, the resolution you set may fail to take effect and
     *   get adjusted by the browser. In this case, billings will be calculated based on the actual resolution.
     * - Call [Client.join](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#join) before using this method.
     * - Screen sharing supports the high-video stream only.
     *
     * @see [setLowStreamParameter](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#setlowstreamparameter)
     * @type {?}
     */
    AgoraClient.prototype.setLowStreamParameter;
    /**
     * Deploys the Nginx Server
     *
     * Use this method to deploy the Nginx server.
     *
     * \@description
     * Ensure that you call this API before
     * [Client.join](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#join).
     * Proxy services by different service providers may result in slow performance if you are using the Firefox browser.
     * Therefore, Agora recommends using the same service provider for the proxy services. If you use different service providers,
     * Agora recommends not using the Firefox browser.
     *
     * \@param proxyServer Your Nginx server domain name. ASCII characters only, and the string length
     * must be greater than 0 and less than 256 bytes.
     * @type {?}
     */
    AgoraClient.prototype.setProxyServer;
    /**
     * Sets the Remote Video-stream Type
     * When a remote user sends dual streams, this method decides on which stream to receive on the subscriber side.
     * If this method is not used, the subscriber receives the high-video stream.
     *
     * \@description
     * As not all web browsers are compatible with dual streams, Agora does not recommend developers setting the
     * resolution of the low-video stream.
     *
     * Some web browsers may not be fully compatible with dual streams:
     * @see [Table](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#setremotevideostreamtype)
     *
     * \@param stream The remote video stream object.
     * \@param streamType Sets the remote video stream type. The following lists the video-stream types:
     * - 0: High-bitrate, high-resolution video stream.
     * - 1: Low-bitrate, low-resolution video stream.
     *
     * \@example
     * switchStream = function (){
     *   if (highOrLow === 0) {
     *     highOrLow = 1
     *     console.log("Set to low");
     *   }
     *   else {
     *     highOrLow = 0
     *     console.log("Set to high");
     *   }
     *
     *   client.setRemoteVideoStreamType(stream, highOrLow);
     * }
     * @type {?}
     */
    AgoraClient.prototype.setRemoteVideoStreamType;
    /**
     * Use this method to set stream fallback option on the receiver.
     *
     * Under poor network conditions, the SDK can choose to subscribe to the low-video stream or only the audio stream.
     *
     * \@description
     * This method can only be used when the publisher has enabled the dual-stream mode by
     * [enableDualStream](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#enabledualstream).
     *
     * \@param stream The remote stream object.
     * \@param fallbackType The fallback option:
     * - 0: Disable the fallback.
     * - 1: (Default) Automatically subscribe to the low-video stream under poor network.
     * - 2: Under poor network, the SDK may subscribe to the low-video stream (of lower resolution and lower bitrate) first,
     * but if the network still does not allow displaying the video, the SDK will receive audio only.
     *
     * \@example
     * // The sender side, after publishing the high stream
     *  client.enableDualStream();
     *
     *  // The receiver side, set the fallback option as 2
     *  client.setStreamFallbackOption(remoteStream, 2);
     *
     * @type {?}
     */
    AgoraClient.prototype.setStreamFallbackOption;
    /**
     * Deploys the TURN Server.
     *
     * \@description
     * Ensure that you call this API before
     * [Client.join](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#join).
     *
     * @see [setTurnServer](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#setturnserver)
     * @type {?}
     */
    AgoraClient.prototype.setTurnServer;
    /**
     * Starts relaying media streams across channels.
     *
     * After this method call, the SDK triggers the following callbacks:
     *
     * - Client.on(`"channel-media-relay-state"`), which reports the state and error code of the media stream relay.
     *  - If the media stream relay starts successfully, this callback returns `state` 2 and `code` 0.
     *  - If the media stream relay fails, this callback returns `state` 3. Refer to `code` for the error code and call this method again.
     *
     * - Client.on(`"channel-media-relay-event"`), which reports the events of the media stream relay.
     *  - If the media stream relay starts successfully, this callback returns `code` 4, reporting that the
     *    SDK starts relaying the media stream to the destination channel.
     *
     * \@remark
     * - Contact sales-us@agora.io to enable this function.
     * - We do not support string user IDs in this API.
     * - Call this method only after joining a channel.
     * - In a live-broadcast channel, only a host can call this method.
     * - To call this method again after it succeeds, you must call stopChannelMediaRelay to quit the current relay.
     *
     * \@since 3.0.0
     * @type {?}
     */
    AgoraClient.prototype.startChannelMediaRelay;
    /**
     * This method starts a live stream.
     *
     * \@description
     * Call [startLiveStreaming](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#startlivestreaming)
     * after [createStream](https://docs.agora.io/en/Video/API%20Reference/web/globals.html#createstream).
     *
     * \@param url URL address for the live stream. ASCII characters only, and
     * the string length must be greater than 0 and less than 256 bytes.
     * \@param [enableTranscoding] Marks whether to enable live transcoding.
     * If set as true, setLiveTranscoding must be called before this method.
     *
     * @see [Push Streams to the CDN](https://docs.agora.io/en/Video/push_stream_web).
     * @type {?}
     */
    AgoraClient.prototype.startLiveStreaming;
    /**
     * Enables Cloud Proxy.
     *
     * This method must be called before joining the channel or after leaving the channel.
     *
     * To use the cloud proxy service, some extra settings are needed, see
     * [Use Cloud Proxy](https://docs.agora.io/en/Interactive%20Broadcast/cloud_proxy_web?platform=Web) for details.
     * @type {?}
     */
    AgoraClient.prototype.startProxyServer;
    /**
     * Stops the media stream relay. Once the relay stops, the user leaves all the destination channels.
     *
     * After this method call, the SDK triggers the `Client.on("channel-media-relay-state")` callback.
     *
     * - If the relay stops, the callback returns `state` 0.
     * - If the relay fails to stop, the callback returns `state` 3 and `code` 2 or 8. The failure is usually due to poor network conditions.
     *   You can call [Client.leave](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#leave)
     *   to leave the channel and stop the relay.
     *
     * \@since 3.0.0
     * \@example
     * stopChannelMediaRelay: () => {
     *  client.stopChannelMediaRelay(e => {
     *    if(e) {
     *      utils.notification(`stopChannelMediaRelay failed: ${JSON.stringify(e)}`);
     *    } else {
     *      utils.notification(`stopChannelMediaRelay success`);
     *    }
     *  });
     * }
     *
     * \@param callback The result of stopping the media stream relay.
     * @type {?}
     */
    AgoraClient.prototype.stopChannelMediaRelay;
    /**
     * This method stops and deletes the live streaming.
     * When the live stream stops, the SDK triggers the `Client.on("liveStreamingStopped")` callback.
     *
     * \@param url URL address of the live streaming. ASCII characters only, and
     * the string length must be greater than 0 and less than 256 bytes.
     * @type {?}
     */
    AgoraClient.prototype.stopLiveStreaming;
    /**
     * Disables Cloud Proxy.
     *
     * This method must be called before joining the channel or after leaving the channel.
     *
     * This method disables all proxy settings, including those set by
     * [setProxyServer](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#setproxyserver) and
     * [setTurnServer](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#setturnserver).
     * @type {?}
     */
    AgoraClient.prototype.stopProxyServer;
    /**
     * This method enables a user to subscribe to a remote stream.
     *
     * After the user subscribes to a remote stream, the SDK triggers the `Client.on("stream-subscribed")` callback.
     * If the remote stream contains an audio track, the SDK also triggers the `Client.on("first-audio-frame-decode")` callback;
     * if the remote stream contains a video track, the SDK also triggers the `Client.on("first-video-frame-decode")` callback.
     *
     * \@example
     * client.subscribe(stream, err => {
     *    console.error("stream subscribe failed", err);
     *    //……
     * });
     *
     * Advanced
     *
     * This method can be called multiple times for a single remote stream,
     * and enables you to switch between receiving/not receiving the video or audio data flexibly.
     *
     * \@example
     * // Initially, subscribe to the stream and receive only the video data
     * client.subscribe(stream, {video: true, audio: false});
     *
     * // After a while, switch to receiving only the audio data
     * client.subscribe(stream, {video: false, audio: true});
     *
     * \@remarks
     * - video and `audio` cannot be set as `false` at the same time. If you need to stop subscribing to the stream,
     * call [Client.unsubscribe](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#unsubscribe) instead.
     * - Safari does not support independent subscription. Set `options` as `null` for Safari,
     * otherwise the `SAFARI_NOT_SUPPORTED_FOR_TRACK_SUBSCRIPTION` error occurs.
     *
     * \@param stream Stream object, which represents the remote stream.
     * \@param [options] Sets whether to receive the video or audio data independently by the `video` and `audio` parameters.
     * \@param [onFailure] The callback when the method fails. The following are common errors:
     * - `"SAFARI_NOT_SUPPORTED_FOR_TRACK_SUBSCRIPTION"`: Safari does not support independent subscription.
     * - `"INVALID_OPERATION"`: The user is not in the channel, possibly because the user has not
     *    joined the channel or the connection is interrupted.
     * - `"SUBSCRIBE_STREAM_FAILED"`: The subscription fails, usually because the SDK has disconnected
     *    from the Agora server when subscribing to the stream.
     * - `"PEERCONNECTION_FAILED"`: Fails to establish the media transport channel.
     * @type {?}
     */
    AgoraClient.prototype.subscribe;
    /**
     * Unpublishes the Local Stream.
     *
     * When the stream is unpublished, the `Client.on("stream-removed")` callback is triggered on the remote client.
     *
     * \@param stream Stream object, which represents the local stream.
     *
     * \@example
     * client.unpublish(stream, err => {
     *    console.log(err);
     *    //……
     * })
     *
     * \@remarks
     * In a live broadcast, the user role of a host switches to audience after unpublishing, and
     * the `Client.on("peer-leave")` callback is triggered on the remote client.
     * @type {?}
     */
    AgoraClient.prototype.unpublish;
    /**
     * Unsubscribes from a Remote Stream.
     *
     * \@param stream Stream object, which represents the remote stream.
     *
     * \@example
     * client.unsubscribe(stream, err => {
     *   console.log(err);
     *   //……
     * })
     *
     * @type {?}
     */
    AgoraClient.prototype.unsubscribe;
    /**
     * Updates the channels for media stream relay.
     *
     * After the channel media relay starts, if you want to relay the media stream to more channels,
     * or leave the current relay channel, you can call this method.
     *
     * After this method call, the SDK triggers the `Client.on("channel-media-relay-event")` callback.
     * - If the update succeeds, the callback returns `code` 7.
     * - If the update fails, the callback returns `code` 8, and the SDK also triggers the
     * `Client.on("channel-media-relay-state")` callback with `state` 3. In this case, the media relay state is reset, and you need to call
     * [startChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
     * again to restart the relay.
     *
     * \@remarks
     * - Call this method after
     * [startChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay).
     * - You can add a maximum of four destination channels to a relay.
     *
     * \@example
     * client.updateChannelMediaRelay(channelMediaConfig, e => {
     *   if (e) {
     *     utils.notification(`updateChannelMediaRelay failed: ${JSON.stringify(e)}`);
     *   } else {
     *     utils.notification(`updateChannelMediaRelay success`);
     *   }
     * });
     *
     * \@since 3.0.0
     * @type {?}
     */
    AgoraClient.prototype.updateChannelMediaRelay;
    /** @type {?|undefined} */
    AgoraClient.prototype.aesMode;
    /** @type {?|undefined} */
    AgoraClient.prototype.aespassword;
    /** @type {?|undefined} */
    AgoraClient.prototype.gatewayClient;
    /** @type {?|undefined} */
    AgoraClient.prototype.highStream;
    /** @type {?|undefined} */
    AgoraClient.prototype.highStreamState;
    /** @type {?|undefined} */
    AgoraClient.prototype.isDualStream;
    /** @type {?|undefined} */
    AgoraClient.prototype.key;
    /** @type {?|undefined} */
    AgoraClient.prototype.lowStream;
    /** @type {?|undefined} */
    AgoraClient.prototype.lowStreamParameter;
    /** @type {?|undefined} */
    AgoraClient.prototype.lowStreamState;
    /** @type {?|undefined} */
    AgoraClient.prototype.proxyServer;
    /** @type {?|undefined} */
    AgoraClient.prototype.turnServer;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/agora-config.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * @record
 */
function AgoraConfig() { }
if (false) {
    /** @type {?} */
    AgoraConfig.prototype.AppID;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/agora-rtc.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * AgoraRTC is the entry point for all the methods that can be called in Agora Web SDK.
 *
 * You can use the AgoraRTC methods to create
 * [Client](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html) and
 * [Stream](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html) objects.
 * Other methods of the AgoraRTC object check for system requirements and set up error logging.
 * @record
 */
function AgoraRTC() { }
if (false) {
    /**
     * Checks the Web Browser Compatibility
     *
     * This method checks the compatibility between the Web SDK and the current web browser.
     * Use this method before calling createClient to check the compatibility between the system and the web browser.
     *
     * - true: The Web SDK is compatible with the current web browser.
     * - false: The Web SDK is not compatible with the current web browser.
     *
     * \@remark
     * Agora has yet to conduct comprehensive tests on Chromium kernel browsers, such as QQ and 360.
     * Agora will gradually achieve compatibility on most mainstream browsers in subsequent versions of the Web SDK.
     * @type {?}
     */
    AgoraRTC.prototype.checkSystemRequirements;
    /**
     * Creates a Client Object
     *
     * This method creates and returns a client object. You can only call this method once each call session.
     *
     * \@param config
     * Defines the property of the client, see
     * [ClientConfig](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.clientconfig.html) for details.
     *
     * \@example
     * AgoraRTC.createClient(config);
     * @type {?}
     */
    AgoraRTC.prototype.createClient;
    /**
     * This method creates and returns a stream object.
     *
     * \@example
     * AgoraRTC.createStream(spec)
     *
     * \@param spec Defines the properties of the stream
     * @see [StreamSpec](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.streamspec.html) for details.
     * @type {?}
     */
    AgoraRTC.prototype.createStream;
    /**
     * This method enumerates the available media input and output devices, such as microphones, cameras, headsets, and so on.
     *
     * If this method succeeds, the SDK returns a list of media devices in an array of `MediaDeviceInfo` objects.
     *
     * \@example
     * AgoraRTC.getDevices(devices => {
     *   const devCount = devices.length;
     *   const id = devices[0].deviceId;
     * });
     * @type {?}
     */
    AgoraRTC.prototype.getDevices;
    /**
     * Gets the Sources for Screen-sharing
     *
     * To share the screen on Electron, call this method to get the screen sources.
     * @see [Share the Screen](https://docs.agora.io/en/Video/screensharing_web?platform=Web#electron) for details.
     *
     * If this method succeeds, the SDK returns a list of screen sources in an array of
     * [DesktopCapturerSource](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.desktopcapturersource.html) objects.
     *
     * \@example
     * AgoraRTC.getScreenSources(function(err, sources) {
     *  console.log(sources)
     * }
     *
     * @type {?}
     */
    AgoraRTC.prototype.getScreenSources;
    /**
     * This method returns the codecs supported by both the Agora Web SDK and the web browser.
     * The Agora Web SDK supports VP8 and H.264 for video, and OPUS for audio.
     *
     * This method supports all web browsers. For web browsers that do not support WebRTC or
     * are not recognized, the returned codec list is empty.
     *
     * \@remark
     * In the `.then(function(result){})` callback, `result` has the following properties:
     * - `video`: array, the supported video codecs. The array might include `'H264'` and `'VP8'`, or be empty.
     * - `audio`: array, the supported audio codecs. The array might include `'OPUS'`, or be empty.
     *
     * \@example
     * // Gets the supported decoding formats as the receiver
     * AgoraRTC.getSupportedCodec()
     *   .then(result => {
     *     console.log(`Supported video codec: ${result.video.join(',')}`);
     *     console.log(`Supported audio codec: ${result.audio.join(',')}`);
     *   });
     *
     * // Gets the supported encoding formats as the sender
     * navigator.mediaDevices.getUserMedia({video: true, audio: true})
     *  .then(mediaStream => {
     *     return AgoraRTC.getSupportedCodec({stream: mediaStream});
     *  })
     *  .then(result => {
     *     console.log(`Supported video codec: ${result.video.join(',')}`);
     *     console.log(`Supported audio codec: ${result.audio.join(',')}`);
     *  });
     * @type {?}
     */
    AgoraRTC.prototype.getSupportedCodec;
    /**
     * Logs connection information and errors to the console during active periods of the Agora.io SDK.
     * @type {?}
     */
    AgoraRTC.prototype.Logger;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/audio-effect-options.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * @record
 */
function AudioEffectOptions() { }
if (false) {
    /**
     * The number of playback loops (only supported on Chrome 65 and later).
     *
     * A positive integer. The value range is `[1,10000]`. The default value is 1.
     * @type {?|undefined}
     */
    AudioEffectOptions.prototype.cycle;
    /**
     * The URL of the online audio effect file.
     *
     * The URL must contain ASCII characters only, and the string length must be greater than 0 and less than 256 bytes.
     * Supported audio formats: MP3, AAC, and other audio formats depending on the browser.
     * @type {?}
     */
    AudioEffectOptions.prototype.filePath;
    /**
     * The ID of the specified audio effect.
     *
     * A positive integer. The value range is `[1,10000]`. Each audio effect has a unique ID.
     * If the audio effect is preloaded into the memory through the
     * [preloadEffect](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#preloadeffect)
     * method, ensure that the soundId value is set to the same value as in
     * [preloadEffect](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#preloadeffect).
     * @type {?}
     */
    AudioEffectOptions.prototype.soundId;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/audio-mixing-options.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * Audio mixing settings.
 * @record
 */
function AudioMixingOptions() { }
if (false) {
    /**
     *  Whether or not to store the audio mixing file in the cache.
     *
     * - `true`: (default) store the audio mixing file in the cache to speed up mixing this file the next time.
     * - `false`: do not store the audio mixing file in the cache to save RAM.
     * @type {?|undefined}
     */
    AudioMixingOptions.prototype.cacheResource;
    /**
     * Number of playback loops (only supports Chrome 65+)
     * A positive integer. The value range is `[1,10000]`. The default value is `1`.
     * @type {?|undefined}
     */
    AudioMixingOptions.prototype.cycle;
    /**
     * Path of the online audio file to mix. ASCII characters only, and the string length must be greater than 0 and less than 256 bytes.
     * Supported audio formats: mp3, aac, and other audio formats depending on the browser.
     * @type {?}
     */
    AudioMixingOptions.prototype.filePath;
    /**
     * Whether the audio mixing file loops infinitely.
     *
     * - `true`: The audio mixing file loops infinitely. Do not use this option if cycle is specified.
     * - `false`: (Default) Disables the infinite loops.
     * @type {?|undefined}
     */
    AudioMixingOptions.prototype.loop;
    /**
     * Sets the playback position (ms) of the audio mixing file. An integer, and the value range is `[0,100000000]`.
     * If you need to play the file from the beginning, set this paramter to `0`.
     * @type {?}
     */
    AudioMixingOptions.prototype.playTime;
    /**
     * Whether the online audio file replaces the local audio stream.
     * - `true`: The content of the online audio file replaces the audio stream from the microphone.
     * - `false`: (Default) The online audio file is mixed with the audio stream from the microphone.
     *
     * \@remark
     * Safari does not support this parameter.
     * @type {?|undefined}
     */
    AudioMixingOptions.prototype.replace;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/beauty-effect-options.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * Image enhancement options.
 * @record
 */
function BeautyEffectOptions() { }
if (false) {
    /**
     * The contrast level, used with the `lighteningLevel` parameter.
     * - 0: Low contrast level.
     * - 1: (Default) The original contrast level.
     * - 2: High contrast level.
     * @type {?|undefined}
     */
    BeautyEffectOptions.prototype.lighteningContrastLevel;
    /**
     * The brightness level.
     *
     * The value ranges from 0.0 (original) to 1.0. The default value is 0.7.
     * @type {?|undefined}
     */
    BeautyEffectOptions.prototype.lighteningLevel;
    /**
     * The redness level.
     *
     * The value ranges from 0.0 (original) to 1.0. The default value is 0.1. This parameter adjusts the red saturation level.
     * @type {?|undefined}
     */
    BeautyEffectOptions.prototype.rednessLevel;
    /**
     * The sharpness level.
     *
     * The value ranges from 0.0 (original) to 1.0. The default value is 0.5. This parameter is usually used to remove blemishes.
     * @type {?|undefined}
     */
    BeautyEffectOptions.prototype.smoothnessLevel;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/channel-info.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * @record
 */
function ChannelInfo() { }
if (false) {
    /**
     * The channel name.
     * @type {?}
     */
    ChannelInfo.prototype.channelName;
    /**
     * The unique ID to identify the relay stream in the destination channel.
     * A 32-bit unsigned integer with a value ranging from 0 to (2^32-1).
     * If you set it as `0`, the server assigns a random one. To avoid UID conflicts, this uid must be different
     * from any other UIDs in the destination channel.
     * @type {?}
     */
    ChannelInfo.prototype.uid;
    /**
     * The token generated with the above `channelName` and `uid`. Do not set this parameter if you have not enabled token.
     * @type {?}
     */
    ChannelInfo.prototype.token;
}
/**
 * @record
 */
function DestinationChannelInfo() { }
if (false) {
    /**
     * The unique ID to identify the relay stream in the destination channel.
     * A 32-bit unsigned integer with a value ranging from 0 to (2^32-1).
     * If you set it as `0`, the server assigns a random one. To avoid UID conflicts, this uid must be different
     * from any other UIDs in the destination channel.
     * @type {?}
     */
    DestinationChannelInfo.prototype.uid;
}
/**
 * @record
 */
function SourceChannelInfo() { }
if (false) {
    /**
     * The unique ID to identify the relay stream in the source channel.
     * A 32-bit unsigned integer with a value ranging from 0 to (232-1).
     * If you set it as `0`, the server assigns a random one. To avoid UID conflicts, this value must be different
     * from the UID of the current host.
     * @type {?}
     */
    SourceChannelInfo.prototype.uid;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/channel-media-error.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * Error information of the media stream relay.
 *
 * When errors occur in calling
 * [startChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay),
 * [updateChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#updatechannelmediarelay), or
 * [stopChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#stopchannelmediarelay),
 * the callback functions of these methods provide error details in this class.
 *
 * In this class, `code` is the error code and `message` is the error message.
 *
 * @see [the following table](https://docs.agora.io/en/Video/API%20Reference/web/classes/agorartc.channelmediaerror.html) for details.
 * @record
 */
function ChannelMediaError() { }
if (false) {
    /**
     * The error code.
     * @type {?}
     */
    ChannelMediaError.prototype.code;
    /**
     * Additional information.
     * @type {?}
     */
    ChannelMediaError.prototype.data;
    /**
     * The error message.
     * @type {?}
     */
    ChannelMediaError.prototype.message;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/channel-media-relay-configuration.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * Configurations of the media stream relay.
 *
 * \@description
 * Use this interface to set the media stream relay when calling
 * [startChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
 * or [updateChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#updatechannelmediarelay).
 *
 * \@since 3.0.0
 * @record
 */
function ChannelMediaRelayConfiguration() { }
if (false) {
    /**
     * Removes the destination channel.
     *
     * \@example
     * configuration.removeDestChannelInfo("cname")
     * @type {?}
     */
    ChannelMediaRelayConfiguration.prototype.removeDestChannelInfo;
    /**
     * Sets the information of the destination channel.
     *
     * To relay a media stream across multiple channels, call this method as many times (to a maximum of four).
     *
     * \@example
     * var configuration = new AgoraRTC.ChannelMediaRelayConfiguration();
     *    configuration.setDestChannelInfo("cname", {
     *     channelName: "destChannel",
     *     uid: 123,
     *     token: "yourDestToken",
     *  })
     *
     * \@param channelName The name of the destination channel.
     * Ensure that the value of this parameter is the same as the value of `channelName` in `destInfo`.
     * \@param destInfo The information of the destination channel
     *
     * @type {?}
     */
    ChannelMediaRelayConfiguration.prototype.setDestChannelInfo;
    /**
     * Sets the information of the source channel.
     *
     * \@example
     * var configuration = new AgoraRTC.ChannelMediaRelayConfiguration();
     * configuration.setSrcChannelInfo({
     *  channelName: "srcChannel",
     *  uid: 123,
     *  token: "yourSrcToken",
     * })
     * @type {?}
     */
    ChannelMediaRelayConfiguration.prototype.setSrcChannelInfo;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/client-config.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * A class defining the properties of the config parameter in the
 * [createClient](https://docs.agora.io/en/Video/API%20Reference/web/globals.html#createclient) method.
 *
 * \@remark
 * - Ensure that you do not leave mode and codec as empty.
 * - Ensure that you set these properties before calling Client.join.
 *
 * Define [proxyServer](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.clientconfig.html#proxyserver) and
 * [turnServer](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.clientconfig.html#turnserver)
 * if you need to set a proxy server. For a tutorial on deploying the Proxy server on a Web client, see
 * [Deploy the Enterprise Proxy](https://docs.agora.io/en/Video/proxy_web).
 *
 * Proxy services by different service providers may result in slow performance if you are using the Firefox browser.
 * Therefore, Agora recommends using the same service provider for the proxy services.
 * If you use different service providers, Agora recommends not using the Firefox browser.
 *
 * \@example
 * import { ClientConfig } from 'ngx-agora';
 *
 * const config: ClientConfig = {
 *   mode: "live",
 *   codec: "vp8",
 *   proxyServer: "YOUR NGINX PROXY SERVER IP",
 *   turnServer: {
 *     turnServerURL: "YOUR TURNSERVER URL",
 *     username: "YOUR USERNAME",
 *     password: "YOUR PASSWORD",
 *     udpport: "THE UDP PORT YOU WANT TO ADD",
 *     tcpport: "THE TCP PORT YOU WANT TO ADD",
 *     forceturn: false
 *   }
 * }
 * this.ngxAgoraService.createClient(config);
 * @record
 */
function ClientConfig() { }
if (false) {
    /**
     * The codec the Web browser uses for encoding and decoding.
     * - `'vp8'`: Sets the browser to use VP8 for encoding and decoding.
     * - `'h264'`: Sets the browser to use H264 for encoding and decoding.
     *
     * \@remark
     * Set codec as "h264" as long as Safari is involved in the session.
     * @type {?}
     */
    ClientConfig.prototype.codec;
    /**
     * The channel profile.
     *
     * Agora Web SDK needs to know the application scenario to apply different optimization methods.
     *
     * Currently Agora Web SDK supports the following channel profiles:
     * - "live": Sets the channel profile as live broadcast.
     *   Host and audience roles that can be set by calling the
     *   [Client.setClientRole](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#setclientrole) method.
     *   The host sends and receives voice/video, while the audience can only receive voice/video.
     * - "rtc": Sets the channel profile as communication. This is used in one-on-one calls or group calls,
     *   where all users in the channel can talk freely.
     *
     * \@remark
     * If you need to communicate with Agora Native SDK, Agora recommends the following settings:
     *  - For Native SDK v2.3.2 and later:
     *   Set [mode](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.clientconfig.html#mode)
     *   as "rtc" or "live" if the Native SDK uses the communication channel profile.
     *   Set [mode](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.clientconfig.html#mode)
     *   as "live" if the Native SDK uses the live broadcast channel profile.
     *  - For Native SDK before v2.3.2, set mode as "live" regardless of which channel profile the Native SDK uses.
     *
     * If you set [mode](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.clientconfig.html#mode)
     * as "rtc", the Agora Recording SDK is not supported.
     * @type {?}
     */
    ClientConfig.prototype.mode;
    /**
     * Your Nginx server domain name.
     *
     * ASCII characters only, and the string length must be greater than 0 and less than 256 bytes.
     * Enterprise users with a company firewall can use this property to pass signaling messages to the Agora SD-RTN through the Nginx Server.
     * @type {?|undefined}
     */
    ClientConfig.prototype.proxyServer;
    /**
     * TURN server settings.
     *
     * Enterprise users with a company firewall can use this property to pass audio and video data to the Agora SD-RTN through
     * the TURN Server.
     * @type {?|undefined}
     */
    ClientConfig.prototype.turnServer;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/desktop-capturer-source.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * This interface contains information on the screen source
 * @see [DesktopCapturerSource](https://electronjs.org/docs/api/structures/desktop-capturer-source).
 * @record
 */
function DesktopCapturerSource() { }
if (false) {
    /**
     * ID of the screen source.
     * @type {?}
     */
    DesktopCapturerSource.prototype.id;
    /**
     * Name of the screen source.
     * @type {?}
     */
    DesktopCapturerSource.prototype.name;
    /**
     * Thumbnail of the screen source.
     * @see [nativeImage](https://electronjs.org/docs/api/native-image#nativeimage) for supported types.
     * @type {?}
     */
    DesktopCapturerSource.prototype.thumbnail;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/inject-stream-config.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * A class for configuring the imported live broadcast voice or video stream.
 *
 * \@example
 * const injectStreamConfig = {
 *  width: 0,
 *  height: 0,
 *  videoGop: 30,
 *  videoFramerate: 15,
 *  videoBitrate: 400,
 *  audioSampleRate: 44100,
 *  audioChannels: 1,
 * };
 * @record
 */
function InjectStreamConfig() { }
if (false) {
    /**
     * Audio bitrate of the added stream to the broadcast.
     * Positive integer. The default value is 48. The value range is [1, 10000].
     *
     * \@remark
     * Agora recommends that you stay with the default value and not reset it at this point of time.
     * @type {?|undefined}
     */
    InjectStreamConfig.prototype.audioBitrate;
    /**
     * Audio channels to add into the broadcast.
     * Positive integer. The default value is 1. The value range is [1, 2].
     *
     * \@remark
     * Agora recommends that you stay with the default value and not reset it at this point of time.
     * @type {?|undefined}
     */
    InjectStreamConfig.prototype.audioChannels;
    /**
     * Audio sampling rate of the added stream to the broadcast.
     * 32000: 32 kHz
     * 44100: (Default) 44.1 kHz
     * 48000: 48 kHz
     *
     * \@remark
     * Agora recommends that you stay with the default value and not reset it at this point of time.
     * @type {?|undefined}
     */
    InjectStreamConfig.prototype.audioSampleRate;
    /**
     * Video bitrate of the added stream to the broadcast.
     * Positive integer. The default value is 400 Kbps. The value range is [1, 10000].
     *
     * \@remark
     * The setting of the video bitrate is closely linked to the resolution. If the video bitrate you set is beyond
     * the reasonable range, the SDK will set it within the reasonable range instead.
     * @type {?|undefined}
     */
    InjectStreamConfig.prototype.videoBitrate;
    /**
     * Video frame rate of the added stream to the broadcast.
     * Positive integer. The default value is 15 fps. The value range is [1, 10000].
     * @type {?|undefined}
     */
    InjectStreamConfig.prototype.videoFramerate;
    /**
     * Video GOP of the added stream to the broadcast.
     * Positive integer. The default value is 30 frames. The value range is [1, 10000].
     * @type {?|undefined}
     */
    InjectStreamConfig.prototype.videoGop;
    /**
     * Width of the added stream to the broadcast.
     * Integer, the default value is 0, which is the same width as the original stream. The value range is [0, 10000].
     * @type {?|undefined}
     */
    InjectStreamConfig.prototype.width;
    /**
     * Height of the added stream to the broadcast.
     * Integer, the default value is 0, which is the same height as the original stream. The value range is [0, 10000].
     * @type {?|undefined}
     */
    InjectStreamConfig.prototype.height;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/live-transcoding.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * @record
 */
function LiveTranscoding() { }
if (false) {
    /**
     * Bitrate of the CDN live audio output stream in Kbps.
     * Positive integer. The default value is `48`, and the highest value is `128`.
     * @type {?}
     */
    LiveTranscoding.prototype.audioBitrate;
    /**
     * Agora’s self-defined audio channel type.
     *
     * Agora recommends choosing 1 or 2. Special players are required if you choose 3, 4 or 5:
     * 1. (Default) Mono
     * 2. Dual sound channels
     * 3. Three sound channels
     * 4. Four sound channels
     * 5. Five sound channels
     * @type {?}
     */
    LiveTranscoding.prototype.audioChannels;
    /**
     * Audio sampling rate:
     * - 32000: 32 kHz
     * - 44100: (Default) 44.1 kHz
     * - 48000: 48 kHz
     * @type {?}
     */
    LiveTranscoding.prototype.audioSampleRate;
    /**
     * The background color in RGB hex value.
     *
     * Value only, do not include a #. The default value is `0x000000`. The value range is `[0x000000, 0xffffff]`.
     * @type {?|undefined}
     */
    LiveTranscoding.prototype.backgroundColor;
    /**
     * Height of the video.
     *
     * Positive integer, the default value is 360. The value range is `[1, 10000]`.
     * @type {?|undefined}
     */
    LiveTranscoding.prototype.height;
    /**
     * - true: Low latency with unassured quality.
     * - false: (Default)High latency with assured quality.
     * @type {?|undefined}
     */
    LiveTranscoding.prototype.lowLatency;
    /**
     * Manages the user layout configuration in the CDN live streaming.
     *
     * Agora supports a maximum of 17 transcoding users in a CDN streaming channel.
     * @see [TranscodingUser](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.transcodinguser.html) for details.
     * @type {?|undefined}
     */
    LiveTranscoding.prototype.transcodingUsers;
    /**
     * Number of users; default value is 0. The maximum is 17.
     * @type {?|undefined}
     */
    LiveTranscoding.prototype.userCount;
    /**
     * Bitrate of the CDN live output video stream.
     *
     * Positive integer. The default value is 400 Kbps. The value range is `[1,1000000]`.
     * @type {?|undefined}
     */
    LiveTranscoding.prototype.videoBitrate;
    /**
     * Video codec profile type:
     *
     * - 66: Baseline video codec profile. Generally used in video calls on mobile phones.
     * - 77: Main video codec profile.Generally used in mainstream electronics, such as MP4 players, portable video players, PSP, and iPads.
     * - 100: (Default) High video codec profile.Generally used in high - resolution broadcasts or television.
     * @type {?|undefined}
     */
    LiveTranscoding.prototype.videoCodecProfile;
    /**
     * Frame rate of the output data stream set for CDN live.
     *
     * Positive integer. The default value is 15 fps. The value range is `[1, 10000]`.
     * @type {?|undefined}
     */
    LiveTranscoding.prototype.videoFramerate;
    /**
     * Video GOP in frames. The default value is 30 frames. The value range is `[1,10000]`.
     * @type {?|undefined}
     */
    LiveTranscoding.prototype.videoGop;
    /**
     * Width of the video.
     *
     * Positive integer, the default value is `640`. The value range is `[1, 10000]`.
     * @type {?|undefined}
     */
    LiveTranscoding.prototype.width;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/local-audio-stats-map.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * A list of `LocalAudioStats` objects, one per uid.
 * @record
 */
function LocalAudioStatsMap() { }

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/local-audio-stats.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * @record
 */
function LocalAudioStats() { }
if (false) {
    /**
     * Encoding type of the sent audio.
     * @type {?|undefined}
     */
    LocalAudioStats.prototype.CodecType;
    /**
     * Whether the audio is muted or not.
     * @type {?|undefined}
     */
    LocalAudioStats.prototype.MuteState;
    /**
     * Energy level of the captured audio.
     * @type {?|undefined}
     */
    LocalAudioStats.prototype.RecordingLevel;
    /**
     * Sampling rate, in kHz.
     * @type {?|undefined}
     */
    LocalAudioStats.prototype.SamplingRate;
    /**
     * Bitrate of the sent audio, in Kbps.
     * @type {?|undefined}
     */
    LocalAudioStats.prototype.SendBitrate;
    /**
     * Energy level of the sent audio.
     * @type {?|undefined}
     */
    LocalAudioStats.prototype.SendLevel;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/local-stream-stats.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * The connection statistics of the local stream.
 * @record
 */
function LocalStreamStats() { }
if (false) {
    /**
     * Bytes of the sent audio.
     * @type {?}
     */
    LocalStreamStats.prototype.audioSendBytes;
    /**
     * Packets of the sent audio.
     * @type {?}
     */
    LocalStreamStats.prototype.audioSendPackets;
    /**
     * Number of lost packets of the sent audio.
     *
     * \@remark
     * Safari and Firefox do not support this property.
     * @type {?}
     */
    LocalStreamStats.prototype.audioSendPacketsLost;
    /**
     * Bytes of the sent video.
     * @type {?}
     */
    LocalStreamStats.prototype.videoSendBytes;
    /**
     * Frame rate of the sent video.
     * @type {?}
     */
    LocalStreamStats.prototype.videoSendFrameRate;
    /**
     * Packets of the sent video.
     * @type {?}
     */
    LocalStreamStats.prototype.videoSendPackets;
    /**
     * Number of lost packets of the sent video.
     * @type {?}
     */
    LocalStreamStats.prototype.videoSendPacketsLost;
    /**
     * Resolution height of the sent video.
     * @type {?}
     */
    LocalStreamStats.prototype.videoSendResolutionHeight;
    /**
     * Resolution width of the sent video.
     * @type {?}
     */
    LocalStreamStats.prototype.videoSendResolutionWidth;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/local-video-stats-map.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * A list of `LocalVideoStats` objects, one per uid.
 * @record
 */
function LocalVideoStatsMap() { }

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/local-video-stats.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * @record
 */
function LocalVideoStats() { }
if (false) {
    /**
     * Frame rate of the captured video, in fps.
     * @type {?|undefined}
     */
    LocalVideoStats.prototype.CaptureFrameRate;
    /**
     * Height (pixels) of the captured video.
     * @type {?|undefined}
     */
    LocalVideoStats.prototype.CaptureResolutionHeight;
    /**
     * Width (pixels) of the captured video.
     * @type {?|undefined}
     */
    LocalVideoStats.prototype.CaptureResolutionWidth;
    /**
     * Delay from capturing to encoding the local video, in ms.
     * @type {?|undefined}
     */
    LocalVideoStats.prototype.EncodeDelay;
    /**
     * Whether the video is muted or not.
     * @type {?|undefined}
     */
    LocalVideoStats.prototype.MuteState;
    /**
     * Bitrate of the sent video, in Kbps.
     * @type {?|undefined}
     */
    LocalVideoStats.prototype.SendBitrate;
    /**
     * Frame rate of the sent video, in fps.
     * @type {?|undefined}
     */
    LocalVideoStats.prototype.SendFrameRate;
    /**
     * Height of the sent video, in pixels.
     * @type {?|undefined}
     */
    LocalVideoStats.prototype.SendResolutionHeight;
    /**
     * Width of the sent video, in pixels.
     * @type {?|undefined}
     */
    LocalVideoStats.prototype.SendResolutionWidth;
    /**
     * Bitrate of the local video set in
     * [setVideoProfile](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#setvideoprofile).
     * @type {?|undefined}
     */
    LocalVideoStats.prototype.TargetSendBitrate;
    /**
     * Total duration of the published video, in seconds.
     * @type {?|undefined}
     */
    LocalVideoStats.prototype.TotalDuration;
    /**
     * Total freeze time of the encoded video, in seconds.
     * @type {?|undefined}
     */
    LocalVideoStats.prototype.TotalFreezeTime;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/logger.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * Provides methods to enable/disable log upload and set output log level.
 * @record
 */
function Logger() { }
if (false) {
    /**
     * Outputs all logs.
     * @type {?}
     */
    Logger.prototype.DEBUG;
    /**
     * Outputs logs of the INFO, WARNING and ERROR levels.
     * @type {?}
     */
    Logger.prototype.INFO;
    /**
     * Outputs logs of the WARNING and ERROR levels.
     * @type {?}
     */
    Logger.prototype.WARNING;
    /**
     * Outputs logs of the ERROR level.
     * @type {?}
     */
    Logger.prototype.ERROR;
    /**
     * Outputs no logs.
     * @type {?}
     */
    Logger.prototype.NONE;
    /** @type {?} */
    Logger.prototype.debug;
    /** @type {?} */
    Logger.prototype.error;
    /** @type {?} */
    Logger.prototype.info;
    /** @type {?} */
    Logger.prototype.warning;
    /**
     * This method disables log upload.
     *
     * By default, the log-upload function is disabled. If you have used
     * [enableLogUpload](https://docs.agora.io/en/Video/API%20Reference/web/modules/agorartc.logger.html#enablelogupload),
     * call this method when you need to stop uploading the log.
     *
     * \@example
     * AgoraRTC.Logger.disableLogUpload();
     * @type {?}
     */
    Logger.prototype.disableLogUpload;
    /**
     * Call this method to enable log upload to Agora’s server.
     *
     * The log-upload function is disabled by default, if you need to enable this function,
     * please call this method before all the other methods.
     *
     * \@remark
     * If the user fails to join the channel, the log information is not available on Agora’s server.
     *
     * \@example
     * AgoraRTC.Logger.enableLogUpload();
     * @type {?}
     */
    Logger.prototype.enableLogUpload;
    /**
     * This method sets the output log level.
     *
     * The log level follows the sequence of NONE, ERROR, WARNING, INFO, and DEBUG.
     * For example, if you set the log level as AgoraRTC.Logger.setLogLevel(AgoraRTC.Logger.INFO);,
     * then you can see logs in levels INFO, ERROR, and WARNING.
     * @type {?}
     */
    Logger.prototype.setLogLevel;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/media-device-info.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * This interface contains information that describes a single media input or output device.
 * The list of devices obtained by calling [AgoraRTC.getDevices](https://docs.agora.io/en/Video/API%20Reference/web/globals.html#getdevices)
 * is an array of MediaDeviceInfo objects, one per media device.
 * @record
 */
function MediaDeviceInfo() { }
if (false) {
    /**
     * Unique ID of the device.
     * @type {?}
     */
    MediaDeviceInfo.prototype.deviceId;
    /**
     * Returns an enumerated value that is "videoinput", "audioinput" or "audiooutput".
     * @type {?}
     */
    MediaDeviceInfo.prototype.kind;
    /**
     * Returns a DOMString that is a label describing this device (for example "External USB Webcam").
     *
     * \@remark
     * For security reasons, the label field is always blank unless an active media stream exists
     * or the user has granted persistentpermission for media device access.
     * @type {?}
     */
    MediaDeviceInfo.prototype.label;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/media-stream-track.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * This interface represents a single media track within a stream, for example an audio track or a video track.
 * @see [MediaStreamTrack](https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack) for details.
 * @record
 */
function MediaStreamTrack() { }
if (false) {
    /** @type {?} */
    MediaStreamTrack.prototype.kind;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/media-stream.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * The MediaStream interface represents a stream of media content.
 *
 * A stream consists of several tracks such as video or audio tracks. Each track is specified as an instance of
 * [MediaStreamTrack](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.mediastreamtrack.html).
 *
 * @see [MediaStream](https://developer.mozilla.org/en-US/docs/Web/API/MediaStream) for details.
 * @record
 */
function MediaStream() { }
if (false) {
    /**
     * A Boolean value that returns true if the stream is active, or false otherwise.
     * @see [active](https://developer.mozilla.org/en-US/docs/Web/API/MediaStream/active) for details.
     * @type {?}
     */
    MediaStream.prototype.active;
    /**
     * A [`DOMString`](https://developer.mozilla.org/en-US/docs/Web/API/DOMString) containing 36 characters
     * denoting a universally unique identifier (UUID) for the object.
     *
     * @see [MediaStream.id](https://developer.mozilla.org/en-US/docs/Web/API/MediaStream/id) for details.
     * @type {?}
     */
    MediaStream.prototype.id;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/remote-audio-stats-map.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * A list of RemoteAudioStats objects, one per uid.
 * @record
 */
function RemoteAudioStatsMap() { }

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/remote-audio-stats.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * @record
 */
function RemoteAudioStats() { }
if (false) {
    /**
     * Decoding type of the received audio.
     *
     * - "1": Opus.
     * - "2": AAC.
     * @type {?|undefined}
     */
    RemoteAudioStats.prototype.CodecType;
    /**
     * End-to-end delay in ms.
     *
     * Delay from capturing to playing the audio.
     * @type {?|undefined}
     */
    RemoteAudioStats.prototype.End2EndDelay;
    /**
     * Whether the audio is muted or not.
     * - "1": Muted.
     * - "0": Unmuted.
     * @type {?|undefined}
     */
    RemoteAudioStats.prototype.MuteState;
    /**
     * Packet loss rate (%) of the remote audio.
     * @type {?|undefined}
     */
    RemoteAudioStats.prototype.PacketLossRate;
    /**
     * Bitrate of the received audio, in Kbps.
     * @type {?|undefined}
     */
    RemoteAudioStats.prototype.RecvBitrate;
    /**
     * Volume of the received audio.
     * @type {?|undefined}
     */
    RemoteAudioStats.prototype.RecvLevel;
    /**
     * Total freeze time of the received audio.
     * @type {?|undefined}
     */
    RemoteAudioStats.prototype.TotalFreezeTime;
    /**
     * Total playing duration of the received audio.
     * @type {?|undefined}
     */
    RemoteAudioStats.prototype.TotalPlayDuration;
    /**
     * Transport delay in ms.
     *
     * Delay from sending to receiving the audio.
     * @type {?|undefined}
     */
    RemoteAudioStats.prototype.TransportDelay;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/remote-stream-stats.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * The connection statistics of the remote stream.
 * @record
 */
function RemoteStreamStats() { }
if (false) {
    /**
     * Bytes of the received audio.
     * @type {?}
     */
    RemoteStreamStats.prototype.audioReceiveBytes;
    /**
     * Delay in receiving the audio (ms).
     *
     * Delay from sending to playing the audio, only supported by Chrome for now.
     * @type {?}
     */
    RemoteStreamStats.prototype.audioReceiveDelay;
    /**
     * Packets of the received audio.
     * @type {?}
     */
    RemoteStreamStats.prototype.audioReceivePackets;
    /**
     * Number of lost packets of the received audio.
     * @type {?}
     */
    RemoteStreamStats.prototype.audioReceivePacketsLost;
    /**
     * Delay from sending to receiving data.
     * @type {?}
     */
    RemoteStreamStats.prototype.endToEndDelay;
    /**
     * Bytes of the received video.
     * @type {?}
     */
    RemoteStreamStats.prototype.videoReceiveBytes;
    /**
     * Decode frame rate after the video is received.
     * @type {?}
     */
    RemoteStreamStats.prototype.videoReceiveDecodeFrameRate;
    /**
     * Delay in receiving the video (ms).
     *
     * Delay from sending to playing the video, only supported by Chrome for now.
     * @type {?}
     */
    RemoteStreamStats.prototype.videoReceiveDelay;
    /**
     * Frame rate rof the received video.
     * @type {?}
     */
    RemoteStreamStats.prototype.videoReceiveFrameRate;
    /**
     * Packets of the received video.
     * @type {?}
     */
    RemoteStreamStats.prototype.videoReceivePackets;
    /**
     * Number of lost packets of the received video.
     * @type {?}
     */
    RemoteStreamStats.prototype.videoReceivePacketsLost;
    /**
     * Resolution height of the received video.
     * @type {?|undefined}
     */
    RemoteStreamStats.prototype.videoReceiveResolutionHeight;
    /**
     * Resolution width of the received video.
     * @type {?|undefined}
     */
    RemoteStreamStats.prototype.videoReceiveResolutionWidth;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/remote-video-stats-map.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * A list of `RemoteVideoStats` objects, one per uid.
 * @record
 */
function RemoteVideoStatsMap() { }

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/remote-video-stats.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * Video statistics of the remote stream.
 * @record
 */
function RemoteVideoStats() { }
if (false) {
    /**
     * End-to-end delay in ms.
     *
     * Delay from capturing to playing the video.
     * @type {?|undefined}
     */
    RemoteVideoStats.prototype.End2EndDelay;
    /**
     * Whether the video is muted or not.
     *
     * - "1": Muted.
     * - "0": Unmuted.
     * @type {?|undefined}
     */
    RemoteVideoStats.prototype.MuteState;
    /**
     * Packet loss rate (%) of the remote video.
     * @type {?|undefined}
     */
    RemoteVideoStats.prototype.PacketLossRate;
    /**
     * Bitrate of the received video, in Kbps.
     * @type {?|undefined}
     */
    RemoteVideoStats.prototype.RecvBitrate;
    /**
     * Resolution height of the received video, in pixels.
     * @type {?|undefined}
     */
    RemoteVideoStats.prototype.RecvResolutionHeight;
    /**
     * Resolution width of the received video, in pixels.
     * @type {?|undefined}
     */
    RemoteVideoStats.prototype.RecvResolutionWidth;
    /**
     * Rendering frame rate of the decoded video, in fps.
     * @type {?|undefined}
     */
    RemoteVideoStats.prototype.RenderFrameRate;
    /**
     * Height (pixels) of the rendered video.
     * @type {?|undefined}
     */
    RemoteVideoStats.prototype.RenderResolutionHeight;
    /**
     * Width (pixels) of the rendered video.
     * @type {?|undefined}
     */
    RemoteVideoStats.prototype.RenderResolutionWidth;
    /**
     * Total freeze time of the received video.
     * @type {?|undefined}
     */
    RemoteVideoStats.prototype.TotalFreezeTime;
    /**
     * Total playing duration of the received video.
     * @type {?|undefined}
     */
    RemoteVideoStats.prototype.TotalPlayDuration;
    /**
     * Transport delay in ms.
     *
     * Delay from sending to receiving the video.
     * @type {?|undefined}
     */
    RemoteVideoStats.prototype.TransportDelay;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/session-stats.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * @record
 */
function SessionStats() { }
if (false) {
    /**
     * Call duration in seconds, represented by an aggregate value.
     * @type {?|undefined}
     */
    SessionStats.prototype.Duration;
    /**
     * Total received bitrate of the stream, in Kbps, represented by an instantaneous value.
     * @type {?|undefined}
     */
    SessionStats.prototype.RecvBitrate;
    /**
     * Total number of bytes received, represented by an aggregate value.
     * @type {?|undefined}
     */
    SessionStats.prototype.RecvBytes;
    /**
     * Total sent bitrate of the stream, in Kbps, represented by an instantaneous value.
     * @type {?|undefined}
     */
    SessionStats.prototype.SendBitrate;
    /**
     * Total number of bytes sent, represented by an aggregate value.
     * @type {?|undefined}
     */
    SessionStats.prototype.SendBytes;
    /**
     * Number of users in the channel.
     *
     * rtc mode: The number of all users in the channel.
     * live mode
     *  - If the local user is an audience: The number of hosts in the channel + 1.
     *  - If the user is a host: The number of hosts in the channel.
     * @type {?|undefined}
     */
    SessionStats.prototype.UserCount;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/stream-spec.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * A class defining the `spec` paramter in the
 * [createStream](https://docs.agora.io/en/Video/API%20Reference/web/globals.html#createstream) method.
 *
 *  * \@remark
 * - Do not set `video` and `screen` as `true` at the same time.
 * - To enable screen-sharing on the Firefox browser, ensure that the `screen` property is
 * set to `true`, and the `mediaSource` property has been set to specify a certain sharing mode.
 *
 * # Create a Stream
 *
 * You have two options to create an audio/video stream:
 *
 *  ## Set the audio, video, and screen properties
 *  const stream = AgoraRTC.createStream({
 *   streamID: uid,
 *   audio:true,
 *   video:true,
 *   screen:false
 *  });
 *
 *
 * ## Set the audioSource and videoSource properties
 *
 * Compared with the first option, the
 * [audioSource](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.streamspec.html#audiosource)
 * and [videoSource](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.streamspec.html#videosource)
 * properties can specify the audio and video tracks for the stream. Use this option if you need to process the audio
 * and video before creating the stream.
 *
 * Use the `mediaStream` method to get the audio and video tracks from `MediaStreamTrack`, and then set `audioSource` and `videoSource`:
 *
 * navigator.mediaDevices.getUserMedia(
 *     {video: true, audio: true}
 * ).then(function(mediaStream){
 *     var videoSource = mediaStream.getVideoTracks()[0];
 *     var audioSource = mediaStream.getAudioTracks()[0];
 *     // After processing videoSource and audioSource
 *     var localStream = AgoraRTC.createStream({
 *         video: true,
 *         audio: true,
 *         videoSource: videoSource,
 *         audioSource: audioSource
 *     });
 *     localStream.init(function(){
 *         client.publish(localStream, function(e){
 *             //...
 *         });
 *     });
 * });
 *
 * \@remark
 * - `MediaStreamTrack` refers to the `MediaStreamTrack` object supported by the browser.
 * - Currently this option only supports the Chrome brower.
 *
 * @see [MediaStreamTrack API](https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack) for details.
 *
 *
 * ### Enable Screen-sharing on the Chrome Web Browser
 *
 * const stream = AgoraRTC.createStream({
 *   streamID: uid,
 *   audio:false,
 *   video:false,
 *   screen:true,
 *   extensionId:"minllpmhdgpndnkomcoccfekfegnlikg"});
 *
 * ### Enable Screen-sharing on the Firefox Web Browser
 *
 * localStream = AgoraRTC.createStream({
 *      streamID: uid,
 *      audio: false,
 *      video: false,
 *      screen: true,
 *      mediaSource: "screen",
 *    });
 *
 * For a tutorial on screen-sharing on a website,
 * @see [Share the Screen](https://docs.agora.io/en/Video/screensharing_web?platform=Web).
 * @record
 */
function StreamSpec() { }
if (false) {
    /**
     * Whether this stream contains an audio track.
     * @type {?}
     */
    StreamSpec.prototype.audio;
    /**
     * Whether to enable audio processing.
     *
     * \@param [AEC] Whether to enable acoustic echo cancellation.
     * The default value is `true` (enable). If you wish not to enable the acoustic echo cancellation, set AEC as `false`.
     * \@param [AGC] Whether to enable audio gain control.
     * The default value is true (enable). If you wish not to enable the audio gain control, set AGC as false.
     * \@param [ANS] Whether to enable automatic noise suppression.
     * The default value is true (enable). If you wish not to enable automatic noise suppression, set ANS as false.
     *
     * \@remark
     * - Safari does not support this setting.
     * - Noise suppression is always enabled on Firefox. Setting `ANS` as `false` does not take effect on Firefox.
     * @type {?|undefined}
     */
    StreamSpec.prototype.audioProcessing;
    /**
     * Specifies the audio source of the stream.
     * @type {?|undefined}
     */
    StreamSpec.prototype.audioSource;
    /**
     * The camera device ID retrieved from the [getDevices](https://docs.agora.io/en/Video/API%20Reference/web/globals.html#getdevices)
     * method.
     *
     * The retrieved ID is ASCII characters, and the string length is greater than 0 and less than 256 bytes.
     *
     * When the string length is 0, this property is ignored.
     * @type {?|undefined}
     */
    StreamSpec.prototype.cameraId;
    /**
     * The extension ID of the Chrome screen-sharing extension.
     *
     * ASCII characters only, and the string length must be greater than 0 and less than 256 bytes.
     * Set this property if you use the Chrome screen-sharing extension.
     * @see [Chrome Extension for Screen Sharing](https://docs.agora.io/en/Video/chrome_screensharing_plugin?platform=Web) for details.
     *
     * \@remark
     * Chrome 72 and later versions support screen sharing without the extension. You can leave extensionId as empty.
     * If you set the `extensionId`, then you need to use the screen-sharing extension.
     * @type {?|undefined}
     */
    StreamSpec.prototype.extensionId;
    /**
     * Sets using the front or rear camera.
     *
     * You can set this parameter to use the front or rear camera on mobile devices:
     * - `"user"`: The front camera
     * - `"environment"`: The rear camera
     * @type {?|undefined}
     */
    StreamSpec.prototype.facingMode;
    /**
     * The screen-sharing mode on the Firefox browser.
     *
     * If you are using the Firefox browser, setting this property specifies the screen-sharing mode:
     * - `"screen"`: (default) share the current screen
     * - `"application"`: share all windows of an App
     * - `"window"`: share a specified window of an App
     *
     * \@remark
     * Firefox on Windows does not support the application mode.
     *
     * @see
     * [Screen Sharing on Firefox](https://docs.agora.io/en/Video/screensharing_web?platform=Web#a-name-ff-a-screen-sharing-on-firefox)
     * for details.
     * @type {?|undefined}
     */
    StreamSpec.prototype.mediaSource;
    /**
     * The microphone device ID retrieved from the
     * [getDevices](https://docs.agora.io/en/Video/API%20Reference/web/globals.html#getdevices) method.
     *
     * The retrieved ID is ASCII characters, and the string length is greater than 0 and less than 256 bytes.
     *
     * When the string length is 0, this property is ignored.
     * @type {?|undefined}
     */
    StreamSpec.prototype.microphoneId;
    /**
     * Marks whether to mirror the local video image of the publisher in the local preview.
     *
     * This setting does not take effect in screen-sharing streams.
     * - `true`: (Default) Mirror the local video.
     * - `false`: Do not mirror the local video.
     *
     * Agora recommends enabling this function when using the front camera, and disabling it when using the rear camera.
     * @type {?|undefined}
     */
    StreamSpec.prototype.mirror;
    /**
     * Whether this stream contains a screen-sharing track.
     *
     * @see [Share the Screen](https://docs.agora.io/en/Video/screensharing_web?platform=Web) for details.
     * @type {?|undefined}
     */
    StreamSpec.prototype.screen;
    /**
     * Marks whether to share the audio playback when sharing the screen.
     *
     * - `true`: Share the local audio playback when sharing the screen.
     * - `false`: (Default) Do not share the local audio playback when sharing the screen.
     *
     * To share the local audio playback when sharing the screen, ensure that you set screen as `true`.
     * We recommend also setting [audio](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.streamspec.html#audio)
     * as false. If both `screenAudio` and `audio` are set as `true`, the stream only contains the local audio playback.
     *
     * \@remark
     * - This function supports only Chrome 73 or later on Windows.
     * - For the audio sharing to take effect, the user must check **Share audio** in the pop-up window when sharing the screen.
     *
     * \@since 3.0.0
     * @type {?|undefined}
     */
    StreamSpec.prototype.screenAudio;
    /**
     * The stream ID.
     *
     * Please set the stream ID as the user ID, which can be retrieved from the callback of
     * [Client.join](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#join).
     * @type {?|undefined}
     */
    StreamSpec.prototype.streamID;
    /**
     * Whether this stream contains a video track.
     * @type {?}
     */
    StreamSpec.prototype.video;
    /**
     * Specifies the video source of the stream.
     *
     * \@remark
     * If you use a video source created by the Canvas API, re-draw on the canvas every one second
     * when the drawing is still to keep the video publishing.
     * @type {?|undefined}
     */
    StreamSpec.prototype.videoSource;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/stream-stats.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * @record
 */
function StreamStats() { }
if (false) {
    /**
     * Delay in accessing the SD-RTN (ms).
     * @type {?}
     */
    StreamStats.prototype.accessDelay;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/stream.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * The Stream object created by the [createStream](https://docs.agora.io/en/Video/API%20Reference/web/globals.html#createstream) method.
 *
 * A stream represents a published local or remote media stream object in a call session.
 * All Stream methods can be called for both local and remote streams, except for
 * [Stream.init](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#init)
 * that only applies to the local stream.
 * @record
 */
function Stream() { }
if (false) {
    /**
     * This method adds the audio or video tracks into the stream.
     *
     * \@remark
     * This method does not support Firefox and Safari.
     * A Stream object can have only one audio track and one video track at most.
     *
     * \@param track The track can be retrieved from the `mediaStream` method.
     *
     * \@example
     * const localStream = AgoraRTC.createStream({audio: true, video: false});
     * localStream.addTrack(anotherStream.getVideoTrack());
     *
     * @type {?}
     */
    Stream.prototype.addTrack;
    /**
     * Adjusts Audio Mixing Volume
     *
     * \@param level The volume of the mixing audio. The value ranges between 0 and 100 (default).
     * @type {?}
     */
    Stream.prototype.adjustAudioMixingVolume;
    /**
     * This method closes the video/audio stream.
     *
     * After calling this method, the camera and microphone authorizations are reset.
     * @type {?}
     */
    Stream.prototype.close;
    /**
     * @deprecated `v2.5.1`, use
     * [muteAudio](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#muteaudio) instead.
     *
     * Disables the audio for a stream.
     *
     * This method disables the audio track in the stream.
     * It works only when the audio flag is `true` in the stream.
     * @type {?}
     */
    Stream.prototype.disableAudio;
    /**
     * @deprecated `v2.5.1`, use
     * [muteVideo](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#mutevideo) instead.
     *
     * Disables the video for a stream.
     *
     * This method disables the video track in the stream.
     * It works only when the video flag is `true` in the stream.
     * @type {?}
     */
    Stream.prototype.disableVideo;
    /**
     * @deprecated `v2.5.1`, use
     * [unmuteAudio](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#unmuteaudio) instead.
     *
     * Enabled the audio for a stream.
     *
     * This method enables the audio track in the stream.
     * It works only when the audio flag is `true` in the stream.
     *
     * \@remark
     * By default the audio track is enabled. If you call
     * [disableAudio](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#disableaudio),
     * call this method to enable audio.
     * @type {?}
     */
    Stream.prototype.enableAudio;
    /**
     * @deprecated `v2.5.1`, use
     * [unmuteVideo](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#unmutevideo) instead.
     *
     * Enabled the video for a stream.
     *
     * This method enables the video track in the stream.
     * It works only when the video flag is `true` in the stream.
     *
     * \@remark
     * By default the video track is enabled. If you call
     * [disabledVideo](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#disablevideo),
     * call this method to enable audio.
     * @type {?}
     */
    Stream.prototype.enableVideo;
    /**
     * This method retrieves the current audio level.
     *
     * Call `setTimeout` or `setInterval` to retrieve the local or remote audio change.
     *
     * \@example
     * setInterval(_ => {
     *  var audioLevel = stream.getAudioLevel();
     *  // Use audioLevel to render the UI
     * }, 100)
     *
     * \@remark
     * This method does not apply to streams that contain no audio data and may result in warnings.
     *
     * Due to browser policy changes, this method must be triggered by the user's gesture on the
     * Chrome 70+ and Safari browser. See
     * [Autoplay Policy Changes](https://developers.google.com/web/updates/2017/09/autoplay-policy-changes) for details.
     * @type {?}
     */
    Stream.prototype.getAudioLevel;
    /**
     * Returns the current playback position of the audio mixing if successful.
     * @type {?}
     */
    Stream.prototype.getAudioMixingCurrentPosition;
    /**
     * Returns the audio mixing duration (ms) if successful.
     * @type {?}
     */
    Stream.prototype.getAudioMixingDuration;
    /**
     * This method retrieves the audio track in the stream and can be used together with
     * [replaceTrack](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#replacetrack).
     *
     * If the stream contains an audio track, it will be returned in a `MediaStreamTrack` object.
     * @type {?}
     */
    Stream.prototype.getAudioTrack;
    /**
     * Gets the volume of the audio effects.
     *
     * \@example
     * const volumes = stream.getEffectsVolume();
     * volumes.forEach((soundId, volume) => {
     *    console.log("SoundId", soundId, "Volume", volume);
     * });
     *
     * \@return Returns an array that contains `soundId` and `volume`. Each soundId has a corresponding `volume`.
     * - `volume`: Volume of the audio effect. The value range is `[0,100]`.
     * @type {?}
     */
    Stream.prototype.getEffectsVolume;
    /**
     * This method retrieves the stream ID.
     *
     * \@example
     * const id = stream.getId()
     * @type {?}
     */
    Stream.prototype.getId;
    /**
     * This method gets the connection statistics of the stream.
     *
     * \@remark
     * It may take some time to get some of the statistics.
     *
     * \@example
     * localStream.getStats(stats => {
     *    console.log(`Local Stream accessDelay: ${stats.accessDelay}`);
     *    console.log(`Local Stream audioSendBytes: ${stats.audioSendBytes}`);
     *    console.log(`Local Stream audioSendPackets: ${stats.audioSendPackets}`);
     *    console.log(`Local Stream audioSendPacketsLost: ${stats.audioSendPacketsLost}`);
     *    console.log(`Local Stream videoSendBytes: ${stats.videoSendBytes}`);
     *    console.log(`Local Stream videoSendFrameRate: ${stats.videoSendFrameRate}`);
     *    console.log(`Local Stream videoSendPackets: ${stats.videoSendPackets}`);
     *    console.log(`Local Stream videoSendPacketsLost: ${stats.videoSendPacketsLost}`);
     *    console.log(`Local Stream videoSendResolutionHeight: ${stats.videoSendResolutionHeight}`);
     *    console.log(`Local Stream videoSendResolutionWidth: ${stats.videoSendResolutionWidth}`);
     * });
     *
     *
     * remoteStream.getStats(stats => {
     *    console.log(`Remote Stream accessDelay: ${stats.accessDelay}`);
     *    console.log(`Remote Stream audioReceiveBytes: ${stats.audioReceiveBytes}`);
     *    console.log(`Remote Stream audioReceiveDelay: ${stats.audioReceiveDelay}`);
     *    console.log(`Remote Stream audioReceivePackets: ${stats.audioReceivePackets}`);
     *    console.log(`Remote Stream audioReceivePacketsLost: ${stats.audioReceivePacketsLost}`);
     *    console.log(`Remote Stream endToEndDelay: ${stats.endToEndDelay}`);
     *    console.log(`Remote Stream videoReceiveBytes: ${stats.videoReceiveBytes}`);
     *    console.log(`Remote Stream videoReceiveDecodeFrameRate: ${stats.videoReceiveDecodeFrameRate}`);
     *    console.log(`Remote Stream videoReceiveDelay: ${stats.videoReceiveDelay}`);
     *    console.log(`Remote Stream videoReceiveFrameRate: ${stats.videoReceiveFrameRate}`);
     *    console.log(`Remote Stream videoReceivePackets: ${stats.videoReceivePackets}`);
     *    console.log(`Remote Stream videoReceivePacketsLost: ${stats.videoReceivePacketsLost}`);
     *    console.log(`Remote Stream videoReceiveResolutionHeight: ${stats.videoReceiveResolutionHeight}`);
     *    console.log(`Remote Stream videoReceiveResolutionWidth: ${stats.videoReceiveResolutionWidth}`);
     * });
     *
     * \@return Connection statistics of the stream.
     * - If it is a publishing stream, then the stats is
     *   [LocalStreamStats](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.localstreamstats.html).
     * - If it is a subscribing stream, then the stats is
     *   [RemoteStreamStats](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.remotestreamstats.html).
     * @type {?}
     */
    Stream.prototype.getStats;
    /**
     * This method retrieves the video track in the stream and can be used together with
     * [replaceTrack](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#replacetrack).
     *
     * If the stream contains an audio track, it will be returned in a `MediaStreamTrack` object.
     *
     * @type {?}
     */
    Stream.prototype.getVideoTrack;
    /**
     * This method retrieves the audio flag.
     *
     * \@return Audio flag of stream.
     * - `true`: The stream contains audio data.
     * -`false`: The stream does not contain audio data.
     * @type {?}
     */
    Stream.prototype.hasAudio;
    /**
     * This method retrieves the video flag.
     *
     * \@return Video flag of stream.
     * - `true`: The stream contains video data.
     * - `false`: The stream does not contain video data.
     * @type {?}
     */
    Stream.prototype.hasVideo;
    /**
     * This method initializes the local stream object.
     *
     * If this method fails
     * @see [getUserMedia Exceptions](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia#Exceptions)
     * for error information.
     *
     * Some errors might be returned in the callback, for example: `{type: "error", msg: "NotAllowedError", info: "Permission denied"}`.
     *
     * The possible error information in the `msg` field includes:
     *
     * - NotAllowedError: User refuses to grant access to camera or audio resource.
     * - MEDIA_OPTION_INVALID: The camera is occupied or the resolution is not supported (on browsers in early versions).
     * - DEVICES_NOT_FOUND: No device is found.
     * - NOT_SUPPORTED: The browser does not support using camera and microphone.
     * - PERMISSION_DENIED: The device is disabled by the browser or the user has denied permission of using the device.
     * - CONSTRAINT_NOT_SATISFIED: The settings are illegal (on browsers in early versions).
     * - PluginNotInstalledProperly: A screen-sharing request is made with no plugin installed or with a
     *   wrong extensionId on the Chrome browser.
     * - UNDEFINED: Undefined error.
     *
     * The `info` field shows the extra information for the error. If no more extra information, its value will be `null`.
     *
     * \@example
     * init(_ => {
     *     console.log("local stream initialized");
     *     // publish the stream
     *     //……
     * }, err => {
     *     console.error("local stream init failed ", err);
     *     //error handling
     * });
     * @type {?}
     */
    Stream.prototype.init;
    /**
     * Returns whether the Stream is Playing
     *
     * - `true`: The stream is being rendered or playing on the page.
     * - `false`: The stream is neither being rendered nor playing on the page.
     * @type {?}
     */
    Stream.prototype.isPlaying;
    /**
     * Disables the audio track in the stream.
     *
     * - For local streams, the SDK stops sending audio after you call this method.
     * - For remote streams, the SDK still receives audio but stops playing it after you call this method.
     *
     * \@remark
     * For local streams, it works only when the `audio` flag is `true` in the stream.
     *
     * \@return void ([Docs unclear](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#muteaudio))
     * - `true`: Success.
     * - `false`: Failure. Possible reasons include no audio, stream not initialized, and audio track already disabled.
     * @type {?}
     */
    Stream.prototype.muteAudio;
    /**
     * Disables the video track in the stream.
     *
     * - For local streams, the SDK stops sending video after you call this method.
     * - For remote streams, the SDK still receives video but stops playing it after you call this method.
     *
     * \@remark
     * For local streams, it works only when the video flag is true in the stream.
     *
     * \@return void ([Docs unclear](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#mutevideo))
     * - `true`: Success.
     * - `false`: Failure. Possible reasons include no video, stream not initialized, and video track already disabled.
     * @type {?}
     */
    Stream.prototype.muteVideo;
    /**
     * Occurs when an Agora.io event connected to the specific stream is received from the SDK.
     *
     * @see [On](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#on)
     * for all variations of this core function.
     * @type {?}
     */
    Stream.prototype.on;
    /**
     * Pauses all audio effects.
     *
     * \@example
     * stream.pauseAllEffects(err => {
     * if (err) {
     *         console.error("Failed to pause effects, reason: ", err);
     * } else {
     *         console.log("Effects are paused successfully");
     * }
     * });
     * @type {?}
     */
    Stream.prototype.pauseAllEffects;
    /**
     * Pauses audio mixing.
     * @type {?}
     */
    Stream.prototype.pauseAudioMixing;
    /**
     * Pauses a specified audio effect.
     *
     * \@example
     * // When the audio effect 1 is playing
     * stream.pauseEffect(1, err => {
     *   if (err) {
     *      console.error("Failed to pause Effect, reason: ", err);
     *   } else {
     *      console.log("Effect is paused successfully");
     *   }
     * });
     * @type {?}
     */
    Stream.prototype.pauseEffect;
    /**
     * Plays the video or audio stream.
     *
     * \@remark
     * Due to browser policy changes, this method must be triggered by the user's
     * gesture on the Chrome 70+ and Safari browsers.
     * @see [Autoplay Policy Changes](https://developers.google.com/web/updates/2017/09/autoplay-policy-changes) for details.
     *
     * \@example
     * stream.play("agora_remote", {fit: 'contain'}); // stream will be played in the element with the ID agora_remote
     *
     * \@param HTMLElementID
     * Represents the HTML element ID. Digits and letters in the ASCII character set, “_”, “-", and ".".
     * The string length must be greater than 0 and less than 256 bytes.
     * @type {?}
     */
    Stream.prototype.play;
    /**
     * Plays a specified audio effect.
     *
     * This method supports playing multiple audio effect files at the same time, and is different from
     * [startAudioMixing](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#startaudiomixing).
     * You can use this method to add specific audio effects for specific scenarios. For example, gaming.
     *
     * \@remark
     * - Due to web browser autoplay policy changes, this method must be triggered by a user gesture on Chrome 70+ and Safari web
     *   browsers.
     * @see [Autoplay Policy Changes](https://developers.google.com/web/updates/2017/09/autoplay-policy-changes) for details.
     *
     * This method supports the following web browsers:
     * - Safari 12 and later
     * - Chrome 65 and later
     * - Firefox 66 and later
     * - Call this method when you are in a channel. Otherwise, it may cause issues.
     *
     * \@example
     * stream.playEffect({
     *    soundId: 1,
     *    filePath: "biu.mp3"
     * }, error => {
     *    if (error) {
     *        // Error handling
     *        return;
     *    }
     *    // Process after the method call succeeds
     * });
     *
     * \@remark
     * The callbacks of the audio effect methods all use the Node.js callback pattern.
     * @type {?}
     */
    Stream.prototype.playEffect;
    /**
     * Preloads a specified audio effect file into the memory.
     *
     * To ensure smooth communication, limit the size of the audio effect file.
     *
     * \@example
     * stream.preloadEffect(1, "https://web-demos-static.agora.io/agora/smlt.flac", err => {
     *   if (err) {
     *       console.error("Failed to preload effect, reason: ", err);
     *   } else {
     *       console.log("Effect is preloaded successfully");
     *   }
     * });
     * @type {?}
     */
    Stream.prototype.preloadEffect;
    /**
     * Removes the audio or video tracks from the stream.
     *
     * \@remark
     * - If you need to change both the audio and video tracks, we recommend using the replaceTrack method instead.
     * - This method does not support Firefox and Safari.
     *
     * \@example
     * const localStream = AgoraRTC.createStream({ audio: true, video: true });
     * localStream.removeTrack(localStream.getAudioTrack());
     * @type {?}
     */
    Stream.prototype.removeTrack;
    /**
     * Replaces the audio or video MediaStreamTrack in the local stream.
     *
     * After the local stream is published, you can use this method to switch the cameras, or switch
     * between the microphone and the music player.
     *
     * The new track can be retrieved by getUserMedia, MediaElement.captureStream or other methods.
     *
     * The replaced track will be stopped.
     *
     * \@remark
     * Supports Chrome 65+, Safari, and latest Firefox.
     * - Firefox does not support switching audio tracks between different microphones.
     *   You can replace the audio track from the microphone with an audio file, or vice versa.
     * - Replacing audio tracks from external audio devices may not be fully supported on Safari.
     * - The subscriber will not be notified if the track gets replaced.
     * - Agora recommends you use
     * [switchDevice](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#switchdevice)
     * to switch the media input devices.
     *
     * \@example
     * // Suppose we have a localStream1
     *   localStream2 = AgoraRTC.createStream({ video: true, cameraId: "ABC" });
     *   localStream2.setVideoProfile('<same as localStream1>')
     *   localStream2.init(_ => {
     *       const newVideoTrack = localStream2.getVideoTrack();
     *       localStream1.replaceTrack(newVideoTrack);
     *   });
     *
     * @type {?}
     */
    Stream.prototype.replaceTrack;
    /**
     * Resumes the Audio/Video Stream Playback.
     * This method can be used when the playback fails after calling the
     * [Stream.play](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#play) method.
     * In most cases, the playback is stopped due to the browser policy.
     *
     * This method needs to be triggered by a user gesture.
     *
     * @see [Autoplay Policy Changes](https://developers.google.com/web/updates/2017/09/autoplay-policy-changes) for more information.
     * @type {?}
     */
    Stream.prototype.resume;
    /**
     * Resumes playing all audio effects.
     *
     * \@example
     * stream.resumeAllEffects(err => {
     *     if (err) {
     *         console.error("Failed to resume effects, reason: ", err);
     *     } else {
     *         console.log("Effects are resumed successfully");
     *     }
     * });
     * @type {?}
     */
    Stream.prototype.resumeAllEffects;
    /**
     * Resumes audio mixing.
     *
     * When the audio mixing file playback resumes, the SDK triggers the `Stream.on("audioMixingPlayed")` callback on the local client.
     * @type {?}
     */
    Stream.prototype.resumeAudioMixing;
    /**
     * Resumes playing a specified audio effect.
     *
     * \@example
     * // When the audio effect 1 is paused
     * stream.resumeEffect(1, err => {
     *     if (err) {
     *         console.error("Failed to resume Effect, reason: ", err);
     *     } else {
     *         console.log("Effect is resumed successfully");
     *     }
     * });
     * @type {?}
     */
    Stream.prototype.resumeEffect;
    /**
     * Sets the playback position of the audio mixing file to a different start position (by default plays from the beginning).
     *
     * \@param position
     * The time (ms) to start playing the audio mixing file, an integer. The value range is `[0,100000000]`.
     * @type {?}
     */
    Stream.prototype.setAudioMixingPosition;
    /**
     * Sets the audio output device for the remote stream. You can use it to switch between the microphone and the speakerphone.
     * It can be called either before or after the remote stream is played.
     *
     * \@remark
     * Only Chrome 49+ supports this function.
     *
     * \@param deviceId The device ID can be retrieved from
     * [getDevices](https://docs.agora.io/en/Video/API%20Reference/web/globals.html#getdevices), whose
     * [kind](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.mediastreamtrack.html#kind) should be "audiooutput".
     *
     * The retrieved ID is ASCII characters, and the string length is greater than 0 and less than 256 bytes.
     * @type {?}
     */
    Stream.prototype.setAudioOutput;
    /**
     * This method sets the audio profile.
     * It is optional and works only when called before
     * [Stream.init](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#init).
     * The default value is `'music_standard'`.
     *
     * Due to the limitations of browsers, some browsers may not be fully compatible with the audio profile you set.
     * - Firefox does not support setting the audio encoding rate.
     * - Safari does not support stereo audio.
     * - The latest version of Google Chrome does not support playing stereo audio, but supports sending a stereo audio stream.
     *
     * \@param profile The audio profile has the following options:
     * - `'speech_low_quality'`: Sample rate 16 kHz, mono, encoding rate 24 Kbps.
     * - `'speech_standard'`: Sample rate 32 kHz, mono, encoding rate 24 Kbps.
     * - `'music_standard'`: Sample rate 48 kHz, mono, encoding rate 40 Kbps.
     * - `'standard_stereo'`: Sample rate 48 kHz, stereo, encoding rate 64 Kbps.
     * - `'high_quality'`: Sample rate 48 kHz, mono, encoding rate 128 Kbps.
     * - `'high_quality_stereo'`: Sample rate 48 kHz, stereo, encoding rate 192 Kbps.
     * @type {?}
     */
    Stream.prototype.setAudioProfile;
    /**
     * Sets the volume for the remote stream.
     * It can be called either before or after the remote stream is played.
     *
     * \@param volume Ranges from 0 (muted) to 100 (loudest).
     * @type {?}
     */
    Stream.prototype.setAudioVolume;
    /**
     * Enables/Disables image enhancement and sets the options.
     *
     *
     * This method supports the following browsers:
     * - Safari 12 or later
     * - Chrome 65 or later
     * - Firefox 70.0.1 or later
     *
     * \@remark
     * - This function does not support mobile devices.
     * - If the dual-stream mode is enabled
     *   ([enableDualStream](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#enabledualstream)),
     *   the image enhancement options apply only to the high-video stream.
     * - If image enhancement is enabled, you must call this method to disable it before calling the following methods:
     *  - [leave](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#leave)
     *  - [stop](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#stop)
     *  - [removeTrack](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#removetrack)
     *  - [unpublish](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#unpublish)
     *
     * - The image enhancement function involves real-time compute-intensive processing.
     *   Though it is based on hardware acceleration, the processing has high GPU and CPU overheads.
     *   For low-end devices, enabling image enhancement affects the system performance.
     *   When the video resolution is set as 360p, 720p or higher, and the frame rate is set as 30 fps or 15 fps,
     *   do not enable image enhancement.
     *
     * \@example
     * stream.setBeautyEffectOptions(true, {
     *     lighteningContrastLevel: 1,
     *     lighteningLevel: 0.7,
     *     smoothnessLevel: 0.5,
     *     rednessLevel: 0.1
     * });
     *
     * \@since 3.0.0
     * @type {?}
     */
    Stream.prototype.setBeautyEffectOptions;
    /**
     * Sets the volume of the audio effects.
     *
     * \@param volume
     * Volume of the audio effect. The value range is [0,100].The default value is 100 (the original volume).
     *
     * \@example
     * stream.setEffectsVolume(0, err => {
     *     if (err) {
     *         console.error("Failed to set effects volume, reason: ", err);
     *     } else {
     *         console.log("Effects volume is set successfully");
     *     }
     * });
     * @type {?}
     */
    Stream.prototype.setEffectsVolume;
    /**
     * This method sets the profile of the screen in screen-sharing.
     *
     * @see [Table](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#setscreenprofile) for details.
     *
     * \@remark
     * Due to limitations of some devices and browsers, the resolution you set may fail to take effect and get adjusted by the browser.
     * In this case, billings will be calculated based on the actual resolution.
     * @type {?}
     */
    Stream.prototype.setScreenProfile;
    /**
     * Customizes the Video Encoder Configuration.
     * You can use this method to customize the video resolution, frame rate, and bitrate of the local stream.
     * This method can be called before or after
     * [Stream.init](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#init).
     *
     * \@remark
     * - Do not call this method when publishing streams.
     * - If you enable dual streams
     *   ([enableDualStream](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#enabledualstream)),
     *   we do not support increasing the video resolution in this method.
     *   This is a [known issue](https://bugs.chromium.org/p/chromium/issues/detail?id=768205) of Chromium.
     * - On some iOS devices, when you update the video encoder configuration after
     *   [Stream.init](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#init),
     *   black bars might appear around your video.
     * - The actual resolution, frame rate, and bitrate depend on the device,
     *   see [Media​Stream​Track​.apply​Constraints()](https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack/applyConstraints)
     *   for more information.
     * - This method works on Chrome 63 or later and is not fully functional on other browsers with the following issues:
     *  - The frame rate setting does not take effect on Safari 12 or earlier.
     *  - Safari 11 or earlier only supports specific resolutions.
     *  - Safari on iOS does not support low resolutions in H.264 codec.
     *
     * \@example
     * stream.setVideoEncoderConfiguration({
     *  // Video resolution
     *  resolution: {
     *      width: 640,
     *      height: 480
     *  },
     *  // Video encoding frame rate. We recommend 15 fps. Do not set this to a value greater than 30.
     *  frameRate: {
     *      min: 15,
     *      max: 30
     *  },
     *  // Video encoding bitrate.
     *  bitrate: {
     *      min: 1000,
     *      max: 5000
     *  }
     * });
     * @type {?}
     */
    Stream.prototype.setVideoEncoderConfiguration;
    /**
     * Sets the stream's video profile.
     *
     * This method sets the video encoding profile for the local stream. Each video encoding profile includes a set of parameters,
     * such as the resolution,frame rate, and bitrate. The default value is `"480p_1"`.
     *
     * This method is optional and is usually called before
     * [Stream.init](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#init).
     * From v2.7, you can also call this method after
     * [Stream.init](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#init)
     * to change the video encoding profile.
     *
     * \@example
     * setVideoProfile("480p");
     *
     * \@remark
     * - Do not call this method when publishing streams.
     * - If you enable dual streams
     *   ([enableDualStream](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#enabledualstream)),
     *   we do not support increasing the video resolution in this method. This is a
     *   [known issue](https://bugs.chromium.org/p/chromium/issues/detail?id=768205) of Chromium.
     * - On some iOS devices, when you update the video profile after
     *   [Stream.init](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#init),
     *   black bars might appear around your video.
     * - Changing the video profile after
     *   [Stream.init](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#init) works only on
     *   Chrome 63 or later and Safari 11 or later.
     *
     * - Whether 1080 resolution or above can be supported depends on the device. If the device cannot support 1080p, the actual frame rate
     *   is lower than the one listed in the table. Agora optimizes the video on low-end devices.
     * - The Safari browser does not support modifying the video frame rate (30 fps by default). If you set a frame rate other than 30 fps on
     *   Safari, the browser may change or reject your setting.
     * - Due to limitations of some devices and browsers, the resolution you set may fail to take effect and get adjusted by the browser. In
     *   this case, billings are calculated based on the actual resolution.
     * @type {?}
     */
    Stream.prototype.setVideoProfile;
    /**
     * Sets the volume of a specified audio effect.
     *
     * \@param volume Volume of the audio effect. The value range is `[0,100]`.The default value is 100 (the original volume).
     *
     * \@example
     * // When the audio effect 1 is loaded
     * stream.setVolumeOfEffect(1, 50, err => {
     *   if (err) {
     *       console.error("Failed to set volume of Effect, reason: ", err);
     *   } else {
     *       console.log("Effect volume is set to", 50);
     *   }
     * });
     *
     *
     * @type {?}
     */
    Stream.prototype.setVolumeOfEffect;
    /**
     * Starts Audio Mixing
     * This method mixes the specified online audio file with the audio stream from the microphone; or, it
     * replaces the microphone’s audio stream with the specified online audio file.
     *
     * You can specify the number of playback loops and play time duration.
     *
     * \@remark
     * This method supports the following browsers:
     * - Safari 12 and later
     * - Chrome 65 and later
     * - Firefox 66 and later
     *
     * \@remark
     * - Call this method when you are in a channel, otherwise, it may cause issues.
     * - Due to browser policy changes, this method must be triggered by the user's gesture on the Chrome 70+ and Safari browser.
     * @see [Autoplay Policy Changes](https://developers.google.com/web/updates/2017/09/autoplay-policy-changes) for details.
     *
     * \@example
     * stream.startAudioMixing({
     *     filePath: 'example.mp3'
     * }, error => {
     *     if (error) {
     *         // Error handling
     *         return;
     *     }
     *     // Processes after stream playing
     * })
     * @type {?}
     */
    Stream.prototype.startAudioMixing;
    /**
     * Stops the Audio/Video Stream
     *
     * Call this method to stop playing the stream set by
     * [Stream.play](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#play).
     * @type {?}
     */
    Stream.prototype.stop;
    /**
     * Stops playing all audio effects.
     *
     * \@example
     * stream.stopAllEffects(err => {
     *   if (err) {
     *       console.error("Failed to stop effects, reason: ", err);
     *   } else {
     *       console.log("Effects are stopped successfully");
     *   }
     * });
     * @type {?}
     */
    Stream.prototype.stopAllEffects;
    /**
     * Stops audio mixing.
     *
     * When the audio mixing file playback is stopped, the SDK triggers the `Stream.on("audioMixingFinished")` callback on the local client.
     * @type {?}
     */
    Stream.prototype.stopAudioMixing;
    /**
     * Stops playing a specified audio effect.
     *
     * \@example
     * // When the audio effect 1 is playing
     * stream.stopEffect(1, err => {
     *   if (err) {
     *       console.error("Failed to stop Effect, reason: ", err);
     *   } else {
     *       console.log("Effect is stopped successfully");
     *   }
     * });
     * @type {?}
     */
    Stream.prototype.stopEffect;
    /**
     * Switches the media input device.
     *
     * This method switches between the media input devices:
     * - Audio input devices, such as microphones.
     * - Video input devices, such as cameras.
     * If you call this method after [publish](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#publish),
     * there is no need to re-publish the stream after switching the device.
     *
     * \@param deviceId Device ID, which can be retrieved from getDevices. The retrieved ID is ASCII characters,
     * and the string length is greater than 0 and less than 256 bytes.
     * \@remark
     * This method does not support the following scenarios:
     * - Dual-stream mode is enabled by
     *   [enableDualStream](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#enabledualstream).
     * - The remote stream.
     * - The stream is created by defining the
     *   [audioSource](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.streamspec.html#audiosource)
     *   and [videoSource](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.streamspec.html#videosource) properties.
     * - The Firefox browser.
     *
     * \@remark
     * This method might not take effect on some mobile devices.
     * @type {?}
     */
    Stream.prototype.switchDevice;
    /**
     * Releases a specified preloaded audio effect from the memory.
     *
     * \@example
     * // When the audio effect 1 is loaded
     * stream.unloadEffect(1, err => {
     *   if (err) {
     *       console.error("Failed to unload effect, reason: ", err);
     *   } else {
     *       console.log("Effect is unloaded successfully");
     *   }
     * });
     *
     * @type {?}
     */
    Stream.prototype.unloadEffect;
    /**
     * Enables the audio track in the stream.
     *
     * \@remark
     * For local streams, it works only when the audio flag is `true` in the stream.
     * By default the audio track is enabled. If you call
     * [muteAudio](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#muteaudio),
     * call this method to enable audio.
     *
     * \@return void ([Docs unclear](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#unmuteaudio))
     * - `true`: Success.
     * - `false`: Failure. Possible reasons include no audio, stream not initialized, and audio track already enabled.
     * @type {?}
     */
    Stream.prototype.unmuteAudio;
    /**
     * Enables the video track in the stream.
     *
     * \@remark
     * For local streams, it works only when the video flag is true in the stream.
     *
     * By default the video track is enabled. If you call
     * [muteVideo](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#mutevideo),
     * call this method to enable video.
     *
     * \@return void ([Docs unclear](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#unmutevideo))
     * - `true`: Success.
     * - `false`: Failure. Possible reasons include no video, stream not initialized, and video track already enabled.
     * @type {?}
     */
    Stream.prototype.unmuteVideo;
    /**
     * Not mentioned in Agora.io official docs, may be inherited DOM function.
     * @type {?}
     */
    Stream.prototype.addEventListener;
    /**
     * Calculates whether the stream's audio is currently active.
     *
     * \@remark Refers to a snapshot of the stream's audio status and will return:
     * - `true`: if the connected user's audio is not muted.
     * - `false`: if the connected user's audio is muted.
     * @type {?}
     */
    Stream.prototype.isAudioOn;
    /**
     * Calculates whether the stream's video is currently active.
     *
     * \@remark Refers to a snapshot of the stream's video status and will return:
     * - `true`: if the connected user's video is not muted.
     * - `false`: if the connected user's video is muted.
     * @type {?}
     */
    Stream.prototype.isVideoOn;
    /**
     * Whether the stream currently has its audio enabled.
     *
     * @version 2.5.2 and below only
     * @type {?|undefined}
     */
    Stream.prototype.audioEnabled;
    /**
     * Whether the stream currently has its video enabled.
     *
     * @version 2.5.2 and below only
     * @type {?|undefined}
     */
    Stream.prototype.videoEnabled;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/subscribe-options.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * Whether to receive the video or audio data independently by the video and audio parameters.
 *
 * \@remark
 * `video` and `audio` cannot be set as `false` at the same time.
 * If you need to stop subscribing to the stream, call
 * [Client.unsubscribe](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#unsubscribe) instead.
 * Safari does not support independent subscription. Set options as null for Safari, otherwise the
 * `SAFARI_NOT_SUPPORTED_FOR_TRACK_SUBSCRIPTION` error occurs.
 * @record
 */
function SubscribeOptions() { }
if (false) {
    /**
     * Whether to receive the audio data.
     * - true: (Default) Receives the audio data.
     * - false: Not receives the audio data.
     * @type {?|undefined}
     */
    SubscribeOptions.prototype.audio;
    /**
     * Whether to receive the video data.
     * - true: (Default) Receives the video data.
     * - false: Not receives the video data.
     * @type {?|undefined}
     */
    SubscribeOptions.prototype.video;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/system-stats.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * System statistics.
 * @record
 */
function SystemStats() { }
if (false) {
    /**
     * Battery level of the system (%).
     * @type {?}
     */
    SystemStats.prototype.BatteryLevel;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/transcoding-user.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * @record
 */
function TranscodingUser() { }
if (false) {
    /**
     * Transparency of the video frame.
     *
     * The value ranges between 0.0 and 1.0:
     * - 0.0: Completely transparent.
     * - 1.0: (Default) Opaque.
     * @type {?|undefined}
     */
    TranscodingUser.prototype.alpha;
    /**
     * Height of the video.
     *
     * Integer only. The value range is `[0,10000]`, and the default value is `640`.
     * @type {?|undefined}
     */
    TranscodingUser.prototype.height;
    /**
     * User ID of the CDN live host.
     * @type {?|undefined}
     */
    TranscodingUser.prototype.uid;
    /**
     * Width of the video.
     *
     * Integer only. The value range is `[0,10000]`, and the default value is `360`.
     * @type {?|undefined}
     */
    TranscodingUser.prototype.width;
    /**
     * The position of the upper left end of the video on the horizontal axis.
     *
     * Integer only. The value range is `[0,10000]`, and the default value is `0`.
     * @type {?|undefined}
     */
    TranscodingUser.prototype.x;
    /**
     * The position of the upper left end of the video on the vertical axis.
     *
     * Integer only. The value range is `[0,10000]`, and the default value is `0`.
     * @type {?|undefined}
     */
    TranscodingUser.prototype.y;
    /**
     * Layer position of the video frame.
     *
     * Integer only. The value range is `[0,100]`.
     *
     * From v2.3.0, Agora SDK supports setting zOrder as 0.
     * - 0: (Default) Lowest.
     * - 100: Highest.
     * @type {?|undefined}
     */
    TranscodingUser.prototype.zOrder;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/transport-stats.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * Statistics of the network connection.
 * @record
 */
function TransportStats() { }
if (false) {
    /**
     * The network type.
     * \@remark
     * Chrome 61+ is required for this function, and the compatibility is not guaranteed.
     * @see [Network Information API](https://developer.mozilla.org/en-US/docs/Web/API/Network_Information_API) for details.
     * @type {?}
     */
    TransportStats.prototype.NetworkType;
    /**
     * The estimated available bandwidth for sending the stream, in Kbps.
     * @type {?}
     */
    TransportStats.prototype.OutgoingAvailableBandwidth;
    /**
     * RTT (Round-Trip Time) between the SDK and the access node of the SD-RTN, in ms.
     * @type {?}
     */
    TransportStats.prototype.RTT;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/turn-server.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * TURN server settings.
 *
 * Enterprise users with a company firewall can use this property to pass audio and video data to the Agora SD-RTN through the TURN Server.
 * @record
 */
function TurnServer() { }
if (false) {
    /**
     * Sets whether to force data transfer by TURN Server:
     * - true: Force data transfer.
     * - false: (default) Not to force data transfer.
     * @type {?|undefined}
     */
    TurnServer.prototype.forceTurn;
    /**
     * Your TURN Server password. ASCII characters only, and the string length must be greater than 0 and less than 256 bytes.
     * @type {?}
     */
    TurnServer.prototype.password;
    /**
     * The TCP port(s) you want add to TURN Server.
     * Numeric characters only, and the string length must be greater than 0 and less than 256 bytes.
     * @type {?|undefined}
     */
    TurnServer.prototype.tcpport;
    /**
     * Your TURN Server URL address. ASCII characters only, and the string length must be greater than 0 and less than 256 bytes.
     * @type {?}
     */
    TurnServer.prototype.turnServerURL;
    /**
     * The UDP port(s) you want to add to TURN Server.
     * Numeric characters only, and the string length must be greater than 0 and less than 256 bytes.
     * @type {?}
     */
    TurnServer.prototype.udpport;
    /**
     * Your TURN Server username. ASCII characters only, and the string length must be greater than 0 and less than 256 bytes.
     * @type {?}
     */
    TurnServer.prototype.username;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/video-encoder-configuration.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * The video encoder configuration.
 *
 * This interface sets the video encoder configuration in
 * [setVideoEncoderConfiguration](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.stream.html#setvideoencoderconfiguration).
 *
 * Depending on the OS, browser, and camera, the actual resolution, frame rate, and bitrate might be different from the set values.
 *
 * \@remark
 * - Whether 1080 resolution or above can be supported depends on the device.
 *   If the device cannot support 1080p, the actual frame rate is lower than the one listed in the table.
 *   Agora optimizes the video on low-end devices.
 * - With the update of web browsers, this table might not reflect all the supported profiles for each browser.
 *   The actual support is subject to the device and web browser version.
 * - Some versions of some web browsers might not support all the video profiles listed in the table.
 *   In this case, we recommend you use the mainstream video profiles (the ones with the _1 suffix in the above table).
 * - The Safari browser does not support modifying the video frame rate (30 fps by default).
 *   If you set a frame rate other than 30 fps on Safari, the browser may change or reject your setting.
 * - Due to limitations of some devices and browsers, the resolution you set may fail to take effect and get adjusted by
 *   the browser. In this case, billings are calculated based on the actual resolution.
 *
 * @see [Video Profile Definition](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.videoencoderconfiguration.html)
 * @record
 */
function VideoEncoderConfiguration() { }
if (false) {
    /**
     * The video bitrate (Kbps). The value range is [1,10000000].
     *
     * We recommend setting the bitrate between 100 Kbps and 5000 Kbps. You can refer to the table below and set your bitrate.
     * @type {?|undefined}
     */
    VideoEncoderConfiguration.prototype.bitrate;
    /**
     * The video frame rate (fps).
     *
     * The value range is [1, 10000]. We recommend setting the frame rate between 5 fps and 30 fps.
     *
     * \@remark
     * - This parameter sets the local capturing video frame rate. The actual encoding frame rate depends on the device, system, and browser.
     * - When the network conditions change, the browser adjusts the encoding frame rate automatically.
     * @type {?|undefined}
     */
    VideoEncoderConfiguration.prototype.frameRate;
    /**
     * Resolution of the video.
     *
     * We recommend using common resolutions, for example:
     * - 480 x 360
     * - 640 x 480
     * - 960 x 720
     * @type {?|undefined}
     */
    VideoEncoderConfiguration.prototype.resolution;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/video-play-options.model.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/**
 * Options for playing an Agora.io media stream.
 * @record
 */
function VideoPlayOptions() { }
if (false) {
    /**
     * Video display mode:
     * - `'cover'`: Uniformly scale the video until it fills the visible boundaries (cropped).
     *   One dimension of the video may have clipped contents. Refer to the cover option of object-fit in CSS.
     * - `'contain'`: Uniformly scale the video until one of its dimension fits the boundary (zoomed to fit).
     *   Areas that are not filled due to the disparity in the aspect ratio will be filled with black.
     *   Refer to the contain option of object-fit in CSS.
     *
     * For local streams, by default the cover mode is used for video playing and the contain mode is used for screen sharing;
     * for remote streams, by default the cover mode is used.
     * @type {?|undefined}
     */
    VideoPlayOptions.prototype.fit;
    /**
     * Sets whether to mute the playing stream.
     *
     * The `muted` flag can be used as a workaround for the browser's autoplay policy.
     *
     * On Chrome 70+ and Safari, a video stream with sound does not play until triggered by a user gesture.
     * If you want to play the video anyway without a user gesture, you can set the muted flag to true, so that the video is
     * automatically played without sound.
     *
     * @see [Autoplay Policy Changes](https://developers.google.com/web/updates/2017/09/autoplay-policy-changes) for more information.
     * @type {?|undefined}
     */
    VideoPlayOptions.prototype.muted;
}

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/models/index.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/enums/channel-media-message.enum.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/** @enum {number} */
var ChannelMediaMessage = {
    /** No error. */
    'RELAY_OK': 0,
    /** An error occurs in the server response. */
    'SERVER_ERROR_RESPONSE': 1,
    /** No server response. */
    'SERVER_NO_RESPONSE': 2,
    /** The SDK fails to access the service, probably due to limited resources of the server. */
    'NO_RESOURCE_AVAILABLE': 3,
    /** Fails to send the relay request. */
    'FAILED_JOIN_SRC': 4,
    /** Fails to accept the relay request. */
    'FAILED_JOIN_DEST': 5,
    /** The server fails to receive the media stream. */
    'FAILED_PACKET_RECEIVED_FROM_SRC': 6,
    /** The server fails to send the media stream. */
    'FAILED_PACKET_SENT_TO_DEST': 7,
    /**
     * The SDK disconnects from the server and fails to reconnect to the server due to a poor network connection.
     * In this case, the SDK resets the media stream relay state.
     * You can try
     * [startChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
     * to restart the media stream relay.
     */
    'SERVER_CONNECTION_LOST': 8,
    /** An internal error occurs in the server. */
    'INTERNAL_ERROR': 9,
    /** The token of the source channel has expired. */
    'SRC_TOKEN_EXPIRED': 10,
    /** The token of the destination channel has expired. */
    'DEST_TOKEN_EXPIRED': 11,
    /**
     * The relay has already started. Possibly caused by calling
     * [startChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
     * repeatedly, or calling
     * [startChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
     * before
     * [stopChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#stopchannelmediarelay)
     * succeeds.
     */
    'RELAY_ALREADY_START': 12,
    /**
     * The relay has not started. Possibly caused by calling
     * [updateChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#updatechannelmediarelay)
     * before
     * [startChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
     * succeeds.
     */
    'RELAY_NOT_START': 13,
};
ChannelMediaMessage[ChannelMediaMessage[
/** No error. */
'RELAY_OK']] = 
/** No error. */
'RELAY_OK';
ChannelMediaMessage[ChannelMediaMessage[
/** An error occurs in the server response. */
'SERVER_ERROR_RESPONSE']] = 
/** An error occurs in the server response. */
'SERVER_ERROR_RESPONSE';
ChannelMediaMessage[ChannelMediaMessage[
/** No server response. */
'SERVER_NO_RESPONSE']] = 
/** No server response. */
'SERVER_NO_RESPONSE';
ChannelMediaMessage[ChannelMediaMessage[
/** The SDK fails to access the service, probably due to limited resources of the server. */
'NO_RESOURCE_AVAILABLE']] = 
/** The SDK fails to access the service, probably due to limited resources of the server. */
'NO_RESOURCE_AVAILABLE';
ChannelMediaMessage[ChannelMediaMessage[
/** Fails to send the relay request. */
'FAILED_JOIN_SRC']] = 
/** Fails to send the relay request. */
'FAILED_JOIN_SRC';
ChannelMediaMessage[ChannelMediaMessage[
/** Fails to accept the relay request. */
'FAILED_JOIN_DEST']] = 
/** Fails to accept the relay request. */
'FAILED_JOIN_DEST';
ChannelMediaMessage[ChannelMediaMessage[
/** The server fails to receive the media stream. */
'FAILED_PACKET_RECEIVED_FROM_SRC']] = 
/** The server fails to receive the media stream. */
'FAILED_PACKET_RECEIVED_FROM_SRC';
ChannelMediaMessage[ChannelMediaMessage[
/** The server fails to send the media stream. */
'FAILED_PACKET_SENT_TO_DEST']] = 
/** The server fails to send the media stream. */
'FAILED_PACKET_SENT_TO_DEST';
ChannelMediaMessage[ChannelMediaMessage[
/**
 * The SDK disconnects from the server and fails to reconnect to the server due to a poor network connection.
 * In this case, the SDK resets the media stream relay state.
 * You can try
 * [startChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
 * to restart the media stream relay.
 */
'SERVER_CONNECTION_LOST']] = 
/**
 * The SDK disconnects from the server and fails to reconnect to the server due to a poor network connection.
 * In this case, the SDK resets the media stream relay state.
 * You can try
 * [startChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
 * to restart the media stream relay.
 */
'SERVER_CONNECTION_LOST';
ChannelMediaMessage[ChannelMediaMessage[
/** An internal error occurs in the server. */
'INTERNAL_ERROR']] = 
/** An internal error occurs in the server. */
'INTERNAL_ERROR';
ChannelMediaMessage[ChannelMediaMessage[
/** The token of the source channel has expired. */
'SRC_TOKEN_EXPIRED']] = 
/** The token of the source channel has expired. */
'SRC_TOKEN_EXPIRED';
ChannelMediaMessage[ChannelMediaMessage[
/** The token of the destination channel has expired. */
'DEST_TOKEN_EXPIRED']] = 
/** The token of the destination channel has expired. */
'DEST_TOKEN_EXPIRED';
ChannelMediaMessage[ChannelMediaMessage[
/**
 * The relay has already started. Possibly caused by calling
 * [startChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
 * repeatedly, or calling
 * [startChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
 * before
 * [stopChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#stopchannelmediarelay)
 * succeeds.
 */
'RELAY_ALREADY_START']] = 
/**
 * The relay has already started. Possibly caused by calling
 * [startChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
 * repeatedly, or calling
 * [startChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
 * before
 * [stopChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#stopchannelmediarelay)
 * succeeds.
 */
'RELAY_ALREADY_START';
ChannelMediaMessage[ChannelMediaMessage[
/**
 * The relay has not started. Possibly caused by calling
 * [updateChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#updatechannelmediarelay)
 * before
 * [startChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
 * succeeds.
 */
'RELAY_NOT_START']] = 
/**
 * The relay has not started. Possibly caused by calling
 * [updateChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#updatechannelmediarelay)
 * before
 * [startChannelMediaRelay](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
 * succeeds.
 */
'RELAY_NOT_START';

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/enums/client-event.enum.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/** @enum {string} */
var ClientEvent = {
    /**
     * Occurs when the first remote audio frame is decoded.
     * The SDK triggers this callback when the local client successfully subscribes to a remote stream and decodes the first audio frame.
     *
     * @example
     * client.on('first-audio-frame-decode', function (evt) {
     *  console.log('first-audio-frame-decode');
     *  console.log(evt.stream);
     * })
     */
    FirstAudioFrameDecoded: "first-audio-frame-decode",
    /**
     * Occurs when the first remote video frame is decoded.
     * The SDK triggers this callback when the local client successfully subscribes to a remote stream and decodes the first video frame.
     *
     * @example
     * client.on('first-video-frame-decode', function (evt) {
     *  console.log('first-video-frame-decode');
     *  console.log(evt.stream);
     * })
     */
    FirstVideoFrameDecoded: "first-video-frame-decode",
    /**
     * Occurs when the local stream is published.
     *
     * @example
     * client.on("stream-published", function(evt) {
     *  console.log("local stream published");
     *  //……
     * })
     */
    LocalStreamPublished: "stream-published",
    /**
     * Occurs when the remote stream is added.
     *
     * @remark
     * When the local user joins the channel, if other users are already in the channel,
     * the SDK also reports to the app on the existing remote streams.
     *
     * @example
     * client.on("stream-added", function(evt) {
     *  var stream = evt.stream;
     *  console.log("new stream added ", stream.getId());
     *  // Subscribe the stream.
     *  //……
     * })
     */
    RemoteStreamAdded: "stream-added",
    /**
     * Occurs when the remote stream is removed; for example, a peer user calls
     * [Client.unpublish](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#unpublish).
     *
     * @example
     * client.on("stream-removed", function(evt) {
     *  var stream = evt.stream;
     *  console.log("remote stream was removed", stream.getId());
     *  //……
     * });
     */
    RemoteStreamRemoved: "stream-removed",
    /**
     * Occurs when a user subscribes to a remote stream.
     *
     * @example
     * client.on("stream-subscribed", function(evt) {
     *  var stream = evt.stream;
     *  console.log("new stream subscribed ", stream.getId());
     *  // Play the stream.
     *  //……
     * })
     */
    RemoteStreamSubscribed: "stream-subscribed",
    /**
     * Occurs when the peer user leaves the channel; for example, the peer user calls
     * [Client.leave](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#leave).
     */
    PeerLeave: "peer-leave",
    /**
     * Occurs when a remote user or host joins the channel.
     * - Communication channel (rtc mode): This callback notifies the app that another user joins the channel.
     *   If other users are already in the channel, the SDK also reports to the app on the existing users.
     * - Live-broadcast channel (live mode): This callback notifies the app that the host joins the channel.
     *   If other hosts are already in the channel, the SDK also reports to the app on the existing hosts.
     *   Agora recommends limiting the number of hosts to 17.
     */
    PeerOnline: "peer-online",
    /**
     * Occurs when the peer user mutes the audio.
     *
     * @example
     * client.on("mute-audio", function(evt) {
     *  var uid = evt.uid;
     *  console.log("mute audio:" + uid);
     *  //alert("mute audio:" + uid)
     * });
     */
    RemoteAudioMuted: "mute-audio",
    /**
     * Occurs when the peer user unmutes the audio.
     *
     * @example
     * client.on("unmute-audio", function (evt) {
     *  var uid = evt.uid;
     *  console.log("unmute audio:" + uid);
     * });
     */
    RemoteAudioUnmuted: "unmute-audio",
    /**
     * Occurs when the peer user turns off the video.
     *
     * @example
     * client.on("mute-video", function (evt) {
     *  var uid = evt.uid;
     *  console.log("mute video" + uid);
     *  //alert("mute video:" + uid);
     * })
     */
    RemoveVideoMuted: "mute-video",
    /**
     * Occurs when the peer user turns on the video.
     *
     * @example
     * client.on("unmute-video", function (evt) {
     *  var uid = evt.uid;
     *  console.log("unmute video:" + uid);
     * })
     */
    RemoteVideoUnmuted: "unmute-video",
    /**
     * Occurs when encryption or decryption fails during publishing or subscribing to a stream.
     * The failure is usually due to a wrong encryption password
     * ([setEncryptionSecret](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#setencryptionsecret))
     * or an incorrect encryption
     * mode ([setEncryptionMode](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#setencryptionmode)).
     *
     * @since 3.0.0
     */
    CryptError: "crypt-error",
    /**
     * This callback notifies the peer user that he/she is banned from the channel. Only the banned users receive this callback.
     * Usually the reason is that the UID is banned (`K_UID_BANNED`(14)).
     *
     * @example
     * client.on("client-banned", function (evt) {
     *  var uid = evt.uid;
     *  var attr = evt.attr;
     *  console.log(" user banned:" + uid + ", bantype:" + attr);
     *  alert(" user banned:" + uid + ", bantype:" + attr);
     * });
     */
    LocalClientBanned: "client-banned",
    /** This callback notifies the application who is the active speaker in the channel. */
    ActiveSpeaker: "active-speaker",
    /**
     * This callback notifies the application of all the speaking remote users and their volumes.
     *
     * It is disabled by default. You can enable this event by calling enableAudioVolumeIndicator.
     * If enabled, it reports the volumes every two seconds regardless of whether there are users speaking.
     *
     * The volume is an integer ranging from 0 to 100. Usually a user with volume above five will be countedas a speaking user.
     */
    VolumeIndicator: "volume-indicator",
    /** Occurs when the live streaming starts. */
    LiveStreamingStarted: "liveStreamingStarted",
    /** Occurs when the live streaming fails. */
    LiveStreamingFailed: "liveStreamingFailed",
    /** Occurs when the live streaming stops. */
    LiveStreamingStopped: "liveStreamingStopped",
    /**
     * Occurs when the live transcoding setting is updated.
     *
     * The SDK triggers this callback when the live transcoding setting is updated by calling the
     * [setLiveTranscoding](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#setlivetranscoding) method.
     *
     * @remark
     * The first call of the
     * [setLiveTranscoding](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#setlivetranscoding)
     * method does not trigger this callback.
     */
    LiveTranscodingUpdated: "liveTranscodingUpdated",
    /** Occurs when the injected online media stream's status is updated. */
    StreamInjectedStatusUpdated: "streamInjectedStatus",
    /**
     * Occurs when the Token expires in 30 seconds.
     *
     * You should request a new Token from your server and call
     * [Client.renewToken](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#renewtoken).
     */
    TokenPrivelegeWillExpire: "onTokenPrivilegeWillExpire",
    /**
     * Occurs when the Token expires.
     *
     * You should request a new Token from your server and call
     * [Client.renewToken](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#renewtoken).
     */
    TokenPrivelegeExpired: "onTokenPrivilegeDidExpire",
    /**
     * Occurs when an error message is reported and requires error handling.
     * For details, @see [Error Codes and Warning Codes](https://docs.agora.io/en/Video/the_error_web).
     */
    Error: "error",
    /**
     * Occurs when the network type changes.
     *
     * @remark
     * Chrome 61+ is required for this function, and the compatibility is not guaranteed.
     *
     * @see [Network Information API](https://developer.mozilla.org/en-US/docs/Web/API/Network_Information_API) for details.
     */
    NetworkTypeChanged: "network-type-changed",
    /**
     * Occurs when an audio input device is added or removed.
     *
     * @example
     * client.on("recording-device-changed", function(evt) {
     *  console.log("Recording Device Changed", evt.state, evt.device);
     * });
     */
    RecordingDeviceChanged: "recording-device-changed",
    /**
     * Occurs when an audio output device is added or removed.
     * @remark
     * Only supports Chrome 49+.
     */
    AudioOutputDeviceChanged: "playout-device-changed",
    /** Occurs when a camera is added or removed. */
    CameraChanged: "camera-changed",
    /**
     * Occurs when the type of a video stream changes.
     * It happens when a high-video stream changes to a low-video stream, or vice versa.
     *
     * The stream type (streamType):
     * - 0: High-bitrate, high-resolution video stream.
     * - 1: Low-bitrate, low-resolution video stream.
     */
    StreamTypeChanged: "stream-type-changed",
    /**
     * Occurs when the network connection state changes.
     *
     * The connection between the SDK and Agora's edge server has the following states:
     *
     * - DISCONNECTED: The SDK is disconnected from Agora's edge server.
     *   This is the initial state before Client.join.
     *   The SDK also enters this state after the app calls Client.leave.
     * - CONNECTING: The SDK is connecting to Agora's edge server. The SDK enters this state when calling Client.join or
     *   reconnecting to Agora's edge server automatically after the connection is lost.
     * - CONNECTED: The SDK is connected to Agora's edge server and joins a channel. You can now publish or subscribe to a stream
     *   in the channel. If the connection is lost because, for example, the network is down or switched, the SDK triggers this callback
     *   and notifies the app that the state changes from CONNECTED to CONNECTING.
     * - DISCONNECTING: The SDK is disconnecting from Agora's edge server. The SDK enters this state when calling Client.leave.
     */
    ConnectionStateChanged: "connection-state-change",
    /** Occurs when the SDK starts republishing or re-subscribing to a stream. */
    StreamReconnectionStart: "stream-reconnect-start",
    /** Occurs when the SDK finishes republishing or re-subscribing to a stream. */
    StreamReconnectionEnd: "stream-reconnect-end",
    /** Occurs when the user role switches in a live broadcast. For example, from a host to an audience or vice versa. */
    ClientRoleChanged: "client-role-changed",
    /**
     * Reports the network quality of the local user once every two seconds.
     *
     * This callback reports on the uplink and downlink network conditions of the local user.
     *
     * @remark
     * This is an experimental feature and the network quality rating is for reference only.
     */
    NetworkQualityReported: "network-quality",
    /**
     * Occurs when the remote video stream falls back to an audio-only stream due to unreliable network
     * conditions or switches back to the video after the network conditions improve.
     *
     * If you set `fallbackType` as 2 in
     * [setStreamFallbackOption](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#setstreamfallbackoption),
     * the SDK triggers this callback when the remote media stream falls back to audio only due to unreliable network conditions
     * or switches back to the video after the network condition improves.
     *
     * @remark
     * Once the remote media stream is switched to the low stream due to unreliable network conditions, you can monitor
     * the stream switch between a high stream and low stream in the stream-type-changed callback.
     */
    StreamFallback: "stream-fallback",
    /**
     * Occurs when a remote stream adds or removes a track.
     *
     * When a remote stream calls the [addTrack](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.stream.html#addtrack)
     * or [removeTrack](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.stream.html#removetrack)
     * method, the SDK triggers this callback.
     */
    StreamUpdated: "stream-updated",
    /**
     * Reports exception events in the channel.
     * Exceptions are not errors, but usually mean quality issues.
     * This callback also reports recovery from an exception.
     * Each exception event has a corresponding recovery event
     * @see https://web-cdn.agora.io/docs-files/1547180053430 for details
     */
    Exception: "exception",
    /**
     * Occurs when a remote user of the Native SDK calls `enableLocalVideo(true)` to enable video capture.
     *
     * @since 3.0.0
     */
    RemoteVideoCaptureEnabled: "enable-local-video",
    /**
     * Occurs when a remote user of the Native SDK calls `enableLocalVideo(false)` to disable video capture.
     *
     * @since 3.0.0
     */
    RemoteVideoCaptureDisabled: "disable-local-video",
    /**
     * Reports events during the media stream relay.
     *
     * Parameters
     * - evt: `object`
     *  - code: `number`
     *  The event code for media stream relay.
     *    - 0: The user disconnects from the server due to a poor network connection.
     *    - 1: The user is connected to the server.
     *    - 2: The user joins the source channel.
     *    - 3: The user joins the destination channel.
     *    - 4: The SDK starts relaying the media stream to the destination channel.
     *    - 5: The server receives the video stream from the source channel.
     *    - 6: The server receives the audio stream from the source channel.
     *    - 7: The destination channel is updated.
     */
    MediaStreamEventRelayed: "channel-media-relay-event",
    /**
     * Occurs when the state of the media stream relay changes.
     *
     * @since 3.0.0
     * @description
     * The SDK reports the state and error code of the current media relay in this callback.
     *
     * Parameters
     * - evt: `object`
     *  - code: `number`
     *  The error code.
     *    - 0: No error.
     *    - 1: An error occurs in the server response.
     *    - 2: No server response.
     *    - 3: The SDK fails to access the service, probably due to limited resources of the server.
     *    - 4: Fails to send the relay request.
     *    - 5: Fails to accept the relay request.
     *    - 6: The server fails to receive the media stream.
     *    - 7: The server fails to send the media stream.
     *    - 8: The SDK disconnects from the server and fails to reconnect to the server due to a poor network connection.
     *         In this case, the SDK resets the relay state. You can try
     *  [startChannelMediaRelay](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
     *         to restart the media stream relay.
     *    - 9: An internal error occurs in the server.
     *    - 10: The token of the source channel has expired.
     *    - 11: The token of the destination channel has expired.
     *    - 12: The relay has already started. Possibly caused by calling
     *  [startChannelMediaRelay](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
     *          repeatedly, or calling
     *  [startChannelMediaRelay](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
     *          before
     *  [stopChannelMediaRelay](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#stopchannelmediarelay)
     *          succeeds.
     *    - 13: The relay has not started. Possibly caused by calling
     *  [updateChannelMediaRelay](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#updatechannelmediarelay)
     *          before
     *  [startChannelMediaRelay](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
     *          succeeds.
     *
     *  - state: `number`
     *    The state code.
     *    - 0: The SDK is initializing.
     *    - 1: The SDK tries to relay the media stream to the destination channel.
     *    - 2: The SDK successfully relays the media stream to the destination channel.
     *    - 3: An error occurs. See `code` for the error code. In case of an error, the SDK resets the media stream relay state,
     *         and you need to call
     * [startChannelMediaRelay](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
     *         to restart the relay.
     */
    MediaStreamRelayStateChanged: "channel-media-relay-state",
};

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/enums/codec-type.enum.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/** @enum {string} */
var CodecType = {
    Opus: "1",
    AAC: "2",
};

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/enums/log-level.enum.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/** @enum {number} */
var LogLevel = {
    /** Outputs all logs. */
    Debug: 0,
    /** Outputs logs of the INFO, WARNING and ERROR levels. */
    Info: 1,
    /** Outputs logs of the WARNING and ERROR levels. */
    Warning: 2,
    /** Outputs logs of the ERROR level. */
    Error: 3,
    /** Outputs no logs. */
    None: 4,
};
LogLevel[LogLevel.Debug] = 'Debug';
LogLevel[LogLevel.Info] = 'Info';
LogLevel[LogLevel.Warning] = 'Warning';
LogLevel[LogLevel.Error] = 'Error';
LogLevel[LogLevel.None] = 'None';

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/enums/mute-state.enum.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/** @enum {string} */
var MuteState = {
    Unmuted: "0",
    Muted: "1",
};

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/enums/stream-event.enum.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
/** @enum {string} */
var StreamEvent = {
    /** Occurs when the user gives access to the camera and microphone. */
    MediaAccessAllowed: "accessAllowed",
    /** Occurs when the user denies access to the camera and microphone. */
    MediaAccessDenied: "accessDenied",
    /** Occurs when screen-sharing stops. */
    ScreenSharingStopped: "stopScreenSharing",
    /**
     * Occurs when the video track no longer provides data to the stream.
     *
     * Possible reasons include device removal and deauthorization.
     *
     * @see [Media​Stream​Track​.onended](https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack/onended).
     */
    VideoTrackEnded: "videoTrackEnded",
    /**
     * Occurs when the audio track no longer provides data to the stream.
     *
     * Possible reasons include device removal and deauthorization.
     *
     * @see [Media​Stream​Track​.onended](https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack/onended).
     */
    AudioTrackEnded: "audioTrackEnded",
    /**
     * Occurs when the audio mixing stream playback starts/resumes.
     *
     * @remark
     * This callback is triggered when the audio mixing stream is loaded and starts playing,
     * or when the paused audio mixing stream resumes playing.
     */
    AudioMixingPlayed: "audioMixingPlayed",
    /** Occurs when the last audio mixing stream playback finishes. */
    AudioMixingFinished: "audioMixingFinished",
    /**
     * Occurs when the stream playback status changes.
     *
     * On Windows, frequent DOM manipulations might cause the browser to pause the Chrome player.
     * To avoid this, you can listen for this event and call the
     * [Stream.resume](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.stream.html#resume)
     * method to resume the playback.
     *
     * This callback has the following properties.
     *
     * - isErrorState: Whether or not the playback fails.
     *  - true: The playback fails.
     *  - false: The playback is normal.
     *
     * - mediaType: The player type.
     *  - "audio": Audio player.
     *  - "video": Video player.
     *
     * - status: The playback status.
     *  - "play": Playing.
     *  - "aborted": The player is removed before the stream is played successfully.
     *  - "paused": The player is stopped.
     *
     * - reason: The reason why the playback status changes. Usually, this value is the event that triggers the status change.
     *   Possible values include the following:
     *  - "playing": The playback starts.
     *    See [HTMLMedia​Element: playing event](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/playing_event).
     *  - "stalled": The failure might be caused by the browser policy.
     *    See [stalled event](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/stalled_event).
     *  - "pause": The stream playback might be paused by the user.
     *    See [pause event](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/pause_event).
     *  - "suspend": The failure might be caused by the browser policy.
     *    See [suspend event](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/suspend_event).
     *  - "canplay": Some browsers automatically stop the playback when the playback window is not displayed on the screen.
     *    See [canplay event](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/canplay_event).
     *  - "timer": The playback failure is caused by an unknown reason and captured by the internal timer.
     *
     * @example
     * stream.on("player-status-change", function(evt) {
     *   if (evt.isErrorState && evt.status === "paused") {
     *       console.error(`Stream is paused unexpectedly. Trying to resume...`);
     *       stream.resume().then(function() {
     *           console.log(`Stream is resumed successfully`);
     *       }).catch(function(e) {
     *           console.error(`Failed to resume stream. Error ${e.name} Reason ${e.message}`);
     *       });
     *   }
     * });
     */
    StreamPlaybackStatusChanged: "player-status-change",
};

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/enums/index.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/types/audio-profile.type.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/types/connection-state.type.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/types/screen-profile.type.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/types/sound-id.type.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/types/video-profile.type.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/types/volume.type.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */

/**
 * @fileoverview added by tsickle
 * Generated from: lib/data/types/index.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */

/**
 * @fileoverview added by tsickle
 * Generated from: public-api.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */

/**
 * @fileoverview added by tsickle
 * Generated from: ngx-agora.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */

export { ChannelMediaMessage, ClientEvent, CodecType, LogLevel, MuteState, NgxAgoraModule, NgxAgoraService, StreamEvent, NgxAgoraComponent as ɵb };
//# sourceMappingURL=ngx-agora.js.map