piixishstream 0.0.0-stage → 1.0.2

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.
Files changed (123) hide show
  1. package/README.md +124 -2
  2. package/dist/client/GatewayEvents.d.ts +30 -0
  3. package/dist/client/GatewayEvents.js +2 -0
  4. package/dist/client/GatewayEvents.js.map +1 -0
  5. package/dist/client/GatewayOpCodes.d.ts +40 -0
  6. package/dist/client/GatewayOpCodes.js +42 -0
  7. package/dist/client/GatewayOpCodes.js.map +1 -0
  8. package/dist/client/Streamer.d.ts +30 -0
  9. package/dist/client/Streamer.js +188 -0
  10. package/dist/client/Streamer.js.map +1 -0
  11. package/dist/client/index.d.ts +3 -0
  12. package/dist/client/index.js +4 -0
  13. package/dist/client/index.js.map +1 -0
  14. package/dist/client/processing/AnnexBBitstreamReaderWriter.d.ts +23 -0
  15. package/dist/client/processing/AnnexBBitstreamReaderWriter.js +149 -0
  16. package/dist/client/processing/AnnexBBitstreamReaderWriter.js.map +1 -0
  17. package/dist/client/processing/AnnexBHelper.d.ts +93 -0
  18. package/dist/client/processing/AnnexBHelper.js +127 -0
  19. package/dist/client/processing/AnnexBHelper.js.map +1 -0
  20. package/dist/client/processing/SPSVUIRewriter.d.ts +1 -0
  21. package/dist/client/processing/SPSVUIRewriter.js +297 -0
  22. package/dist/client/processing/SPSVUIRewriter.js.map +1 -0
  23. package/dist/client/voice/BaseMediaConnection.d.ts +80 -0
  24. package/dist/client/voice/BaseMediaConnection.js +552 -0
  25. package/dist/client/voice/BaseMediaConnection.js.map +1 -0
  26. package/dist/client/voice/CodecPayloadType.d.ts +59 -0
  27. package/dist/client/voice/CodecPayloadType.js +60 -0
  28. package/dist/client/voice/CodecPayloadType.js.map +1 -0
  29. package/dist/client/voice/StreamConnection.d.ts +11 -0
  30. package/dist/client/voice/StreamConnection.js +34 -0
  31. package/dist/client/voice/StreamConnection.js.map +1 -0
  32. package/dist/client/voice/VoiceConnection.d.ts +8 -0
  33. package/dist/client/voice/VoiceConnection.js +15 -0
  34. package/dist/client/voice/VoiceConnection.js.map +1 -0
  35. package/dist/client/voice/VoiceMessageTypes.d.ts +178 -0
  36. package/dist/client/voice/VoiceMessageTypes.js +2 -0
  37. package/dist/client/voice/VoiceMessageTypes.js.map +1 -0
  38. package/dist/client/voice/VoiceOpCodes.d.ts +35 -0
  39. package/dist/client/voice/VoiceOpCodes.js +38 -0
  40. package/dist/client/voice/VoiceOpCodes.js.map +1 -0
  41. package/dist/client/voice/WebRtcWrapper.d.ts +23 -0
  42. package/dist/client/voice/WebRtcWrapper.js +159 -0
  43. package/dist/client/voice/WebRtcWrapper.js.map +1 -0
  44. package/dist/client/voice/index.d.ts +4 -0
  45. package/dist/client/voice/index.js +6 -0
  46. package/dist/client/voice/index.js.map +1 -0
  47. package/dist/index.d.ts +3 -0
  48. package/dist/index.js +4 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/media/AudioStream.d.ts +7 -0
  51. package/dist/media/AudioStream.js +12 -0
  52. package/dist/media/AudioStream.js.map +1 -0
  53. package/dist/media/BaseMediaStream.d.ts +31 -0
  54. package/dist/media/BaseMediaStream.js +164 -0
  55. package/dist/media/BaseMediaStream.js.map +1 -0
  56. package/dist/media/LibavCodecId.d.ts +541 -0
  57. package/dist/media/LibavCodecId.js +553 -0
  58. package/dist/media/LibavCodecId.js.map +1 -0
  59. package/dist/media/LibavDecoder.d.ts +5 -0
  60. package/dist/media/LibavDecoder.js +43 -0
  61. package/dist/media/LibavDecoder.js.map +1 -0
  62. package/dist/media/LibavDemuxer.d.ts +44 -0
  63. package/dist/media/LibavDemuxer.js +231 -0
  64. package/dist/media/LibavDemuxer.js.map +1 -0
  65. package/dist/media/VideoStream.d.ts +7 -0
  66. package/dist/media/VideoStream.js +12 -0
  67. package/dist/media/VideoStream.js.map +1 -0
  68. package/dist/media/encoders/index.d.ts +26 -0
  69. package/dist/media/encoders/index.js +12 -0
  70. package/dist/media/encoders/index.js.map +1 -0
  71. package/dist/media/encoders/merge.d.ts +3 -0
  72. package/dist/media/encoders/merge.js +10 -0
  73. package/dist/media/encoders/merge.js.map +1 -0
  74. package/dist/media/encoders/nvenc.d.ts +10 -0
  75. package/dist/media/encoders/nvenc.js +23 -0
  76. package/dist/media/encoders/nvenc.js.map +1 -0
  77. package/dist/media/encoders/software.d.ts +17 -0
  78. package/dist/media/encoders/software.js +31 -0
  79. package/dist/media/encoders/software.js.map +1 -0
  80. package/dist/media/encoders/vaapi.d.ts +6 -0
  81. package/dist/media/encoders/vaapi.js +22 -0
  82. package/dist/media/encoders/vaapi.js.map +1 -0
  83. package/dist/media/index.d.ts +4 -0
  84. package/dist/media/index.js +5 -0
  85. package/dist/media/index.js.map +1 -0
  86. package/dist/media/newApi.d.ts +130 -0
  87. package/dist/media/newApi.js +409 -0
  88. package/dist/media/newApi.js.map +1 -0
  89. package/dist/utils.d.ts +25 -0
  90. package/dist/utils.js +65 -0
  91. package/dist/utils.js.map +1 -0
  92. package/package.json +82 -5
  93. package/src/client/GatewayEvents.ts +48 -0
  94. package/src/client/GatewayOpCodes.ts +40 -0
  95. package/src/client/Streamer.ts +259 -0
  96. package/src/client/index.ts +3 -0
  97. package/src/client/processing/AnnexBBitstreamReaderWriter.ts +148 -0
  98. package/src/client/processing/AnnexBHelper.ts +134 -0
  99. package/src/client/processing/SPSVUIRewriter.ts +332 -0
  100. package/src/client/voice/BaseMediaConnection.ts +639 -0
  101. package/src/client/voice/CodecPayloadType.ts +59 -0
  102. package/src/client/voice/MediaUdp.ts.bak +171 -0
  103. package/src/client/voice/StreamConnection.ts +38 -0
  104. package/src/client/voice/VoiceConnection.ts +19 -0
  105. package/src/client/voice/VoiceMessageTypes.ts +263 -0
  106. package/src/client/voice/VoiceOpCodes.ts +36 -0
  107. package/src/client/voice/WebRtcWrapper.ts +218 -0
  108. package/src/client/voice/index.ts +5 -0
  109. package/src/index.ts +3 -0
  110. package/src/media/AudioStream.ts +18 -0
  111. package/src/media/BaseMediaStream.ts +198 -0
  112. package/src/media/LibavCodecId.ts +564 -0
  113. package/src/media/LibavDecoder.ts +47 -0
  114. package/src/media/LibavDemuxer.ts +293 -0
  115. package/src/media/VideoStream.ts +17 -0
  116. package/src/media/encoders/index.ts +27 -0
  117. package/src/media/encoders/merge.ts +14 -0
  118. package/src/media/encoders/nvenc.ts +38 -0
  119. package/src/media/encoders/software.ts +76 -0
  120. package/src/media/encoders/vaapi.ts +29 -0
  121. package/src/media/index.ts +4 -0
  122. package/src/media/newApi.ts +642 -0
  123. package/src/utils.ts +101 -0
@@ -0,0 +1,60 @@
1
+ export const CodecPayloadType = {
2
+ opus: {
3
+ name: "opus",
4
+ type: "audio",
5
+ clockRate: 48000,
6
+ priority: 1000,
7
+ payload_type: 120,
8
+ },
9
+ H264: {
10
+ name: "H264",
11
+ type: "video",
12
+ clockRate: 90000,
13
+ priority: 1000,
14
+ payload_type: 101,
15
+ rtx_payload_type: 102,
16
+ encode: true,
17
+ decode: true,
18
+ },
19
+ H265: {
20
+ name: "H265",
21
+ type: "video",
22
+ clockRate: 90000,
23
+ priority: 1000,
24
+ payload_type: 103,
25
+ rtx_payload_type: 104,
26
+ encode: true,
27
+ decode: true,
28
+ },
29
+ VP8: {
30
+ name: "VP8",
31
+ type: "video",
32
+ clockRate: 90000,
33
+ priority: 1000,
34
+ payload_type: 105,
35
+ rtx_payload_type: 106,
36
+ encode: true,
37
+ decode: true,
38
+ },
39
+ VP9: {
40
+ name: "VP9",
41
+ type: "video",
42
+ clockRate: 90000,
43
+ priority: 1000,
44
+ payload_type: 107,
45
+ rtx_payload_type: 108,
46
+ encode: true,
47
+ decode: true,
48
+ },
49
+ AV1: {
50
+ name: "AV1",
51
+ type: "video",
52
+ clockRate: 90000,
53
+ priority: 1000,
54
+ payload_type: 109,
55
+ rtx_payload_type: 110,
56
+ encode: true,
57
+ decode: true,
58
+ },
59
+ };
60
+ //# sourceMappingURL=CodecPayloadType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodecPayloadType.js","sourceRoot":"","sources":["../../../src/client/voice/CodecPayloadType.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,GAAG;KAClB;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,GAAG;QACjB,gBAAgB,EAAE,GAAG;QACrB,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;KACb;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,GAAG;QACjB,gBAAgB,EAAE,GAAG;QACrB,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;KACb;IACD,GAAG,EAAE;QACH,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,GAAG;QACjB,gBAAgB,EAAE,GAAG;QACrB,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;KACb;IACD,GAAG,EAAE;QACH,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,GAAG;QACjB,gBAAgB,EAAE,GAAG;QACrB,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;KACb;IACD,GAAG,EAAE;QACH,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,GAAG;QACjB,gBAAgB,EAAE,GAAG;QACrB,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;KACb;CACO,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { BaseMediaConnection } from "./BaseMediaConnection.js";
2
+ export declare class StreamConnection extends BaseMediaConnection {
3
+ private _streamKey;
4
+ private _serverId;
5
+ setSpeaking(speaking: boolean): void;
6
+ get daveChannelId(): string;
7
+ get serverId(): string | null;
8
+ set serverId(id: string);
9
+ get streamKey(): string | null;
10
+ set streamKey(value: string);
11
+ }
@@ -0,0 +1,34 @@
1
+ import { VoiceOpCodes } from "../voice/VoiceOpCodes.js";
2
+ import { BaseMediaConnection } from "./BaseMediaConnection.js";
3
+ export class StreamConnection extends BaseMediaConnection {
4
+ _streamKey = null;
5
+ _serverId = null;
6
+ setSpeaking(speaking) {
7
+ if (!this.webRtcParams)
8
+ throw new Error("WebRTC connection not ready");
9
+ this.sendOpcode(VoiceOpCodes.SPEAKING, {
10
+ delay: 0,
11
+ speaking: speaking ? 2 : 0,
12
+ ssrc: this.webRtcParams.audioSsrc,
13
+ });
14
+ }
15
+ get daveChannelId() {
16
+ if (this._serverId === null)
17
+ throw new Error("Server ID not set (this shouldn't happen)");
18
+ const channelId = BigInt(this._serverId) - 1n;
19
+ return channelId.toString();
20
+ }
21
+ get serverId() {
22
+ return this._serverId;
23
+ }
24
+ set serverId(id) {
25
+ this._serverId = id;
26
+ }
27
+ get streamKey() {
28
+ return this._streamKey;
29
+ }
30
+ set streamKey(value) {
31
+ this._streamKey = value;
32
+ }
33
+ }
34
+ //# sourceMappingURL=StreamConnection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StreamConnection.js","sourceRoot":"","sources":["../../../src/client/voice/StreamConnection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,MAAM,OAAO,gBAAiB,SAAQ,mBAAmB;IAC/C,UAAU,GAAkB,IAAI,CAAC;IACjC,SAAS,GAAkB,IAAI,CAAC;IAExB,WAAW,CAAC,QAAiB;QAC3C,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACvE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE;YACrC,KAAK,EAAE,CAAC;YACR,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS;SAClC,CAAC,CAAC;IACL,CAAC;IAED,IAAoB,aAAa;QAC/B,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI;YACzB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;QAC9C,OAAO,SAAS,CAAC,QAAQ,EAAE,CAAC;IAC9B,CAAC;IAED,IAAoB,QAAQ;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAW,QAAQ,CAAC,EAAU;QAC5B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACD,IAAW,SAAS,CAAC,KAAa;QAChC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { BaseMediaConnection } from "./BaseMediaConnection.js";
2
+ import type { StreamConnection } from "./StreamConnection.js";
3
+ export declare class VoiceConnection extends BaseMediaConnection {
4
+ streamConnection?: StreamConnection;
5
+ get daveChannelId(): string;
6
+ get serverId(): string;
7
+ stop(): void;
8
+ }
@@ -0,0 +1,15 @@
1
+ import { BaseMediaConnection } from "./BaseMediaConnection.js";
2
+ export class VoiceConnection extends BaseMediaConnection {
3
+ streamConnection;
4
+ get daveChannelId() {
5
+ return this.channelId;
6
+ }
7
+ get serverId() {
8
+ return this.guildId ?? this.channelId; // for guild vc it is the guild id, for dm voice it is the channel id
9
+ }
10
+ stop() {
11
+ super.stop();
12
+ this.streamConnection?.stop();
13
+ }
14
+ }
15
+ //# sourceMappingURL=VoiceConnection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VoiceConnection.js","sourceRoot":"","sources":["../../../src/client/voice/VoiceConnection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,MAAM,OAAO,eAAgB,SAAQ,mBAAmB;IAC/C,gBAAgB,CAAoB;IAE3C,IAAoB,aAAa;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAoB,QAAQ;QAC1B,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,qEAAqE;IAC9G,CAAC;IAEe,IAAI;QAClB,KAAK,CAAC,IAAI,EAAE,CAAC;QACb,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC;IAChC,CAAC;CACF"}
@@ -0,0 +1,178 @@
1
+ import type { VoiceOpCodes } from "./VoiceOpCodes.js";
2
+ import type { SupportedEncryptionModes } from "../../utils.js";
3
+ type StreamInfo = {
4
+ active: boolean;
5
+ quality: number;
6
+ rid: string;
7
+ ssrc: number;
8
+ rtx_ssrc: number;
9
+ /**
10
+ * always "video" from what I observed
11
+ */
12
+ type: string;
13
+ };
14
+ type SimulcastInfo = {
15
+ type: string;
16
+ rid: string;
17
+ quality: number;
18
+ };
19
+ type CodecPayloadType = {
20
+ name: string;
21
+ type: "audio";
22
+ priority: number;
23
+ payload_type: number;
24
+ } | {
25
+ name: string;
26
+ type: "video";
27
+ priority: number;
28
+ payload_type: number;
29
+ rtx_payload_type: number;
30
+ encode: boolean;
31
+ decode: boolean;
32
+ };
33
+ export declare namespace Message {
34
+ type Identify = {
35
+ server_id: string;
36
+ user_id: string;
37
+ session_id: string;
38
+ token: string;
39
+ video: boolean;
40
+ streams: SimulcastInfo[];
41
+ max_dave_protocol_version?: number;
42
+ };
43
+ type Resume = {
44
+ server_id: string;
45
+ session_id: string;
46
+ token: string;
47
+ seq_ack: number;
48
+ };
49
+ type Heartbeat = {
50
+ t: number;
51
+ seq_ack?: number;
52
+ };
53
+ type SelectProtocol = {
54
+ protocol: "udp";
55
+ codecs: CodecPayloadType[];
56
+ data: {
57
+ address: string;
58
+ port: number;
59
+ mode: SupportedEncryptionModes;
60
+ };
61
+ } | {
62
+ protocol: "webrtc";
63
+ codecs: CodecPayloadType[];
64
+ data: string;
65
+ sdp: string;
66
+ rtc_connection_id: string;
67
+ };
68
+ type Video = {
69
+ audio_ssrc: number;
70
+ video_ssrc: number;
71
+ rtx_ssrc: number;
72
+ streams: {
73
+ type: "video";
74
+ rid: string;
75
+ ssrc: number;
76
+ active: boolean;
77
+ quality: number;
78
+ rtx_ssrc: number;
79
+ max_bitrate: number;
80
+ max_framerate: number;
81
+ max_resolution: {
82
+ type: "fixed";
83
+ width: number;
84
+ height: number;
85
+ };
86
+ }[];
87
+ };
88
+ type Hello = {
89
+ heartbeat_interval: number;
90
+ };
91
+ type Ready = {
92
+ ssrc: number;
93
+ ip: string;
94
+ port: number;
95
+ modes: SupportedEncryptionModes[];
96
+ experiments: string[];
97
+ streams: StreamInfo[];
98
+ };
99
+ type Speaking = {
100
+ speaking: 0 | 1 | 2;
101
+ delay: number;
102
+ ssrc: number;
103
+ };
104
+ type SelectProtocolAck = {
105
+ audio_codec: string;
106
+ video_codec: string;
107
+ dave_protocol_version: number;
108
+ } & ({
109
+ secret_key: number[];
110
+ mode: string;
111
+ } | {
112
+ media_session_id: number;
113
+ sdp: string;
114
+ });
115
+ type HeartbeatAck = {
116
+ t: number;
117
+ };
118
+ type ClientsConnect = {
119
+ user_ids: string[];
120
+ };
121
+ type ClientDisconnect = {
122
+ user_id: string;
123
+ };
124
+ type DavePrepareTransition = {
125
+ transition_id: number;
126
+ protocol_version: number;
127
+ };
128
+ type DaveExecuteTransition = {
129
+ transition_id: number;
130
+ };
131
+ type DaveTransitionReady = {
132
+ transition_id: number;
133
+ };
134
+ type DavePrepareEpoch = {
135
+ epoch: number;
136
+ protocol_version: number;
137
+ };
138
+ type MlsInvalidCommitWelcome = {
139
+ transition_id: number;
140
+ };
141
+ }
142
+ export declare namespace GatewayResponse {
143
+ type Generic<Op extends VoiceOpCodes, T extends Record<string, unknown> | null> = {
144
+ op: Op;
145
+ d: T;
146
+ seq?: number;
147
+ };
148
+ export type Hello = Generic<VoiceOpCodes.HELLO, Message.Hello>;
149
+ export type Ready = Generic<VoiceOpCodes.READY, Message.Ready>;
150
+ export type Resumed = Generic<VoiceOpCodes.RESUMED, null>;
151
+ export type Speaking = Generic<VoiceOpCodes.SPEAKING, Message.Speaking>;
152
+ export type SelectProtocolAck = Generic<VoiceOpCodes.SELECT_PROTOCOL_ACK, Message.SelectProtocolAck>;
153
+ export type HeartbeatAck = Generic<VoiceOpCodes.HEARTBEAT_ACK, Message.HeartbeatAck>;
154
+ export type ClientsConnect = Generic<VoiceOpCodes.CLIENTS_CONNECT, Message.ClientsConnect>;
155
+ export type ClientDisconnect = Generic<VoiceOpCodes.CLIENT_DISCONNECT, Message.ClientDisconnect>;
156
+ export type DavePrepareTransition = Generic<VoiceOpCodes.DAVE_PREPARE_TRANSITION, Message.DavePrepareTransition>;
157
+ export type DaveExecuteTransition = Generic<VoiceOpCodes.DAVE_EXECUTE_TRANSITION, Message.DaveExecuteTransition>;
158
+ export type DavePrepareEpoch = Generic<VoiceOpCodes.DAVE_PREPARE_EPOCH, Message.DavePrepareEpoch>;
159
+ export {};
160
+ }
161
+ export type GatewayResponse = GatewayResponse.Hello | GatewayResponse.Ready | GatewayResponse.Resumed | GatewayResponse.Speaking | GatewayResponse.SelectProtocolAck | GatewayResponse.HeartbeatAck | GatewayResponse.ClientsConnect | GatewayResponse.ClientDisconnect | GatewayResponse.DavePrepareTransition | GatewayResponse.DaveExecuteTransition | GatewayResponse.DavePrepareEpoch;
162
+ export declare namespace GatewayRequest {
163
+ type Generic<Op extends VoiceOpCodes, T extends Record<string, unknown> | null> = {
164
+ op: Op;
165
+ d: T;
166
+ };
167
+ export type Identify = Generic<VoiceOpCodes.IDENTIFY, Message.Identify>;
168
+ export type Resume = Generic<VoiceOpCodes.RESUME, Message.Resume>;
169
+ export type Heartbeat = Generic<VoiceOpCodes.HEARTBEAT, Message.Heartbeat>;
170
+ export type SelectProtocol = Generic<VoiceOpCodes.SELECT_PROTOCOL, Message.SelectProtocol>;
171
+ export type Video = Generic<VoiceOpCodes.VIDEO, Message.Video>;
172
+ export type Speaking = Generic<VoiceOpCodes.SPEAKING, Message.Speaking>;
173
+ export type DaveTransitionReady = Generic<VoiceOpCodes.DAVE_TRANSITION_READY, Message.DaveTransitionReady>;
174
+ export type MlsInvalidCommitWelcome = Generic<VoiceOpCodes.MLS_INVALID_COMMIT_WELCOME, Message.MlsInvalidCommitWelcome>;
175
+ export {};
176
+ }
177
+ export type GatewayRequest = GatewayRequest.Identify | GatewayRequest.Resume | GatewayRequest.Heartbeat | GatewayRequest.SelectProtocol | GatewayRequest.Video | GatewayRequest.Speaking | GatewayRequest.DaveTransitionReady | GatewayRequest.MlsInvalidCommitWelcome;
178
+ export {};
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=VoiceMessageTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VoiceMessageTypes.js","sourceRoot":"","sources":["../../../src/client/voice/VoiceMessageTypes.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ export declare enum VoiceOpCodes {
2
+ IDENTIFY = 0,
3
+ SELECT_PROTOCOL = 1,
4
+ READY = 2,
5
+ HEARTBEAT = 3,
6
+ SELECT_PROTOCOL_ACK = 4,
7
+ SPEAKING = 5,
8
+ HEARTBEAT_ACK = 6,
9
+ RESUME = 7,
10
+ HELLO = 8,
11
+ RESUMED = 9,
12
+ CLIENTS_CONNECT = 11,
13
+ VIDEO = 12,
14
+ CLIENT_DISCONNECT = 13,
15
+ SESSION_UPDATE = 14,
16
+ MEDIA_SINK_WANTS = 15,
17
+ VOICE_BACKEND_VERSION = 16,
18
+ CHANNEL_OPTIONS_UPDATE = 17,
19
+ FLAGS = 18,
20
+ SPEED_TEST = 19,
21
+ PLATFORM = 20,
22
+ DAVE_PREPARE_TRANSITION = 21,
23
+ DAVE_EXECUTE_TRANSITION = 22,
24
+ DAVE_TRANSITION_READY = 23,
25
+ DAVE_PREPARE_EPOCH = 24,
26
+ MLS_INVALID_COMMIT_WELCOME = 31
27
+ }
28
+ export declare enum VoiceOpCodesBinary {
29
+ MLS_EXTERNAL_SENDER = 25,
30
+ MLS_KEY_PACKAGE = 26,
31
+ MLS_PROPOSALS = 27,
32
+ MLS_COMMIT_WELCOME = 28,
33
+ MLS_ANNOUNCE_COMMIT_TRANSITION = 29,
34
+ MLS_WELCOME = 30
35
+ }
@@ -0,0 +1,38 @@
1
+ export var VoiceOpCodes;
2
+ (function (VoiceOpCodes) {
3
+ VoiceOpCodes[VoiceOpCodes["IDENTIFY"] = 0] = "IDENTIFY";
4
+ VoiceOpCodes[VoiceOpCodes["SELECT_PROTOCOL"] = 1] = "SELECT_PROTOCOL";
5
+ VoiceOpCodes[VoiceOpCodes["READY"] = 2] = "READY";
6
+ VoiceOpCodes[VoiceOpCodes["HEARTBEAT"] = 3] = "HEARTBEAT";
7
+ VoiceOpCodes[VoiceOpCodes["SELECT_PROTOCOL_ACK"] = 4] = "SELECT_PROTOCOL_ACK";
8
+ VoiceOpCodes[VoiceOpCodes["SPEAKING"] = 5] = "SPEAKING";
9
+ VoiceOpCodes[VoiceOpCodes["HEARTBEAT_ACK"] = 6] = "HEARTBEAT_ACK";
10
+ VoiceOpCodes[VoiceOpCodes["RESUME"] = 7] = "RESUME";
11
+ VoiceOpCodes[VoiceOpCodes["HELLO"] = 8] = "HELLO";
12
+ VoiceOpCodes[VoiceOpCodes["RESUMED"] = 9] = "RESUMED";
13
+ VoiceOpCodes[VoiceOpCodes["CLIENTS_CONNECT"] = 11] = "CLIENTS_CONNECT";
14
+ VoiceOpCodes[VoiceOpCodes["VIDEO"] = 12] = "VIDEO";
15
+ VoiceOpCodes[VoiceOpCodes["CLIENT_DISCONNECT"] = 13] = "CLIENT_DISCONNECT";
16
+ VoiceOpCodes[VoiceOpCodes["SESSION_UPDATE"] = 14] = "SESSION_UPDATE";
17
+ VoiceOpCodes[VoiceOpCodes["MEDIA_SINK_WANTS"] = 15] = "MEDIA_SINK_WANTS";
18
+ VoiceOpCodes[VoiceOpCodes["VOICE_BACKEND_VERSION"] = 16] = "VOICE_BACKEND_VERSION";
19
+ VoiceOpCodes[VoiceOpCodes["CHANNEL_OPTIONS_UPDATE"] = 17] = "CHANNEL_OPTIONS_UPDATE";
20
+ VoiceOpCodes[VoiceOpCodes["FLAGS"] = 18] = "FLAGS";
21
+ VoiceOpCodes[VoiceOpCodes["SPEED_TEST"] = 19] = "SPEED_TEST";
22
+ VoiceOpCodes[VoiceOpCodes["PLATFORM"] = 20] = "PLATFORM";
23
+ VoiceOpCodes[VoiceOpCodes["DAVE_PREPARE_TRANSITION"] = 21] = "DAVE_PREPARE_TRANSITION";
24
+ VoiceOpCodes[VoiceOpCodes["DAVE_EXECUTE_TRANSITION"] = 22] = "DAVE_EXECUTE_TRANSITION";
25
+ VoiceOpCodes[VoiceOpCodes["DAVE_TRANSITION_READY"] = 23] = "DAVE_TRANSITION_READY";
26
+ VoiceOpCodes[VoiceOpCodes["DAVE_PREPARE_EPOCH"] = 24] = "DAVE_PREPARE_EPOCH";
27
+ VoiceOpCodes[VoiceOpCodes["MLS_INVALID_COMMIT_WELCOME"] = 31] = "MLS_INVALID_COMMIT_WELCOME";
28
+ })(VoiceOpCodes || (VoiceOpCodes = {}));
29
+ export var VoiceOpCodesBinary;
30
+ (function (VoiceOpCodesBinary) {
31
+ VoiceOpCodesBinary[VoiceOpCodesBinary["MLS_EXTERNAL_SENDER"] = 25] = "MLS_EXTERNAL_SENDER";
32
+ VoiceOpCodesBinary[VoiceOpCodesBinary["MLS_KEY_PACKAGE"] = 26] = "MLS_KEY_PACKAGE";
33
+ VoiceOpCodesBinary[VoiceOpCodesBinary["MLS_PROPOSALS"] = 27] = "MLS_PROPOSALS";
34
+ VoiceOpCodesBinary[VoiceOpCodesBinary["MLS_COMMIT_WELCOME"] = 28] = "MLS_COMMIT_WELCOME";
35
+ VoiceOpCodesBinary[VoiceOpCodesBinary["MLS_ANNOUNCE_COMMIT_TRANSITION"] = 29] = "MLS_ANNOUNCE_COMMIT_TRANSITION";
36
+ VoiceOpCodesBinary[VoiceOpCodesBinary["MLS_WELCOME"] = 30] = "MLS_WELCOME";
37
+ })(VoiceOpCodesBinary || (VoiceOpCodesBinary = {}));
38
+ //# sourceMappingURL=VoiceOpCodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VoiceOpCodes.js","sourceRoot":"","sources":["../../../src/client/voice/VoiceOpCodes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,YA0BX;AA1BD,WAAY,YAAY;IACtB,uDAAY,CAAA;IACZ,qEAAmB,CAAA;IACnB,iDAAS,CAAA;IACT,yDAAa,CAAA;IACb,6EAAuB,CAAA;IACvB,uDAAY,CAAA;IACZ,iEAAiB,CAAA;IACjB,mDAAU,CAAA;IACV,iDAAS,CAAA;IACT,qDAAW,CAAA;IACX,sEAAoB,CAAA;IACpB,kDAAU,CAAA;IACV,0EAAsB,CAAA;IACtB,oEAAmB,CAAA;IACnB,wEAAqB,CAAA;IACrB,kFAA0B,CAAA;IAC1B,oFAA2B,CAAA;IAC3B,kDAAU,CAAA;IACV,4DAAe,CAAA;IACf,wDAAa,CAAA;IACb,sFAA4B,CAAA;IAC5B,sFAA4B,CAAA;IAC5B,kFAA0B,CAAA;IAC1B,4EAAuB,CAAA;IACvB,4FAA+B,CAAA;AACjC,CAAC,EA1BW,YAAY,KAAZ,YAAY,QA0BvB;AAED,MAAM,CAAN,IAAY,kBAOX;AAPD,WAAY,kBAAkB;IAC5B,0FAAwB,CAAA;IACxB,kFAAoB,CAAA;IACpB,8EAAkB,CAAA;IAClB,wFAAuB,CAAA;IACvB,gHAAmC,CAAA;IACnC,0EAAgB,CAAA;AAClB,CAAC,EAPW,kBAAkB,KAAlB,kBAAkB,QAO7B"}
@@ -0,0 +1,23 @@
1
+ import { PeerConnection } from "@lng2004/node-datachannel";
2
+ import type { BaseMediaConnection } from "./BaseMediaConnection.js";
3
+ export declare class WebRtcConnWrapper {
4
+ private _mediaConn;
5
+ private _webRtcConn?;
6
+ private _audioDef;
7
+ private _videoDef;
8
+ private _audioTrack?;
9
+ private _videoTrack?;
10
+ private _audioPacketizer?;
11
+ private _videoPacketizer?;
12
+ private _videoCodec?;
13
+ constructor(mediaConn: BaseMediaConnection);
14
+ initWebRtc(): PeerConnection;
15
+ private _setMediaHandler;
16
+ close(): void;
17
+ get webRtcConn(): PeerConnection | undefined;
18
+ get ready(): boolean;
19
+ get mediaConnection(): BaseMediaConnection;
20
+ sendAudioFrame(frame: Buffer, frametime: number): void;
21
+ sendVideoFrame(frame: Buffer, frametime: number): void;
22
+ setPacketizer(videoCodec: string): void;
23
+ }
@@ -0,0 +1,159 @@
1
+ import { PeerConnection, Audio, Video, PacingHandler, RtpPacketizer, H264RtpPacketizer, H265RtpPacketizer, AV1RtpPacketizer, RtpPacketizationConfig, RtcpNackResponder, RtcpSrReporter, } from "@lng2004/node-datachannel";
2
+ import { CodecPayloadType } from "./CodecPayloadType.js";
3
+ import { normalizeVideoCodec } from "../../utils.js";
4
+ import { splitNalu, H264Helpers, H264NalUnitTypes, startCode3, } from "../processing/AnnexBHelper.js";
5
+ import { rewriteSPSVUI } from "../processing/SPSVUIRewriter.js";
6
+ export class WebRtcConnWrapper {
7
+ _mediaConn;
8
+ _webRtcConn;
9
+ _audioDef;
10
+ _videoDef;
11
+ _audioTrack;
12
+ _videoTrack;
13
+ _audioPacketizer;
14
+ _videoPacketizer;
15
+ _videoCodec;
16
+ constructor(mediaConn) {
17
+ this._mediaConn = mediaConn;
18
+ this._audioDef = new Audio("0", "SendRecv");
19
+ this._videoDef = new Video("1", "SendRecv");
20
+ this._audioDef.addOpusCodec(CodecPayloadType.opus.payload_type);
21
+ for (const { name, payload_type, rtx_payload_type, clockRate, } of Object.values(CodecPayloadType).filter((el) => el.type === "video")) {
22
+ switch (name) {
23
+ case "H264":
24
+ this._videoDef.addH264Codec(payload_type);
25
+ break;
26
+ case "H265":
27
+ this._videoDef.addH265Codec(payload_type);
28
+ break;
29
+ case "VP8":
30
+ this._videoDef.addVP8Codec(payload_type);
31
+ break;
32
+ case "VP9":
33
+ this._videoDef.addVP9Codec(payload_type);
34
+ break;
35
+ case "AV1":
36
+ this._videoDef.addAV1Codec(payload_type);
37
+ break;
38
+ }
39
+ this._videoDef.addRTXCodec(rtx_payload_type, payload_type, clockRate);
40
+ }
41
+ }
42
+ initWebRtc() {
43
+ this._webRtcConn = new PeerConnection("", {
44
+ iceServers: ["stun:stun.l.google.com:19302"],
45
+ });
46
+ this._audioTrack = this._webRtcConn.addTrack(this._audioDef);
47
+ this._videoTrack = this._webRtcConn.addTrack(this._videoDef);
48
+ this._setMediaHandler();
49
+ return this._webRtcConn;
50
+ }
51
+ _setMediaHandler() {
52
+ if (this._audioPacketizer)
53
+ this._audioTrack?.setMediaHandler(this._audioPacketizer);
54
+ if (this._videoPacketizer)
55
+ this._videoTrack?.setMediaHandler(this._videoPacketizer);
56
+ }
57
+ close() {
58
+ this._webRtcConn?.close();
59
+ }
60
+ get webRtcConn() {
61
+ return this._webRtcConn;
62
+ }
63
+ get ready() {
64
+ return this._webRtcConn?.state() === "connected";
65
+ }
66
+ get mediaConnection() {
67
+ return this._mediaConn;
68
+ }
69
+ sendAudioFrame(frame, frametime) {
70
+ if (!this.ready)
71
+ return;
72
+ if (!this._audioPacketizer)
73
+ return;
74
+ const { rtpConfig } = this._audioPacketizer;
75
+ const { clockRate } = rtpConfig;
76
+ if (this.mediaConnection.daveReady)
77
+ frame = this.mediaConnection.daveSession.encryptOpus(frame);
78
+ this._audioTrack?.sendMessageBinary(frame);
79
+ rtpConfig.timestamp += Math.round((frametime * clockRate) / 1000);
80
+ }
81
+ sendVideoFrame(frame, frametime) {
82
+ if (!this.ready)
83
+ return;
84
+ if (!this._videoPacketizer)
85
+ return;
86
+ const { rtpConfig } = this._videoPacketizer;
87
+ const { clockRate } = rtpConfig;
88
+ if (this._videoCodec === "H264") {
89
+ let spsRewritten = false;
90
+ const nalus = splitNalu(frame).map((el) => {
91
+ if (H264Helpers.getUnitType(el) === H264NalUnitTypes.SPS) {
92
+ spsRewritten = true;
93
+ return rewriteSPSVUI(el);
94
+ }
95
+ return el;
96
+ });
97
+ if (spsRewritten)
98
+ frame = Buffer.concat(nalus.flatMap((el) => [startCode3, el]));
99
+ }
100
+ if (this.mediaConnection.daveReady) {
101
+ let daveCodec = 0 /* Codec.UNKNOWN */;
102
+ switch (this._videoCodec) {
103
+ case "H264":
104
+ daveCodec = 4 /* Codec.H264 */;
105
+ break;
106
+ case "H265":
107
+ daveCodec = 5 /* Codec.H265 */;
108
+ break;
109
+ case "VP8":
110
+ daveCodec = 2 /* Codec.VP8 */;
111
+ break;
112
+ case "VP9":
113
+ daveCodec = 3 /* Codec.VP9 */;
114
+ break;
115
+ case "AV1":
116
+ daveCodec = 6 /* Codec.AV1 */;
117
+ break;
118
+ }
119
+ frame = this.mediaConnection.daveSession.encrypt(1 /* MediaType.VIDEO */, daveCodec, frame);
120
+ }
121
+ this._videoTrack?.sendMessageBinary(frame);
122
+ rtpConfig.timestamp += Math.round((frametime * clockRate) / 1000);
123
+ }
124
+ setPacketizer(videoCodec) {
125
+ if (!this.mediaConnection.webRtcParams)
126
+ throw new Error("WebRTC connection not ready");
127
+ const { audioSsrc, videoSsrc } = this.mediaConnection.webRtcParams;
128
+ const rtpConfigAudio = new RtpPacketizationConfig(audioSsrc, "", CodecPayloadType.opus.payload_type, CodecPayloadType.opus.clockRate);
129
+ rtpConfigAudio.playoutDelayId = 5;
130
+ rtpConfigAudio.playoutDelayMin = 0;
131
+ rtpConfigAudio.playoutDelayMax = 1;
132
+ this._audioPacketizer = new RtpPacketizer(rtpConfigAudio);
133
+ this._audioPacketizer.addToChain(new RtcpSrReporter(rtpConfigAudio));
134
+ this._audioPacketizer.addToChain(new RtcpNackResponder());
135
+ this._videoCodec = normalizeVideoCodec(videoCodec);
136
+ const rtpConfigVideo = new RtpPacketizationConfig(videoSsrc, "", CodecPayloadType[this._videoCodec].payload_type, CodecPayloadType[this._videoCodec].clockRate);
137
+ rtpConfigVideo.playoutDelayId = 5;
138
+ rtpConfigVideo.playoutDelayMin = 0;
139
+ rtpConfigVideo.playoutDelayMax = 10;
140
+ switch (this._videoCodec) {
141
+ case "H264":
142
+ this._videoPacketizer = new H264RtpPacketizer("StartSequence", rtpConfigVideo);
143
+ break;
144
+ case "H265":
145
+ this._videoPacketizer = new H265RtpPacketizer("StartSequence", rtpConfigVideo);
146
+ break;
147
+ case "AV1":
148
+ this._videoPacketizer = new AV1RtpPacketizer("Obu", rtpConfigVideo);
149
+ break;
150
+ default:
151
+ throw new Error(`Packetizer not implemented for ${this._videoCodec}`);
152
+ }
153
+ this._videoPacketizer.addToChain(new RtcpSrReporter(rtpConfigVideo));
154
+ this._videoPacketizer.addToChain(new RtcpNackResponder());
155
+ // this._videoPacketizer.addToChain(new PacingHandler(25 * 1000 * 1000, 1));
156
+ this._setMediaHandler();
157
+ }
158
+ }
159
+ //# sourceMappingURL=WebRtcWrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebRtcWrapper.js","sourceRoot":"","sources":["../../../src/client/voice/WebRtcWrapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from "./VoiceConnection.js";
2
+ export * from "./VoiceOpCodes.js";
3
+ export * from "./StreamConnection.js";
4
+ export * from "./BaseMediaConnection.js";
@@ -0,0 +1,6 @@
1
+ export * from "./VoiceConnection.js";
2
+ export * from "./VoiceOpCodes.js";
3
+ // export * from './MediaUdp.js';
4
+ export * from "./StreamConnection.js";
5
+ export * from "./BaseMediaConnection.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/voice/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,iCAAiC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./client/index.js";
2
+ export * from "./media/index.js";
3
+ export * as Utils from "./utils.js";
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export * from "./client/index.js";
2
+ export * from "./media/index.js";
3
+ export * as Utils from "./utils.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { BaseMediaStream } from "./BaseMediaStream.js";
2
+ import type { WebRtcConnWrapper } from "../client/voice/WebRtcWrapper.js";
3
+ export declare class AudioStream extends BaseMediaStream {
4
+ private _conn;
5
+ constructor(conn: WebRtcConnWrapper, noSleep?: boolean);
6
+ protected _sendFrame(frame: Buffer, frametime: number): Promise<void>;
7
+ }
@@ -0,0 +1,12 @@
1
+ import { BaseMediaStream } from "./BaseMediaStream.js";
2
+ export class AudioStream extends BaseMediaStream {
3
+ _conn;
4
+ constructor(conn, noSleep = false) {
5
+ super("audio", noSleep);
6
+ this._conn = conn;
7
+ }
8
+ async _sendFrame(frame, frametime) {
9
+ this._conn.sendAudioFrame(frame, frametime);
10
+ }
11
+ }
12
+ //# sourceMappingURL=AudioStream.js.map