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

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';
@@ -85,7 +86,6 @@ export default class Conversation extends EventEmitter {
85
86
  private _activeSpeakerId;
86
87
  private _lastSignalledActiveSpeakerId;
87
88
  private _serverSettings;
88
- private _signalingServerSettings;
89
89
  private static _current;
90
90
  private static _activationMutex;
91
91
  private static _delayedHangup;
@@ -194,7 +194,7 @@ export default class Conversation extends EventEmitter {
194
194
  private _isCallAdmin;
195
195
  private _checkAdminRole;
196
196
  grantRoles(participantId: CompositeUserId, roles: UserRole[], revoke: boolean): Promise<void>;
197
- muteParticipant(participantId: CompositeUserId | null, muteStates: MuteStates): Promise<void>;
197
+ muteParticipant(participantId: CompositeUserId | null, muteStates: MuteStates, requestedMedia?: MediaOption[]): Promise<void>;
198
198
  pinParticipant(participantId: CompositeUserId, unpin: boolean): Promise<void>;
199
199
  updateMediaModifiers(mediaModifiers: MediaModifiers): Promise<void>;
200
200
  changeOptions(changes: {
@@ -215,7 +215,7 @@ export default class Conversation extends EventEmitter {
215
215
  movieId: string;
216
216
  streamType: string;
217
217
  }>;
218
- updateMovie(movieId: string, gain?: number): Promise<void>;
218
+ updateMovie(movieId: string, gain?: number, offset?: string, pause?: boolean): Promise<void>;
219
219
  removeMovie(movieId: string): Promise<void>;
220
220
  startStream(isRecord?: boolean, name?: string | null, movieId?: string | null, privacy?: 'PUBLIC' | 'FRIENDS' | 'DIRECT_LINK', groupId?: string | null): Promise<SignalingMessage>;
221
221
  stopStream(): Promise<SignalingMessage>;
@@ -224,7 +224,9 @@ export default class Conversation extends EventEmitter {
224
224
  movieId: any;
225
225
  preview: any;
226
226
  }>;
227
- setLocalResolution(width: number, height: number): Promise<void>;
227
+ setLocalResolution(width: number, height: number, params?: {
228
+ effect: IVideoDimentions;
229
+ }): Promise<void>;
228
230
  videoEffect(effect: IEffect | null): Promise<void>;
229
231
  private _onLocalMediaStreamChanged;
230
232
  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>;
@@ -2,6 +2,7 @@ import { ParticipantStreamDescription } from '../types/ParticipantStreamDescript
2
2
  import SignalingMessage from '../types/SignalingMessage';
3
3
  export declare class ParticipantIdRegistry {
4
4
  private streamDescriptionByCompactId;
5
+ constructor();
5
6
  getStreamDescription(compactedId: number): ParticipantStreamDescription | undefined;
6
7
  handleMessage(data: ArrayBuffer): SignalingMessage | null;
7
8
  private _createParticipantSourcesUpdateNotification;
@@ -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,8 @@ declare enum HangupType {
10
10
  BUSY = "BUSY",
11
11
  FAILED = "FAILED",
12
12
  NETWORK_ERROR = "NETWORK_ERROR",
13
+ KILLED = "KILLED",
14
+ BANNED = "BANNED",
13
15
  CALLER_IS_BLOCKED = "CALLER_IS_BLOCKED",
14
16
  NOT_FRIENDS = "NOT_FRIENDS",
15
17
  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.23",
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
  *
@@ -0,0 +1,2 @@
1
+ export declare function loadDependencies(): Promise<void>;
2
+ export declare function getLibrary(name: string): any;
@@ -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
  * Количество входящих видео-треков.
@@ -211,6 +212,7 @@ export declare type ParamsObject = {
211
212
  * он хочет видеть, через вызов updateDisplayLayout
212
213
  */
213
214
  videoTracksCount: number;
215
+ movieShare: boolean;
214
216
  filteredMessages: boolean;
215
217
  breakVideoPayloadTypes: boolean;
216
218
  /**
@@ -296,7 +298,7 @@ export declare type ParamsObject = {
296
298
  /**
297
299
  * Изменились состояния устройств пользователя или разрешения включать камеру/микрофон
298
300
  */
299
- onMuteStates?: (muteStates: MuteStates, unmuteOptions: MediaOption[], mediaOptions: MediaOption[], muteAll: boolean, unmute: boolean, userId: ExternalId | null) => void;
301
+ onMuteStates?: (muteStates: MuteStates, unmuteOptions: MediaOption[], mediaOptions: MediaOption[], muteAll: boolean, unmute: boolean, userId: ExternalId | null, adminId: ExternalId | null) => void;
300
302
  /**
301
303
  * Изменились роли собеседника в звонке
302
304
  */
@@ -480,9 +482,8 @@ export default abstract class Params {
480
482
  static get producerNotificationDataChannel(): boolean;
481
483
  static get producerCommandDataChannel(): boolean;
482
484
  static get consumerScreenDataChannel(): boolean;
483
- static set consumerScreenDataChannel(value: boolean);
484
485
  static get producerScreenDataChannel(): boolean;
485
- static set producerScreenDataChannel(value: boolean);
486
+ static get screenShareWebmBuilder(): boolean;
486
487
  static get noiseSuppression(): boolean;
487
488
  static set noiseSuppression(value: boolean);
488
489
  static get preferH264(): boolean;
@@ -491,6 +492,7 @@ export default abstract class Params {
491
492
  static get consumerScreenTrack(): boolean;
492
493
  static get producerScreenTrack(): boolean;
493
494
  static isUnifiedPlanSupported(name: string, version: number): boolean;
495
+ static get movieShare(): boolean;
494
496
  static get videoTracksCount(): number;
495
497
  static get breakVideoPayloadTypes(): boolean;
496
498
  static get filteredMessages(): boolean;
package/static/Utils.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { BigInteger } from 'big-integer';
1
+ import type { BigInteger } from 'big-integer';
2
2
  import UserType from '../enums/UserType';
3
3
  import { ExternalParticipant } from '../types/ExternalId';
4
4
  import { CompositeUserId, OkUserId, Participant, ParticipantStateMapped } from '../types/Participant';
@@ -17,9 +17,14 @@ 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
+ vkMovieId?: string;
22
23
  };
23
24
  export default MediaSettings;
24
25
  export declare function compareMediaSettings(ms1: MediaSettings, ms2: MediaSettings): boolean;
25
26
  export declare function createMediaSettingsWithDefaults(ms?: Partial<MediaSettings>): MediaSettings;
27
+ export interface IVideoDimentions {
28
+ width: number;
29
+ height: number;
30
+ }
@@ -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;