@skyway-sdk/core
Version:
The official Next Generation JavaScript SDK for SkyWay
212 lines • 9.06 kB
TypeScript
import { Event } from '@skyway-sdk/common';
import type { Encoding } from '@skyway-sdk/model';
import type { SkyWayChannelImpl } from '../channel';
import type { StreamSubscribedEvent, StreamUnsubscribedEvent } from '../channel/event';
import type { AnalyticsSession } from '../external/analytics';
import type { Codec, EncodingParameters } from '../media';
import type { ContentType, WebRTCStats } from '../media/stream';
import type { LocalMediaStreamBase, LocalStream } from '../media/stream/local';
import type { LocalAudioStream } from '../media/stream/local/audio';
import type { LocalCustomVideoStream } from '../media/stream/local/customVideo';
import type { LocalVideoStream } from '../media/stream/local/video';
import type { Member } from '../member';
import type { RemoteMember, RemoteMemberImplInterface } from '../member/remoteMember';
import type { TransportConnectionState } from '../plugin/interface';
import type { Subscription } from '../subscription';
export * from './factory';
export interface Publication<T extends LocalStream = LocalStream> {
readonly id: string;
readonly contentType: ContentType;
metadata?: string;
readonly publisher: Member;
readonly subscriptions: Subscription[];
readonly origin?: Publication;
readonly codecCapabilities: Codec[];
readonly encodings: Encoding[];
readonly type: PublicationType;
/**
* @description [japanese] publishしたstreamの実体。
* ローカルで作られたPublicationでなければundefinedとなる
*/
stream?: T;
state: PublicationState;
/** @description [japanese] Subscribeされた時に発火するイベント */
onSubscribed: Event<StreamSubscribedEvent>;
/** @description [japanese] このPublicationをSubscribeしたSubscriptionがUnsubscribeされた時に発火するイベント */
onUnsubscribed: Event<StreamUnsubscribedEvent>;
/** @description [japanese] このPublicationをSubscribeしたSubscriptionの数が変化した時に発火するイベント */
onSubscriptionListChanged: Event<void>;
/** @description [japanese] Metadataが変更された時に発火するイベント */
onMetadataUpdated: Event<{
metadata: string;
}>;
/** @description [japanese] 有効化された時に発火するイベント */
onEnabled: Event<void>;
/** @description [japanese] 無効化された時に発火するイベント */
onDisabled: Event<void>;
/** @description [japanese] stateが変化した時に発火するイベント */
onStateChanged: Event<void>;
/**
* @description [japanese] メディア通信の状態が変化した時に発火するイベント
*/
onConnectionStateChanged: Event<{
remoteMember: RemoteMember;
state: TransportConnectionState;
}>;
/**
* @description [japanese] Metadataの更新
*/
updateMetadata: (metadata: string) => Promise<void>;
/**
* @description [japanese] Video|Audio Streamの場合、encoding設定を更新する
*/
updateEncodings: (encodings: EncodingParameters[]) => void;
/** @description [japanese] 有効化する */
/**@throws {SkyWayError} */
enable: () => Promise<void>;
/** @description [japanese] 無効化する */
disable: () => Promise<void>;
/**
* @description [japanese] Publicationのstreamを同じContentTypeの別のStreamに入れ替える。
* dataStreamを入れ替えることはできない。
* RemoteのPublication(streamがnull)では利用不可。
*/
replaceStream: (stream: LocalAudioStream | LocalVideoStream | LocalCustomVideoStream, options?: ReplaceStreamOptions) => void;
/**
* @experimental
* @description [japanese] 試験的なAPIです。今後インターフェースや仕様が変更される可能性があります
* @description [japanese] StreamをSubscribeしているMemberとの通信の統計情報を取得する
* @param selector [japanese] 接続相手
*/
getStats(selector: Member | string): Promise<WebRTCStats>;
/**
* @experimental
* @description [japanese] 試験的なAPIです。今後インターフェースや仕様が変更される可能性があります
* @description [japanese] 対象のMemberとのRTCPeerConnectionを取得する。RTCPeerConnectionを直接操作すると SDK は正しく動作しなくなる可能性があります。
* @param selector [japanese] 接続相手
*/
getRTCPeerConnection(selector: Member | string): RTCPeerConnection | undefined;
/**
* @description [japanese] メディア通信の状態を取得する
* @param selector [japanese] 接続相手
*/
getConnectionState(selector: Member | string): TransportConnectionState;
}
/**@internal */
export declare class PublicationImpl<T extends LocalStream = LocalStream> implements Publication {
readonly id: string;
readonly contentType: ContentType;
readonly publisher: RemoteMemberImplInterface;
private _codecCapabilities;
get codecCapabilities(): Codec[];
setCodecCapabilities(_codecCapabilities: Codec[]): void;
private _encodings;
get encodings(): Encoding[];
setEncodings(_encodings: Encoding[]): void;
private _stream?;
get stream(): T | undefined;
/**@internal */
_setStream(stream: LocalStream | undefined): void;
/**@private */
readonly _channel: SkyWayChannelImpl;
origin?: PublicationImpl;
private _metadata?;
get metadata(): string | undefined;
private _state;
get state(): PublicationState;
get deviceName(): string | undefined;
private readonly _events;
readonly onSubscribed: Event<StreamSubscribedEvent>;
readonly onUnsubscribed: Event<StreamUnsubscribedEvent>;
readonly onSubscriptionListChanged: Event<void>;
readonly onMetadataUpdated: Event<{
metadata: string;
}>;
readonly onEnabled: Event<void>;
readonly onDisabled: Event<void>;
readonly onStateChanged: Event<void>;
readonly onConnectionStateChanged: Event<{
remoteMember: RemoteMember;
state: TransportConnectionState;
}>;
/**@private */
readonly _onEncodingsChanged: Event<EncodingParameters[]>;
/**@private */
readonly _onReplaceStream: Event<{
newStream: LocalMediaStreamBase;
oldStream: LocalMediaStreamBase;
}>;
private readonly _onEnabled;
private streamEventDisposer;
/**@private */
readonly _analytics?: AnalyticsSession;
readonly type: PublicationType;
private _context;
constructor(args: {
channel: SkyWayChannelImpl;
id: string;
publisher: RemoteMemberImplInterface;
contentType: ContentType;
metadata?: string;
origin?: PublicationImpl;
codecCapabilities?: Codec[];
encodings?: EncodingParameters[];
stream?: T;
isEnabled: boolean;
type: PublicationType;
});
get subscriptions(): Subscription[];
/**@private */
_updateMetadata(metadata: string): void;
/**@private */
_disable(): Promise<void>;
/**@private */
_enable(): void;
/**@private */
_unpublished(): void;
/**@private */
_subscribed(subscription: Subscription): void;
/**@private */
_unsubscribed(subscription: Subscription): void;
updateMetadata: (metadata: string) => Promise<void>;
updateEncodings(encodings: EncodingParameters[]): void;
disable: () => Promise<void>;
private _disableStream;
enable: () => Promise<void>;
private _enableStream;
replaceStream(stream: LocalAudioStream | LocalVideoStream | LocalCustomVideoStream, options?: ReplaceStreamOptions): void;
getStats(selector: string | Member): Promise<WebRTCStats>;
getRTCPeerConnection(selector: string | Member): RTCPeerConnection | undefined;
getConnectionState(selector: string | Member): TransportConnectionState;
/**@private */
toJSON(): {
id: string;
channelId: string;
publisherId: string;
origin: string | undefined;
contentType: ContentType;
metadata: string | undefined;
codecCapabilities: Codec[];
encodings: Encoding[];
state: PublicationState;
stream: T | undefined;
type: PublicationType;
};
private _dispose;
}
/**
* @description [japanese] Publicationの状態
* - enabled : 配信中
* - disabled : 配信停止中
* - canceled : 配信終了
* */
export declare type PublicationState = 'enabled' | 'disabled' | 'canceled';
/**@internal */
export declare const normalizeEncodings: (encodings: EncodingParameters[]) => Encoding[];
export declare const sortEncodingParameters: (encodings: EncodingParameters[]) => EncodingParameters[];
export declare type ReplaceStreamOptions = {
/**@description [japanese] 入れ替え前のstreamを開放する。デフォルトで有効 */
releaseOldStream?: boolean;
};
export declare type PublicationType = 'p2p' | 'sfu';
//# sourceMappingURL=index.d.ts.map