@vkontakte/calls-sdk 2.4.4-beta.2 → 2.4.4-beta.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,6 +14,7 @@ import UserType from '../enums/UserType';
14
14
  import { JSONObject } from '../static/Json';
15
15
  import { ExternalId } from '../types/ExternalId';
16
16
  import MediaModifiers from '../types/MediaModifiers';
17
+ import { IVideoDimentions } from '../types/MediaSettings';
17
18
  import MuteStates from '../types/MuteStates';
18
19
  import { CompositeUserId, OkUserId } from '../types/Participant';
19
20
  import { ParticipantLayout } from '../types/ParticipantLayout';
@@ -194,7 +195,7 @@ export default class Conversation extends EventEmitter {
194
195
  private _isCallAdmin;
195
196
  private _checkAdminRole;
196
197
  grantRoles(participantId: CompositeUserId, roles: UserRole[], revoke: boolean): Promise<void>;
197
- muteParticipant(participantId: CompositeUserId | null, muteStates: MuteStates): Promise<void>;
198
+ muteParticipant(participantId: CompositeUserId | null, muteStates: MuteStates, requestedMedia?: MediaOption[]): Promise<void>;
198
199
  pinParticipant(participantId: CompositeUserId, unpin: boolean): Promise<void>;
199
200
  updateMediaModifiers(mediaModifiers: MediaModifiers): Promise<void>;
200
201
  changeOptions(changes: {
@@ -215,7 +216,7 @@ export default class Conversation extends EventEmitter {
215
216
  movieId: string;
216
217
  streamType: string;
217
218
  }>;
218
- updateMovie(movieId: string, gain?: number): Promise<void>;
219
+ updateMovie(movieId: string, gain?: number, offset?: string, pause?: boolean): Promise<void>;
219
220
  removeMovie(movieId: string): Promise<void>;
220
221
  startStream(isRecord?: boolean, name?: string | null, movieId?: string | null, privacy?: 'PUBLIC' | 'FRIENDS' | 'DIRECT_LINK', groupId?: string | null): Promise<SignalingMessage>;
221
222
  stopStream(): Promise<SignalingMessage>;
@@ -224,7 +225,9 @@ export default class Conversation extends EventEmitter {
224
225
  movieId: any;
225
226
  preview: any;
226
227
  }>;
227
- setLocalResolution(width: number, height: number): Promise<void>;
228
+ setLocalResolution(width: number, height: number, params?: {
229
+ effect: IVideoDimentions;
230
+ }): Promise<void>;
228
231
  videoEffect(effect: IEffect | null): Promise<void>;
229
232
  private _onLocalMediaStreamChanged;
230
233
  private _onScreenSharingStatus;
@@ -16,8 +16,12 @@ export declare const enum MediaTrackKind {
16
16
  'screen' = "screen"
17
17
  }
18
18
  export declare class MediaSource extends EventEmitter {
19
+ /** Стрим с камеры и микрофона пользователя */
19
20
  private _stream;
21
+ /** Последний сохраненный оригинальный видео трек с камеры */
22
+ private _trackVideoStreamBackup;
20
23
  private _screenTrack;
24
+ /** Трек для отправки в медиа-канал. Может отличаться при скриншаринге в дата-канал */
21
25
  private _sendVideoTrack;
22
26
  private _mediaSettings;
23
27
  private _videoStatusOnScreenCapturingEnabled;
@@ -39,6 +43,11 @@ export declare class MediaSource extends EventEmitter {
39
43
  setVideoStream(stream: MediaStream, isScreen: boolean): Promise<void>;
40
44
  private _initDeviceChangeListener;
41
45
  private _changeVideoInput;
46
+ /**
47
+ * хелпер для получения трека для передаче либе эффектов. нужен для сохранения оригинального трека с камеры.
48
+ * рассчитываем, что либы при очистке останавливают треки, поэтому передаем копию.
49
+ */
50
+ private _getVideoEffectTrack;
42
51
  /**
43
52
  * Установка кастомного стрима для аудио, например аудио-трек вместо звука с микрофона.
44
53
  * Может использоваться для тестирования.
@@ -50,6 +59,8 @@ export declare class MediaSource extends EventEmitter {
50
59
  private _replaceLocalTrack;
51
60
  private _stopLocalTrack;
52
61
  private _videoEffect;
62
+ /** останавливает и удаляет сохраненный трек с камеры пользователя */
63
+ private _stopAndRemoveTrackVideoStreamBackup;
53
64
  destroy(): void;
54
65
  toggleScreenCapturing(enabled: boolean): Promise<void>;
55
66
  toggleVideo(enabled: boolean): Promise<void>;
@@ -0,0 +1,25 @@
1
+ import { CompositeUserId } from '../../types/Participant';
2
+ import { FrameChunk } from './Utils';
3
+ export declare abstract class BaseStreamBuilder {
4
+ protected readonly _participantId: CompositeUserId;
5
+ protected readonly _onStream: (stream: MediaStream) => void;
6
+ protected _chunks: FrameChunk[];
7
+ protected constructor(participantId: CompositeUserId, onStream: (stream: MediaStream) => void);
8
+ appendChunk(chunk: FrameChunk): void;
9
+ destroy(): void;
10
+ protected abstract _processFrame(frame: FrameData): void;
11
+ private _processFrameData;
12
+ static getFrameSize(frameData: Uint8Array): {
13
+ width: number;
14
+ height: number;
15
+ };
16
+ static isBrowserSupported(): boolean;
17
+ }
18
+ export interface FrameData {
19
+ timestamp: number;
20
+ frameData: Uint8Array;
21
+ isVP9: boolean;
22
+ keyframe: boolean;
23
+ width: number;
24
+ height: number;
25
+ }
@@ -1,13 +1,10 @@
1
1
  import { CompositeUserId } from '../../types/Participant';
2
- import { FrameChunk } from './Utils';
3
- export default class StreamBuilder {
2
+ import { BaseStreamBuilder, FrameData } from './BaseStreamBuilder';
3
+ export default class StreamBuilder extends BaseStreamBuilder {
4
4
  private readonly _decoder;
5
5
  private _decoderReady;
6
6
  private _decoderQueue;
7
- private readonly _participantId;
8
- private _chunks;
9
7
  private readonly _useImageBitmap;
10
- private _onStream;
11
8
  private _canvas;
12
9
  private _canvasContext;
13
10
  private _stream;
@@ -15,11 +12,10 @@ export default class StreamBuilder {
15
12
  constructor(participantId: CompositeUserId, onStream: (stream: MediaStream) => void);
16
13
  private _createStream;
17
14
  private _removeStream;
18
- private _processFrameData;
19
15
  private _requestCanvasFrame;
20
16
  private _drawImage;
21
- private _decodeFrame;
17
+ protected _processFrame(frame: FrameData): void;
22
18
  private _decodeQueue;
23
- appendChunk(chunk: FrameChunk): void;
24
19
  destroy(): void;
20
+ static isBrowserSupported(): boolean;
25
21
  }
@@ -0,0 +1,19 @@
1
+ import { CompositeUserId } from '../../types/Participant';
2
+ import { BaseStreamBuilder, FrameData } from './BaseStreamBuilder';
3
+ export default class WebmBuilder extends BaseStreamBuilder {
4
+ private _mediaBuffer;
5
+ private _video;
6
+ private _stream;
7
+ private _earliestTimestamp;
8
+ private _clusterStartTime;
9
+ private _lastFrameTimestamp;
10
+ constructor(participantId: CompositeUserId, onStream: (stream: MediaStream) => void);
11
+ private static _intToU16BE;
12
+ private static _genWebmHeader;
13
+ private static _genSegmentHeader;
14
+ private static _genClusterHeader;
15
+ private _createVideo;
16
+ protected _processFrame(frame: FrameData): void;
17
+ destroy(): void;
18
+ static isBrowserSupported(): boolean;
19
+ }
package/default/Api.d.ts CHANGED
@@ -39,7 +39,7 @@ export default class Api extends BaseApi {
39
39
  getExternalIdsByOkIds(uids: OkUserId[]): Promise<ExternalId[]>;
40
40
  getCachedOkIdByExternalId(externalId: ExternalId): CompositeUserId | null;
41
41
  cacheExternalId(participantId: CompositeUserId, externalId: ExternalId): void;
42
- getConversationParams(): Promise<ConversationParams>;
42
+ getConversationParams(conversationId?: string): Promise<ConversationParams>;
43
43
  getUserId(): OkUserId | null;
44
44
  setUserId(userId: OkUserId): void;
45
45
  hangupConversation(conversationId: string): void;
@@ -3,6 +3,7 @@ import { ParticipantIdRegistry } from '../classes/ParticipantIdRegistry';
3
3
  import { PerfStatReport } from '../classes/transport/PerfStatReporter';
4
4
  import { TransportTopology } from '../classes/transport/Transport';
5
5
  import ConversationOption from '../enums/ConversationOption';
6
+ import MediaOption from '../enums/MediaOption';
6
7
  import RecordRole from '../enums/RecordRole';
7
8
  import SignalingCommandType from '../enums/SignalingCommandType';
8
9
  import SignalingConnectionType from '../enums/SignalingConnectionType';
@@ -104,7 +105,7 @@ export default class Signaling extends BaseSignaling {
104
105
  chatHistory(count: number): Promise<SignalingMessage>;
105
106
  customData(data: JSONObject, participantId: CompositeUserId | null): Promise<SignalingMessage>;
106
107
  grantRoles(participantId: CompositeUserId, roles: UserRole[], revoke: boolean): Promise<SignalingMessage>;
107
- muteParticipant(participantId: CompositeUserId | null, muteStates: MuteStates): Promise<SignalingMessage>;
108
+ muteParticipant(participantId: CompositeUserId | null, muteStates: MuteStates, requestedMedia: MediaOption[]): Promise<SignalingMessage>;
108
109
  pinParticipant(participantId: CompositeUserId, unpin: boolean): Promise<SignalingMessage>;
109
110
  updateMediaModifiers(mediaModifiers: MediaModifiers): Promise<SignalingMessage>;
110
111
  changeOptions(changes: {
@@ -10,6 +10,7 @@ declare enum HangupType {
10
10
  BUSY = "BUSY",
11
11
  FAILED = "FAILED",
12
12
  NETWORK_ERROR = "NETWORK_ERROR",
13
+ KILLED = "KILLED",
13
14
  CALLER_IS_BLOCKED = "CALLER_IS_BLOCKED",
14
15
  NOT_FRIENDS = "NOT_FRIENDS",
15
16
  CALLEE_IS_OFFLINE = "CALLEE_IS_OFFLINE",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vkontakte/calls-sdk",
3
- "version": "2.4.4-beta.2",
3
+ "version": "2.4.4-beta.20",
4
4
  "author": "vk.com",
5
5
  "description": "Library for video calls based on the vk.com platform",
6
6
  "homepage": "https://vk.com",
@@ -14,10 +14,12 @@
14
14
  "**/*.d.ts"
15
15
  ],
16
16
  "dependencies": {
17
- "@vkontakte/calls-video-effects": "^1.0.6-beta.14",
17
+ "@vkontakte/calls-video-effects": "^1.0.6-beta.18",
18
18
  "@vkontakte/libvpx": "2.0.9",
19
19
  "big-integer": "1.6.48",
20
+ "bit-buffer": "0.2.5",
20
21
  "messagepack": "1.1.12",
22
+ "simple-ebml-builder": "^0.2.2",
21
23
  "webrtc-adapter": "7.7.0"
22
24
  }
23
25
  }
@@ -166,8 +166,9 @@ declare namespace External {
166
166
  * @param muteAll Команда распространяется на всех участников звонка
167
167
  * @param unmute Разрешение включить устройство
168
168
  * @param userId Пользователь, для которого изменились разрешения или `null` для текущего пользователя
169
+ * @param adminId Пользователь, который изменил разрешения
169
170
  */
170
- function onMuteStates(muteStates: MuteStates, unmuteOptions: MediaOption[], mediaOptions: MediaOption[], muteAll?: boolean, unmute?: boolean, userId?: ExternalId | null): void;
171
+ function onMuteStates(muteStates: MuteStates, unmuteOptions: MediaOption[], mediaOptions: MediaOption[], muteAll?: boolean, unmute?: boolean, userId?: ExternalId | null, adminId?: ExternalId | null): void;
171
172
  /**
172
173
  * Изменились роли собеседника в звонке
173
174
  *
@@ -196,6 +196,7 @@ export declare type ParamsObject = {
196
196
  producerCommandDataChannel: boolean;
197
197
  consumerScreenDataChannel: boolean;
198
198
  producerScreenDataChannel: boolean;
199
+ screenShareWebmBuilder: boolean;
199
200
  noiseSuppression: boolean;
200
201
  /**
201
202
  * Количество входящих видео-треков.
@@ -296,7 +297,7 @@ export declare type ParamsObject = {
296
297
  /**
297
298
  * Изменились состояния устройств пользователя или разрешения включать камеру/микрофон
298
299
  */
299
- onMuteStates?: (muteStates: MuteStates, unmuteOptions: MediaOption[], mediaOptions: MediaOption[], muteAll: boolean, unmute: boolean, userId: ExternalId | null) => void;
300
+ onMuteStates?: (muteStates: MuteStates, unmuteOptions: MediaOption[], mediaOptions: MediaOption[], muteAll: boolean, unmute: boolean, userId: ExternalId | null, adminId: ExternalId | null) => void;
300
301
  /**
301
302
  * Изменились роли собеседника в звонке
302
303
  */
@@ -480,9 +481,8 @@ export default abstract class Params {
480
481
  static get producerNotificationDataChannel(): boolean;
481
482
  static get producerCommandDataChannel(): boolean;
482
483
  static get consumerScreenDataChannel(): boolean;
483
- static set consumerScreenDataChannel(value: boolean);
484
484
  static get producerScreenDataChannel(): boolean;
485
- static set producerScreenDataChannel(value: boolean);
485
+ static get screenShareWebmBuilder(): boolean;
486
486
  static get noiseSuppression(): boolean;
487
487
  static set noiseSuppression(value: boolean);
488
488
  static get preferH264(): boolean;
@@ -17,9 +17,13 @@ export declare type MediaSettings = {
17
17
  videoStreams: VideoStreamInfo[];
18
18
  };
19
19
  export declare type VideoStreamInfo = {
20
- name: string;
20
+ id: string;
21
21
  source: string;
22
22
  };
23
23
  export default MediaSettings;
24
24
  export declare function compareMediaSettings(ms1: MediaSettings, ms2: MediaSettings): boolean;
25
25
  export declare function createMediaSettingsWithDefaults(ms?: Partial<MediaSettings>): MediaSettings;
26
+ export interface IVideoDimentions {
27
+ width: number;
28
+ height: number;
29
+ }
@@ -120,9 +120,11 @@ declare namespace SignalingMessage {
120
120
  roles?: UserRole[];
121
121
  }
122
122
  export interface MuteParticipant extends Notification {
123
+ adminId?: CompositeUserId;
123
124
  participantId?: CompositeUserId;
124
- muteStates?: MuteStates;
125
+ muteStates: MuteStates;
125
126
  unmuteOptions?: MediaOption[];
127
+ mediaOptions: MediaOption[];
126
128
  unmute?: boolean;
127
129
  muteAll?: boolean;
128
130
  }
@@ -0,0 +1,4 @@
1
+ export declare const stopMediaStreamTrack: (track: MediaStreamTrack) => void;
2
+ export declare const stopMediaStreamTracks: (stream: MediaStream) => void;
3
+ export declare const stopMediaStreamVideoTracks: (stream: MediaStream) => void;
4
+ export declare const cloneVideoTrack: (stream: MediaStream) => MediaStreamTrack;