@vkontakte/calls-sdk 2.8.7 → 2.8.8-dev.8afae0db.0

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.
@@ -1,5 +1,5 @@
1
1
  export default interface IDecoder {
2
- init(onFrameImage: (image: VideoFrame | ImageData) => void, onFrameError?: (error: unknown) => void): Promise<void>;
2
+ init(onFrameImage: (image: VideoFrame | ImageData) => void, onFrameError?: (error: unknown) => void, onKeyFrameRequested?: () => void): Promise<void>;
3
3
  decodeFrame(timestamp: number, data: Uint8Array, isVP9: boolean, keyFrame?: boolean): void;
4
4
  destroy(): void;
5
5
  }
@@ -1,7 +1,7 @@
1
1
  import IDecoder from './IDecoder';
2
2
  import WorkerBase from './WorkerBase';
3
3
  export default class LibVPxDecoder extends WorkerBase implements IDecoder {
4
- init(onFrameImage: (image: ImageData) => void, onFrameError: (error: unknown) => void): Promise<void>;
4
+ init(onFrameImage: (image: ImageData) => void, onFrameError: (error: unknown) => void, onKeyFrameRequested: () => void): Promise<void>;
5
5
  decodeFrame(timestamp: number, data: Uint8Array, isVP9: boolean, keyFrame?: boolean): void;
6
6
  destroy(): void;
7
7
  static isBrowserSupported(): boolean;
@@ -1,7 +1,7 @@
1
1
  import IDecoder from './IDecoder';
2
2
  import WorkerBase from './WorkerBase';
3
3
  export default class WebCodecsDecoder extends WorkerBase implements IDecoder {
4
- init(onFrameImage: (frame: VideoFrame) => void, onFrameError: (error: unknown) => void): Promise<void>;
4
+ init(onFrameImage: (frame: VideoFrame) => void, onFrameError: (error: unknown) => void, onKeyFrameRequested: () => void): Promise<void>;
5
5
  decodeFrame(timestamp: number, data: Uint8Array, isVP9: boolean, keyFrame?: boolean): void;
6
6
  destroy(): void;
7
7
  static isBrowserSupported(): boolean;
@@ -8,9 +8,10 @@ export declare abstract class BaseStreamBuilder {
8
8
  protected readonly _participantId: ParticipantId;
9
9
  protected readonly _onStream: IOnStream;
10
10
  protected readonly _onStat: IOnStat;
11
+ protected readonly _onKeyFrameRequested?: VoidFunction;
11
12
  protected readonly _statScreenShareFirstFrame: StatScreenShareFirstFrame;
12
13
  protected _chunks: FrameChunk[];
13
- protected constructor(participantId: ParticipantId, onStream: IOnStream, onStat: IOnStat);
14
+ protected constructor(participantId: ParticipantId, onStream: IOnStream, onStat: IOnStat, onKeyFrameRequested?: VoidFunction);
14
15
  appendChunk(chunk: FrameChunk): void;
15
16
  destroy(): void;
16
17
  protected abstract _processFrame(frame: FrameData): void;
@@ -10,6 +10,10 @@ export default class ScreenCaptureReceiver {
10
10
  private _onStat;
11
11
  constructor(datachannel: RTCDataChannel, participantIdRegistry: ParticipantIdRegistry, onStream: (streamId: string, stream: MediaStream) => void, onEos: (streamId: string) => void, onStat: IOnStat);
12
12
  private _onDataChannelMessage;
13
+ /**
14
+ * Отправить запрос ключевого кадра в datachannel.
15
+ */
16
+ private _requestKeyFrame;
13
17
  close(participantId: ParticipantId): void;
14
18
  destroy(): void;
15
19
  static isBrowserSupported(): boolean;
@@ -1,14 +1,26 @@
1
1
  import { ParticipantId } from '../../types/Participant';
2
2
  import { BaseStreamBuilder, FrameData, IOnStat, IOnStream } from './BaseStreamBuilder';
3
3
  export default class StreamBuilder extends BaseStreamBuilder {
4
- private readonly _renderer;
5
- private readonly _decoder;
4
+ private _renderer;
5
+ private _decoder;
6
6
  private _decoderReady;
7
7
  private _decoderBusy;
8
8
  private _decoderQueue;
9
- private readonly _fpsMeter;
10
- constructor(participantId: ParticipantId, onStream: IOnStream, onStat: IOnStat);
9
+ private _fpsMeter;
10
+ constructor(participantId: ParticipantId, onStream: IOnStream, onStat: IOnStat, onKeyFrameRequested: VoidFunction);
11
11
  protected _processFrame(frame: FrameData): void;
12
+ private _initFpsMeter;
13
+ /**
14
+ * Инициализация рендерера
15
+ * @param forceCanvasRenderer используется для принудительного создания CanvasRenderer, который работает с LibVPX
16
+ */
17
+ private _initRenderer;
18
+ /**
19
+ * Инициализация декодера
20
+ * @param forceLibVPXDecoder используется для принудительного создания LibVPXDecoder
21
+ */
22
+ private _initDecoder;
23
+ private _switchToLibVPXDecoder;
12
24
  private _decodeQueue;
13
25
  destroy(): void;
14
26
  static isBrowserSupported(): boolean;
@@ -20,3 +20,4 @@ export interface CcFeedback {
20
20
  ts2: number;
21
21
  }
22
22
  export declare function parseCcFeedback(data?: ArrayBuffer): CcFeedback | null;
23
+ export declare function prepareKeyFrameRequest(ssrc: number): ArrayBuffer;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vkontakte/calls-sdk",
3
- "version": "2.8.7",
3
+ "version": "2.8.8-dev.8afae0db.0",
4
4
  "author": "vk.com",
5
5
  "description": "Library for video calls based on the vk.com platform",
6
6
  "homepage": "https://vk.com",
@@ -507,6 +507,18 @@ export type ParamsObject = {
507
507
  * _По умолчанию: `false`_
508
508
  */
509
509
  webtransportFF: boolean;
510
+ /**
511
+ * Скриншара
512
+ * Включить возможность запрашивать ключевой кадр декодером
513
+ * @hidden
514
+ */
515
+ streamBuilderKeyFrameRequest: boolean;
516
+ /**
517
+ * Скриншара
518
+ * Включить переключение на LibVPX при проблемах с WebCodecsDecoder
519
+ * @hidden
520
+ */
521
+ streamBuilderAutoSwitchToLibVPX: boolean;
510
522
  /**
511
523
  * Получен локальный стрим с камеры/микрофона
512
524
  */
@@ -1020,6 +1032,10 @@ export default abstract class Params {
1020
1032
  static set webtransport(value: boolean);
1021
1033
  static get webtransportFF(): boolean;
1022
1034
  static set webtransportFF(value: boolean);
1035
+ static set streamBuilderKeyFrameRequest(value: boolean);
1036
+ static get streamBuilderKeyFrameRequest(): boolean;
1037
+ static set streamBuilderAutoSwitchToLibVPX(value: boolean);
1038
+ static get streamBuilderAutoSwitchToLibVPX(): boolean;
1023
1039
  static toJSON(): {
1024
1040
  apiKey: string;
1025
1041
  apiEnv: string;
@@ -1051,5 +1067,7 @@ export default abstract class Params {
1051
1067
  simulcast: boolean;
1052
1068
  webtransport: boolean;
1053
1069
  webtransportFF: boolean;
1070
+ streamBuilderKeyFrameRequest: boolean;
1071
+ streamBuilderAutoSwitchToLibVPX: boolean;
1054
1072
  };
1055
1073
  }
@@ -21,7 +21,9 @@ export declare enum FacingMode {
21
21
  export type BrowserName = 'IE' | 'Edge' | 'Chrome' | 'Firefox' | 'Yandex' | 'Opera' | 'Sferum';
22
22
  declare namespace WebRTCUtils {
23
23
  /**
24
- * Инициализирует устройства. До вызова этого метода бесполезно опрашивать другие публичные методы
24
+ * До вызова этого метода бесполезно опрашивать другие публичные методы.
25
+ * - Инициализирует устройства.
26
+ * - Получает версию ОС
25
27
  */
26
28
  function init(): Promise<void>;
27
29
  /**
@@ -151,6 +153,10 @@ declare namespace WebRTCUtils {
151
153
  * Имя операционной системы
152
154
  */
153
155
  function os(): string;
156
+ /**
157
+ * Версия операционной системы
158
+ */
159
+ function osVersion(): number | null | undefined;
154
160
  /**
155
161
  * Мобильный браузер или нет
156
162
  */