@vkontakte/calls-sdk 2.6.2-beta.27 → 2.6.2-beta.28

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,6 @@
1
1
  import ParticipantLayout, { RequestKeyFrame, StopStream } from '../types/ParticipantLayout';
2
2
  import SignalingMessage from '../types/SignalingMessage';
3
+ import { SharingStatReport } from '../classes/screenshare/SharingStatReport';
3
4
  import { ParticipantIdRegistry } from './ParticipantIdRegistry';
4
5
  import { PerfStatReport } from './transport/PerfStatReporter';
5
6
  export declare class ProducerCommandSerializationService {
@@ -11,6 +12,7 @@ export declare class ProducerCommandSerializationService {
11
12
  private writeLayout;
12
13
  private writeStreamDesc;
13
14
  serializePerfStatReport(sequenceNumber: number, report: PerfStatReport): ArrayBuffer;
15
+ serializeSharingStatReport(sequenceNumber: number, report: SharingStatReport): ArrayBuffer;
14
16
  deserializeCommandResponse(data: BufferSource | Blob): Promise<SignalingMessage | undefined>;
15
17
  private deserializeUpdateDisplayLayoutResponse;
16
18
  private deserializeReportPerfStatResponse;
@@ -4,7 +4,7 @@ export default interface IEncoder {
4
4
  requestFrame(keyFrame: boolean): void;
5
5
  isVP9(): boolean;
6
6
  destroy(): void;
7
- setBitrate(bitrate: number): void;
7
+ setBitrate(bitrate: number, useCbr: boolean): void;
8
8
  }
9
9
  export interface FrameMessage {
10
10
  type: MessageType;
@@ -29,7 +29,7 @@ export default class LibVPxEncoder extends WorkerBase implements IEncoder {
29
29
  private _requestFrameVideo;
30
30
  private _requestFrameBitmap;
31
31
  requestFrame(keyFrame?: boolean): void;
32
- setBitrate(bitrate: number): void;
32
+ setBitrate(bitrate: number, useCbr?: boolean): void;
33
33
  isVP9(): boolean;
34
34
  destroy(): void;
35
35
  static isBrowserSupported(): boolean;
@@ -16,4 +16,4 @@ export declare type EncodedVideoFrame = Pick<EncodedVideoChunk, 'type' | 'timest
16
16
  height: number;
17
17
  };
18
18
  export declare type OnFrameCallback = (chunk: EncodedVideoFrame | null, error?: string) => void;
19
- export declare type OnCongestionCallback = (bitrate: number) => void;
19
+ export declare type OnCongestionCallback = (bitrate: number, useCbr: boolean) => void;
@@ -10,7 +10,7 @@ export default class WebCodecsEncoder extends WorkerBase implements IEncoder {
10
10
  constructor(sourceTrack: MediaStreamTrack, onFrame: OnFrameCallback, useCongestionControl: boolean, maxBitrate: number);
11
11
  init(): Promise<void>;
12
12
  requestFrame(keyFrame?: boolean): void;
13
- setBitrate(bitrate: number): void;
13
+ setBitrate(bitrate: number, useCbr: boolean): void;
14
14
  isVP9(): boolean;
15
15
  destroy(): void;
16
16
  static isBrowserSupported(): boolean;
@@ -0,0 +1,30 @@
1
+ declare type HistoryRecord = {
2
+ seq: number;
3
+ ts: number;
4
+ size: number;
5
+ sent: number;
6
+ start: boolean;
7
+ end: boolean;
8
+ ts2: number;
9
+ recv: number;
10
+ };
11
+ /**
12
+ * Class calculates server bitrate and delay, based on server cc feedback
13
+ * Ring buffer to keep sent packets info (HistoryRecord)
14
+ * Packet info is updated when cc feedback is received from server
15
+ */
16
+ export default class PacketHistory {
17
+ private readonly _maxSize;
18
+ private _size;
19
+ private readonly _buffer;
20
+ private _head;
21
+ private _tail;
22
+ constructor(maxSize: number);
23
+ add(seq: number, ts: number, size: number, start: boolean, end: boolean): number;
24
+ update(seq: number, ts2: number): HistoryRecord;
25
+ get(seq: number): HistoryRecord;
26
+ getServerBitrateK(windowMs: number): number;
27
+ getCurrentDelay(): number;
28
+ getMaxBandwidth(): number;
29
+ }
30
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -1,6 +1,8 @@
1
+ import BaseSignaling from '../../abstract/BaseSignaling';
1
2
  export default class ScreenCaptureSender {
2
3
  private readonly _encoder;
3
4
  private readonly _datachannel;
5
+ private readonly _signaling;
4
6
  private _destroyed;
5
7
  private _needKeyframe;
6
8
  private readonly DATA_SIZE;
@@ -8,7 +10,10 @@ export default class ScreenCaptureSender {
8
10
  private _frameNum;
9
11
  private _width;
10
12
  private _height;
11
- constructor(track: MediaStreamTrack, datachannel: RTCDataChannel);
13
+ private _feedback;
14
+ private _lastSharingStat;
15
+ private _congestionControlEnabled;
16
+ constructor(track: MediaStreamTrack, datachannel: RTCDataChannel, signaling: BaseSignaling);
12
17
  private _requestFrame;
13
18
  private _wrapHeader;
14
19
  private _stopPacket;
@@ -19,4 +24,6 @@ export default class ScreenCaptureSender {
19
24
  private _onCongestionCallback;
20
25
  private _onResize;
21
26
  private _calcMinMaxBitrate;
27
+ private _checkCcFeedback;
28
+ private _sendSharingStat;
22
29
  }
@@ -1,16 +1,25 @@
1
1
  import { OnCongestionCallback } from '../codec/Types';
2
+ import { SharingStatReport } from './SharingStatReport';
2
3
  export default class ScreenCongestionControl {
3
- private _bitrateCalculator;
4
- private _onCongestion;
4
+ private readonly _onCongestion;
5
+ private readonly _ccEnabled;
5
6
  private _minBitrate;
6
7
  private _maxBitrate;
7
8
  private _targetBitrate;
8
9
  private _lastDown;
9
10
  private _lastUp;
10
- private _lastSwitch;
11
- private _framesDelayed;
11
+ private _lastProbing;
12
+ private _lastCheckDelay;
12
13
  private _upPenalty;
13
- constructor(onCongestion: OnCongestionCallback, minBitrate: number, maxBitrate: number);
14
- checkFrame(frameNum: number, frameElapsed: number, frameSize: number): void;
14
+ private _probing;
15
+ private _delayAvgShort;
16
+ private _delayAvgLong;
17
+ private _minDelay;
18
+ private _maxDelay;
19
+ private _largeDelayDuration;
20
+ constructor(onCongestion: OnCongestionCallback, minBitrate: number, maxBitrate: number, ccEnabled: boolean);
21
+ checkDelay(frameNum: number, delay: number, bitrateK: number): void;
22
+ private _calcDelay;
15
23
  reconfigure(minBitrate: number, maxBitrate: number): void;
24
+ getStat(): SharingStatReport;
16
25
  }
@@ -0,0 +1,6 @@
1
+ export declare type SharingStatReport = {
2
+ minDelay: number;
3
+ maxDelay: number;
4
+ avgDelay: number;
5
+ largeDelayDuration: number;
6
+ };
@@ -15,3 +15,8 @@ export interface FrameChunk extends FrameChunkHeader {
15
15
  export declare function wrapHeader(timestamp: number, start: boolean, end: boolean, keyframe: boolean, sequence: number, isVP9: boolean, data: ArrayBuffer | null): ArrayBuffer;
16
16
  export declare function parseChunk(data: ArrayBuffer): FrameChunk;
17
17
  export declare function isKeyframeRequested(data?: ArrayBuffer): boolean;
18
+ export interface CcFeedback {
19
+ seq: number;
20
+ ts2: number;
21
+ }
22
+ export declare function parseCcFeedback(data?: ArrayBuffer): CcFeedback;
@@ -19,6 +19,7 @@ import ParticipantLayout, { RequestKeyFrame, StopStream } from '../types/Partici
19
19
  import { ParticipantListChunkParameters } from '../types/ParticipantListChunk';
20
20
  import SignalingMessage from '../types/SignalingMessage';
21
21
  import { WaitingParticipantId } from '../types/WaitingHall';
22
+ import { SharingStatReport } from '../classes/screenshare/SharingStatReport';
22
23
  export default class Signaling extends BaseSignaling {
23
24
  private socket;
24
25
  protected sequence: number;
@@ -112,6 +113,7 @@ export default class Signaling extends BaseSignaling {
112
113
  switchTopology(topology: TransportTopology, force?: boolean): Promise<SignalingMessage>;
113
114
  requestRealloc(): Promise<SignalingMessage>;
114
115
  reportPerfStat(report: PerfStatReport): Promise<SignalingMessage>;
116
+ reportSharingStat(report: SharingStatReport): Promise<SignalingMessage>;
115
117
  chatMessage(message: string, participantId?: CompositeUserId | null): Promise<SignalingMessage>;
116
118
  chatHistory(count: number): Promise<SignalingMessage>;
117
119
  customData(data: JSONObject, participantId: ParticipantId | null): Promise<SignalingMessage>;
@@ -0,0 +1,7 @@
1
+ declare enum LiveStatus {
2
+ NOT_DEFINED = -1,
3
+ WAITING = 0,
4
+ ONLINE = 1,
5
+ ENDED = 2
6
+ }
7
+ export default LiveStatus;
@@ -12,6 +12,7 @@ declare enum SignalingCommandType {
12
12
  CHANGE_STREAM_PRIORITIES = "change-streams-priorities",
13
13
  UPDATE_DISPLAY_LAYOUT = "update-display-layout",
14
14
  REPORT_PERF_STAT = "report-perf-stat",
15
+ REPORT_SHARING_STAT = "report-sharing-stat",
15
16
  RECORD_START = "record-start",
16
17
  RECORD_STOP = "record-stop",
17
18
  RECORD_SET_ROLE = "record-set-role",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vkontakte/calls-sdk",
3
- "version": "2.6.2-beta.27",
3
+ "version": "2.6.2-beta.28",
4
4
  "author": "vk.com",
5
5
  "description": "Library for video calls based on the vk.com platform",
6
6
  "homepage": "https://vk.com",
@@ -0,0 +1,6 @@
1
+ export declare const fromEntries: {
2
+ <T = any>(entries: Iterable<readonly [PropertyKey, T]>): {
3
+ [k: string]: T;
4
+ };
5
+ (entries: Iterable<readonly any[]>): any;
6
+ };
@@ -1,3 +1,4 @@
1
+ import LiveStatus from '../enums/LiveStatus';
1
2
  import { OkUserId, CompositeUserId } from './Participant';
2
3
  import { MediaType } from './ParticipantStreamDescription';
3
4
  export interface IMoviePreview {
@@ -18,7 +19,8 @@ export declare type ISharedMovieStateResponse = [
18
19
  number,
19
20
  boolean,
20
21
  number,
21
- boolean
22
+ boolean,
23
+ number
22
24
  ];
23
25
  export interface ISharedMovieState {
24
26
  participantId: CompositeUserId;
@@ -26,6 +28,7 @@ export interface ISharedMovieState {
26
28
  pause?: boolean;
27
29
  offset?: number;
28
30
  mute?: boolean;
31
+ liveStatus?: LiveStatus;
29
32
  }
30
33
  export interface IUpdateMovieData {
31
34
  movieId: string;