import { Event } from '@skyway-sdk/common';
import { AudioMediaTrackConstraints, DisplayMediaTrackConstraints, VideoMediaTrackConstraints } from '../../factory';
import { ContentType } from '../base';
import { LocalStreamBase } from './base';
export declare abstract class LocalMediaStreamBase extends LocalStreamBase {
    /**@description [japanese] PublicationのDisable/EnableなどでStreamのtrackが更新された時に発火するイベント */
    onTrackUpdated: Event<MediaStreamTrack>;
    /**
     * @description [japanese] streamが破棄された時に発火するイベント (例. 画面共有が終了したときなど)
     * @example [japanese] ハンドリング例
     *  const publication = await member.publish(audio);
        audio.onDestroyed.once(async () => {
          await member.unpublish(publication);
        });
     * */
    onDestroyed: Event<void>;
    private _element?;
    private _track;
    private _disposer;
    /**@internal */
    protected _oldTrack?: MediaStreamTrack;
    private _trackConstraints;
    /**@internal */
    protected get trackConstraints(): MediaTrackConstraints;
    /**@internal */
    _replacingTrack: boolean;
    /**@internal */
    _onReplacingTrackDone: Event<void>;
    /**
     * @deprecated
     * @use {@link Publication.state}
     */
    abstract isEnabled: boolean;
    /**@internal */
    _onEnableChanged: Event<MediaStreamTrack | null>;
    /**@internal */
    protected _options: Partial<LocalMediaStreamOptions>;
    toJSON(): {
        trackConstraints: MediaTrackConstraints;
        isEnabled: boolean;
        _options: Partial<LocalMediaStreamOptions>;
        label: string;
        contentType: ContentType;
        id: string;
        side: string;
    };
    constructor(track: MediaStreamTrack, contentType: ContentType, 
    /**@internal */
    options?: (VideoMediaTrackConstraints | DisplayMediaTrackConstraints | AudioMediaTrackConstraints) & Partial<LocalMediaStreamOptions>);
    /**@internal */
    abstract setEnabled(b: boolean): Promise<void>;
    get track(): MediaStreamTrack;
    /**
     * @description [english] Attach the stream to the element.
     * @description [japanese] streamをelementに適用する.
     */
    attach(element: HTMLVideoElement | HTMLAudioElement): void;
    /**
     * @description [english] Detach the stream from the element.
     * @description [japanese] elementからstreamを取り除く.
     */
    detach(): void;
    /**@internal */
    protected _disable(kind: 'video' | 'audio'): void;
    /**@internal */
    protected _updateTrack(track: MediaStreamTrack): void;
    private _listenTrackEvent;
    /**
     * @description [japanese] Streamを解放します。
     * カメラやマイクなどのデバイスを解放するためにはそのデバイスに関連するすべてのStreamを解放する必要があります
     */
    release(): void;
}
export declare type LocalMediaStreamOptions = {
    /**
     * @description [japanese]
     * このStreamのPublicationがDisableされた時にStreamのTrackをStopします。
     * Publicationが再度Enableされた時にデバイスを再取得します。
     * (trackプロパティの中身が更新されonTrackUpdatedイベントが発火します)
     * SkyWayStreamFactory経由でLocalMediaを作成する場合はデフォルトで有効。
     * mediaDevice以外から作ったStream（例えばCanvasをキャプチャするなど）であれば必ずFalseを入れてください。
     *  */
    stopTrackWhenDisabled: boolean;
    /**
     * @description [japanese]
     * このStreamがDisplayの映像や音声をキャプチャしたものであれば必ずTrueを入れてください。
     * デフォルトで無効。
     *  */
    isDisplayMedia: boolean;
};
/**@internal */
export declare const emptyAudioTrack: MediaStreamTrack;
/**@internal */
export declare const emptyVideoTrack: MediaStreamTrack;
//# sourceMappingURL=media.d.ts.map