@rongcloud/plugin-rtc 5.6.2 → 5.6.3-alpha.3

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.
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /*
2
- * RCRTC - v5.6.2
3
- * CommitId - 01c6e10cd9bac08641a2fd6ef2677ea9df3338b0
4
- * Thu Nov 10 2022 11:44:15 GMT+0800 (China Standard Time)
2
+ * RCRTC - v5.6.3-alpha.3
3
+ * CommitId - db726c933e72872baf32689bc9690c7a34f2bab2
4
+ * Sun Nov 13 2022 23:10:47 GMT+0800 (China Standard Time)
5
5
  * ©2020 RongCloud, Inc. All rights reserved.
6
6
  */
7
7
  import { EventEmitter, BasicLogger, INaviInfo, RTCPluginContext, AbsCodec, IPromiseResult, ErrorCode, KVString, IRuntime, IAsyncRes, ConnectionStatus, ConversationType, ISendMsgOptions, IReceivedMessage, EnableLogL, IPluginGenerator } from '@rongcloud/engine';
@@ -497,59 +497,6 @@ interface IStatParser {
497
497
  }[];
498
498
  }
499
499
 
500
- declare type ISdpSemantics = 'plan-b' | 'unified-plan';
501
- interface IOfferInfo {
502
- type: 'offer';
503
- sdp: string;
504
- semantics: ISdpSemantics;
505
- }
506
- declare type OutboundVideoInfo = {
507
- trackId: string;
508
- simulcast: RCStreamType;
509
- resolution: string;
510
- };
511
-
512
- declare enum RCInnerCDNPullKind {
513
- RTMP = "rtmp",
514
- FLV = "flv",
515
- HLS = "hls"
516
- }
517
-
518
- declare enum RCInnerCDNPullIsHttps {
519
- NOT_HTTPS = 0,
520
- HTTPS = 1
521
- }
522
-
523
- declare enum RCKickReason {
524
- /**
525
- * Server 主动踢(掉 Server API 踢出)
526
- */
527
- SERVER_KICK = 1,
528
- /**
529
- * 其他设备登陆后,本端被踢
530
- */
531
- OTHER_KICK = 2
532
- }
533
-
534
- declare enum RCRTCPingResult {
535
- SUCCESS = "Success",
536
- FAIL = "Fail"
537
- }
538
-
539
- /**
540
- * 直播角色
541
- */
542
- declare enum RCRTCLiveRole {
543
- /**
544
- * 主播降级
545
- */
546
- ANCHOR = 1,
547
- /**
548
- * 观众升级
549
- */
550
- AUDIENCE = 2
551
- }
552
-
553
500
  /**
554
501
  * RTC 消息类型常量
555
502
  * @private
@@ -1714,6 +1661,189 @@ declare class RCMediaService {
1714
1661
  }>;
1715
1662
  }
1716
1663
 
1664
+ declare enum RCEncoder {
1665
+ VP8 = "VP8",
1666
+ VP9 = "VP9",
1667
+ H264 = "H264"
1668
+ }
1669
+
1670
+ /**
1671
+ * PC 实例管理类
1672
+ */
1673
+ declare class RCRTCPeerConnection extends EventEmitter {
1674
+ /**
1675
+ * peerConnection 对应名称
1676
+ */
1677
+ private readonly _pcName;
1678
+ /**
1679
+ * _reTryExchange 方法
1680
+ */
1681
+ private readonly _reTryExchange;
1682
+ /**
1683
+ * 当前用户 id
1684
+ */
1685
+ private readonly _currentUserId;
1686
+ /**
1687
+ * 北极星上传实例
1688
+ */
1689
+ private readonly _polarisReport?;
1690
+ private readonly onTrackTrouble?;
1691
+ /**
1692
+ * store 实例
1693
+ */
1694
+ private readonly _store?;
1695
+ /**
1696
+ * 是否是房间内观众
1697
+ */
1698
+ private readonly _isRoomAudience;
1699
+ protected readonly _initOptions?: IRCRTCInitOptions | undefined;
1700
+ static __INNER_EVENT_TRACK_READY__: string;
1701
+ private readonly senderAndReciveSize;
1702
+ private readonly _rtcPeerConn;
1703
+ private readonly _sdpStrategy;
1704
+ reportParser: IStatParser | null;
1705
+ private pubLocalTracks;
1706
+ private _reTryExchangeTimer;
1707
+ private _reportStatsTimer;
1708
+ private _reportR3R4ToPolarisTimer;
1709
+ private _isDestroyed;
1710
+ private _reportStatsData?;
1711
+ private _originReportStatsData?;
1712
+ private _logger;
1713
+ constructor(
1714
+ /**
1715
+ * peerConnection 对应名称
1716
+ */
1717
+ _pcName: string,
1718
+ /**
1719
+ * _reTryExchange 方法
1720
+ */
1721
+ _reTryExchange: Function,
1722
+ /**
1723
+ * 当前用户 id
1724
+ */
1725
+ _currentUserId: string,
1726
+ /**
1727
+ * 北极星上传实例
1728
+ */
1729
+ _polarisReport?: PolarisHttpReporter | undefined, onTrackTrouble?: Function | undefined,
1730
+ /**
1731
+ * store 实例
1732
+ */
1733
+ _store?: ReadableStore | undefined,
1734
+ /**
1735
+ * 是否是房间内观众
1736
+ */
1737
+ _isRoomAudience?: boolean, _initOptions?: IRCRTCInitOptions | undefined);
1738
+ getName(): string;
1739
+ getLocalTracks(): RCLocalTrack[];
1740
+ private _onConnectionStateChange;
1741
+ private startAutoExecute;
1742
+ private stopAutoExecute;
1743
+ private _onICEConnectionStateChange;
1744
+ private _onTrackReady;
1745
+ /**
1746
+ * 它设置对等连接的比特率。
1747
+ * @deprecated use RCLocalTrack.setBitrate instead of setBitrate
1748
+ */
1749
+ setBitrate(max: number, min: number, start?: number): Promise<void>;
1750
+ /**
1751
+ * `createOffer` 是一个创建报价并记录报价 SDP 和 SDP 语义的函数
1752
+ * @param {boolean} iceRestart - 布尔值
1753
+ * @returns 具有两个属性的对象:
1754
+ * - sdp:SDP 字符串
1755
+ * - 语义:SDP 语义
1756
+ */
1757
+ createOffer(iceRestart: boolean): Promise<IOfferInfo>;
1758
+ setRemoteAnswer(answer: string): Promise<RCRTCCode>;
1759
+ getLocalTrack(trackId: string): RCLocalTrack | null;
1760
+ /**
1761
+ * 它将本地轨道添加到对等连接。
1762
+ * @param {RCLocalTrack} track - 要添加的本地轨道。
1763
+ */
1764
+ addLocalTrack(track: RCLocalTrack): void;
1765
+ /**
1766
+ * 按 ID 删除本地轨道
1767
+ * @param {string} trackId - 要移除的轨道的 ID。
1768
+ * @returns 正在删除的轨道。
1769
+ */
1770
+ removeLocalTrackById(trackId: string): void;
1771
+ /**
1772
+ * 它会删除所有本地Track。
1773
+ */
1774
+ removeAllLocalTrack(): void;
1775
+ /**
1776
+ * 从对等连接中删除本地轨道。
1777
+ * @param {RCLocalTrack} track - 要删除的本地轨道。
1778
+ */
1779
+ removeLocalTrack(track: RCLocalTrack): void;
1780
+ private _updateRecvTransceiverMap;
1781
+ updateSubRemoteTracks(remoteTracks: RCRemoteTrack[]): void;
1782
+ /**
1783
+ * 获取当前已发布视频流信息
1784
+ */
1785
+ getOutboundVideoInfo(): OutboundVideoInfo[];
1786
+ private _onLocalTrackMuted;
1787
+ private _onLocalTrackDestroied;
1788
+ private _reportListener;
1789
+ /**
1790
+ * 注册连接数据监控,开启质量数据上报定时器
1791
+ * @param listener
1792
+ */
1793
+ registerReportListener(listener: IRCRTCReportListener | null): void;
1794
+ private _createRCRTCStateReport;
1795
+ /**
1796
+ * 获取 peerConnection stats 数据并格式化
1797
+ * @returns 返回格式化后的数据
1798
+ */
1799
+ private _getStatsData;
1800
+ getAudioLevelReportData(gap?: number): Promise<{
1801
+ trackId: string;
1802
+ audioLevel: number | null;
1803
+ }[] | undefined>;
1804
+ /**
1805
+ * 通知用户质量数据、peerConnection 北极星数据上报
1806
+ * @todo
1807
+ */
1808
+ private _reportHandle;
1809
+ /**
1810
+ * 获取合流音源信息
1811
+ */
1812
+ private _getLiveAudioState;
1813
+ /**
1814
+ * 获取缓存的本地质量数据
1815
+ */
1816
+ _getCacheStatsData(): Promise<IInnerRCRTCStateReport | undefined>;
1817
+ /**
1818
+ * 北极星上报 R3、R4 数据
1819
+ */
1820
+ private _sendR3R4Data;
1821
+ /**
1822
+ * 2s 给北极星上报一次 R3、R4
1823
+ */
1824
+ __reportR3R4ToPolaris(): Promise<void>;
1825
+ getRTCPeerConn(): RTCPeerConnection;
1826
+ /**
1827
+ * 它返回一个 RTCRtpCodecCapability 对象数组,第一个元素是与传入的编码器类型匹配的元素
1828
+ * @param {RCEncoder} encoder - RCEncoder.H264
1829
+ * @returns 正在返回 RTCRtpCodecCapability[] 数组。
1830
+ */
1831
+ private getCapabilitiesCodes;
1832
+ /**
1833
+ * 它为视频流设置编码器首选项。
1834
+ * @param {RCEncoder} [encoder] - RC编码器
1835
+ */
1836
+ setEncoderPreferences(encoder?: RCEncoder): Promise<void>;
1837
+ destroy(): void;
1838
+ clearReTryExchangeTimer(): void;
1839
+ isDestroyed(): boolean;
1840
+ /**
1841
+ * 视频不可使用的收集器
1842
+ */
1843
+ private troubleTracksCollection;
1844
+ private setTroubleTrack;
1845
+ }
1846
+
1717
1847
  /**
1718
1848
  * 直播间类型
1719
1849
  */
@@ -1729,15 +1859,108 @@ declare enum RCLivingType {
1729
1859
  }
1730
1860
 
1731
1861
  declare enum RCCommandKind {
1732
- Unknow = 0,
1733
- Publish = 1,
1734
- UnPublish = 2,
1735
- JoinRoom = 3,
1736
- LeaveRoom = 4,
1737
- UpdateSubscribeTask = 5,
1738
- SubscribedTask = 6,
1739
- UnSubscribedTask = 7,
1740
- AsyncCommand = "AsyncCommand"
1862
+ /**
1863
+ * 发信令取消加入房间之前的资源
1864
+ */
1865
+ UNPUBLISH_PREV = "UnpublishPrevCommand",
1866
+ /**
1867
+ * 拉取房间内数据
1868
+ */
1869
+ PULL_RTCROOM_STATUS = "PullRTCRoomStatusCommand",
1870
+ /**
1871
+ * 加入房间
1872
+ */
1873
+ JOINROOM = "JoinRoomCommand",
1874
+ /**
1875
+ * 解析远端资源数据
1876
+ */
1877
+ PARSE_REMOTERES = "ParseRemoteResCommand",
1878
+ /**
1879
+ * 解析远端人员数据
1880
+ */
1881
+ PARSE_USERSTATE = "ParseUserStateCommand",
1882
+ /**
1883
+ * 本端 track 禁用/启用
1884
+ */
1885
+ LOCAL_TRACK_MUTE = "LocalTrackMuteCommand",
1886
+ /**
1887
+ * 发布资源
1888
+ */
1889
+ PUBLISH = "PublishCommand",
1890
+ /**
1891
+ * 恢复 ice 连接
1892
+ */
1893
+ RETRY_EXCHANGE = "RetryExchangeCommand",
1894
+ /**
1895
+ * 取消发布
1896
+ */
1897
+ UNPUBLISH = "UnpublishCommand",
1898
+ /**
1899
+ * 订阅
1900
+ */
1901
+ SUBSCRIBE = "SubscribeCommand",
1902
+ /**
1903
+ * 异步订阅、取消订阅、全量订阅
1904
+ */
1905
+ ASYNC_COMMAND = "AsyncCommand",
1906
+ /**
1907
+ * 取消订阅
1908
+ */
1909
+ UNSUBSCRIBE = "UnsubscribeCommand",
1910
+ /**
1911
+ * 全量订阅
1912
+ */
1913
+ UPDATE_SUBSCRIBE_LIST = "UpdateSubscribeListCommand",
1914
+ /**
1915
+ * im 重连房间内人员、资源处理
1916
+ */
1917
+ ON_SIGNAL_RECONNECTED = "OnSignalReconnectedCommand",
1918
+ /**
1919
+ * 退出副房间
1920
+ */
1921
+ LEAVE_OTHER_ROOM = "LeaveOtherRoomCommand",
1922
+ /**
1923
+ * 主播、观众切换身份
1924
+ */
1925
+ RTC_IDENTITY_CHANGE = "RTCIdentityChangeCommand",
1926
+ /**
1927
+ * 开/关 CDN
1928
+ */
1929
+ ENABLE_INNER_CDN = "EnableInnerCDNCommand",
1930
+ /**
1931
+ * 携带副房间信息重新发 /exchange 请求
1932
+ */
1933
+ EXCHANGE_WITH_PUSH_OTHER_ROOM = "ExchangeWithPushOtherRoomCommand",
1934
+ /**
1935
+ * 发送 MCU 请求
1936
+ */
1937
+ MCUCONFIG_FLUSH = "MCUConfigFlushCommand",
1938
+ UNKNOWN = "Unknown"
1939
+ }
1940
+
1941
+ declare enum CommandPriority {
1942
+ LOW = 0,
1943
+ NORMAL = 1,
1944
+ HIGH = 2
1945
+ }
1946
+ /**
1947
+ * 命令基类
1948
+ */
1949
+ declare abstract class BaseCommand<RES, STORE = Store> {
1950
+ /**
1951
+ * 执行指令
1952
+ * @param store
1953
+ */
1954
+ abstract execute(store: STORE, invoker: BaseInvoker<STORE>): Promise<RES>;
1955
+ /**
1956
+ * 获取指令优先级,必要时可 override 此函数
1957
+ */
1958
+ get priority(): CommandPriority;
1959
+ /**
1960
+ * 它返回命令的种类。
1961
+ * @returns 命令的种类。
1962
+ */
1963
+ get kind(): RCCommandKind;
1741
1964
  }
1742
1965
 
1743
1966
  declare class RCRTCPeerCManager {
@@ -1761,6 +1984,14 @@ declare class RCRTCPeerCManager {
1761
1984
  * 北极星上报模块
1762
1985
  */
1763
1986
  private readonly _polarisReport?;
1987
+ /**
1988
+ * 是否是房间内观众
1989
+ */
1990
+ private readonly _isRoomAudience?;
1991
+ /**
1992
+ * context
1993
+ */
1994
+ protected readonly _initOptions?: IRCRTCInitOptions | undefined;
1764
1995
  /**
1765
1996
  * 存储创建的所有 peerC,key 为 pcName,/exchange 请求中 request header 中的 Peer-Connection-Id 值
1766
1997
  */
@@ -1786,7 +2017,15 @@ declare class RCRTCPeerCManager {
1786
2017
  /**
1787
2018
  * 北极星上报模块
1788
2019
  */
1789
- _polarisReport?: PolarisHttpReporter | undefined);
2020
+ _polarisReport?: PolarisHttpReporter | undefined,
2021
+ /**
2022
+ * 是否是房间内观众
2023
+ */
2024
+ _isRoomAudience?: boolean | undefined,
2025
+ /**
2026
+ * context
2027
+ */
2028
+ _initOptions?: IRCRTCInitOptions | undefined);
1790
2029
  get useMutilPeerC(): boolean;
1791
2030
  /**
1792
2031
  * 根据 track 判断是否为上行
@@ -1897,112 +2136,15 @@ declare class RCRTCPeerCManager {
1897
2136
  * 销毁资源
1898
2137
  */
1899
2138
  clear(): void;
1900
- }
1901
-
1902
- declare abstract class ReadableStore {
1903
- readonly context: RTCContext;
1904
- readonly service: RCMediaService;
1905
- readonly peerMgr: RCRTCPeerCManager;
1906
- readonly roomId: string;
1907
- readonly crtUserId: string;
1908
- readonly roomMode: RTCMode;
1909
- readonly polarisReport: PolarisHttpReporter;
1910
- readonly isUpgrade?: boolean | undefined;
1911
- readonly isMainRoom?: boolean | undefined;
1912
- /**
1913
- * 房间资源数据
1914
- */
1915
- protected _roomResources: RoomData;
1916
- /**
1917
- * 远端 track
1918
- */
1919
- protected _remoteTracks: {
1920
- [trackId: string]: RCRemoteAudioTrack | RCRemoteVideoTrack;
1921
- };
1922
- /**
1923
- * 已订阅参数
1924
- */
1925
- protected _subscribedList: ISubscribeAttr[];
1926
- protected _collectSubscribeList: ISubscribeAttr[];
1927
- /**
1928
- * 与 MediaServer 交互需要的 token 信息
1929
- */
1930
- protected _token: string;
1931
- /**
1932
- * 每次加入房间后都会改变
1933
- */
1934
- protected _sessionId: string;
1935
- /**
1936
- * cdn_uris 信令扩散数据
1937
- */
1938
- protected _CDNUris: ICDNUris | null;
1939
- protected _CDNEnable: boolean;
1940
- protected _destroyed: boolean;
1941
- protected _roomStatusVersion: number;
1942
- constructor(context: RTCContext, service: RCMediaService, peerMgr: RCRTCPeerCManager, roomId: string, crtUserId: string, roomMode: RTCMode, polarisReport: PolarisHttpReporter, isUpgrade?: boolean | undefined, isMainRoom?: boolean | undefined);
1943
- get useMutilPeerC(): boolean;
1944
- getResourcesByUserId(userId: string): IPublishedResource[] | undefined;
1945
- getRemoteTrack(trackId: string): RCRemoteTrack | undefined;
1946
- getRemoteTracksByUserId(userId: string): RCRemoteTrack[];
1947
- getRemoteTracks(): {
1948
- [trackId: string]: RCRemoteAudioTrack | RCRemoteVideoTrack;
1949
- };
1950
- getSessionId(): string;
1951
- getAllUserIds(): string[];
1952
- getRemoteUserIds(): string[];
1953
- getSubscribedList(): ISubscribeAttr[];
1954
- getCollectSubscribeList(): ISubscribeAttr[];
1955
- getPublishedResourceByTrackId(trackId: string): IPublishedResource | undefined;
1956
- getToken(): string;
1957
- getLocalTrack(trackId: string): RCLocalTrack | null;
1958
- getLocalTracks(): RCLocalTrack[];
1959
- getTrackState(trackId: string): 0 | 1;
1960
- getCDNEnable(): boolean;
1961
- getCDNUris(): ICDNUris | null;
1962
- getRoomStatusVersion(): number;
1963
- }
1964
- declare class Store extends ReadableStore {
1965
- private _initRemoteTracks;
1966
- initWithRoomData(data: IJoinRTCRoomData, traceId: string): void;
1967
- assignRoomData(data: RoomData): void;
1968
- setResourcesByUserId(userId: string, arr: IPublishedResource[]): void;
1969
- removeRemoteTrack(trackId: string): void;
1970
- removeResourcesByUserId(userId: string): void;
1971
- addRemoteTrack(track: RCRemoteTrack): void;
1972
- removeRemoteTracks(): void;
1973
- setCDNEnabel(bool: boolean): void;
1974
- setCDNUris(uris: ICDNUris | null): void;
1975
- resetSubscribedList(subscribeList: ISubscribeAttr[]): void;
1976
- resetCollectSubscribeList(collectSubscribeList: ISubscribeAttr[]): void;
1977
- setRoomStatusVersion(version: number): void;
1978
- }
1979
-
1980
- declare enum CommandPriority {
1981
- LOW = 0,
1982
- NORMAL = 1,
1983
- HIGH = 2
1984
- }
1985
- /**
1986
- * 命令基类
1987
- */
1988
- declare abstract class BaseCommand<RES, STORE = Store> {
1989
- /**
1990
- * 执行指令
1991
- * @param store
1992
- */
1993
- abstract execute(store: STORE, invoker: BaseInvoker<STORE>): Promise<RES>;
1994
- /**
1995
- * 获取指令优先级,必要时可 override 此函数
1996
- */
1997
- get priority(): CommandPriority;
1998
2139
  /**
1999
- * 它返回命令的种类。
2000
- * @returns 命令的种类。
2140
+ * 需从 store 中获取 peerConnection 质量数据中的 resourceId
2001
2141
  */
2002
- get kind(): RCCommandKind;
2142
+ private _store;
2143
+ setStore(store: ReadableStore): void;
2003
2144
  }
2004
2145
 
2005
2146
  declare class BaseInvoker<STORE> {
2147
+ private context;
2006
2148
  /**
2007
2149
  * 内存数据管理实例
2008
2150
  */
@@ -2011,7 +2153,7 @@ declare class BaseInvoker<STORE> {
2011
2153
  * 命令终止时返回的错误码定义
2012
2154
  */
2013
2155
  private abortCode;
2014
- constructor(
2156
+ constructor(context: RTCContext,
2015
2157
  /**
2016
2158
  * 内存数据管理实例
2017
2159
  */
@@ -2027,7 +2169,7 @@ declare class BaseInvoker<STORE> {
2027
2169
  push<R>(command: BaseCommand<R, STORE>): Promise<R>;
2028
2170
  private _isDestroyed;
2029
2171
  /**
2030
- * 查找出 RCCommandKind.AsyncCommand 类型的 Command,并将其从队列中删除
2172
+ * 查找出 RCCommandKind.ASYNC_COMMAND 类型的 Command,并将其从队列中删除
2031
2173
  * 并使用最新的一次 Command 接管它的 resolve & reject
2032
2174
  * @param resolve
2033
2175
  * @param reject
@@ -2277,6 +2419,7 @@ declare abstract class RCAbstractRoom extends EventEmitter {
2277
2419
  * 是否使用多 peerConnection
2278
2420
  */
2279
2421
  _useMutilPeerC?: boolean | undefined, _clientSessionId?: string, signalRetryTime?: number);
2422
+ private _pullRTCRoomStatus;
2280
2423
  /**
2281
2424
  * 拉取房间数据
2282
2425
  * @param roomId 房间 id
@@ -2713,6 +2856,8 @@ declare class RCAudienceLivingRoom {
2713
2856
  private _peerCManager;
2714
2857
  private _isPulling;
2715
2858
  private _pullTime;
2859
+ private _store;
2860
+ private _crtUserId;
2716
2861
  constructor(_context: RTCContext, _runtime: IRuntime, _initOptions: IRCRTCInitOptions, _roomId: string, _joinResData: {
2717
2862
  token: string;
2718
2863
  kvEntries: IServerRTCRoomEntry[];
@@ -2927,231 +3072,211 @@ declare enum PolarisRole {
2927
3072
  declare class PolarisReporter {
2928
3073
  private readonly _context;
2929
3074
  private readonly _runtime;
2930
- private readonly _roomId;
2931
- private readonly _crtRTCRoom;
2932
- private readonly _userRole;
2933
- constructor(_context: RTCContext, _runtime: IRuntime, _roomId: string, _crtRTCRoom: RCAbstractRoom | RCAudienceLivingRoom, _userRole?: PolarisRole);
2934
- private _send;
2935
- private _getClientID;
2936
- /**
2937
- * 小流需去掉 _tiny,小流 resourceId 为 userId_tag_mediaType_tiny
2938
- */
2939
- private _getRealResourceId;
2940
- /**
2941
- * 生成北极星上报的 trackId
2942
- * @param resourceId userId_11_1_tiny 改为 userId_11_tiny_video
2943
- */
2944
- private _getPolarisTrackId;
2945
- sendR3R4Data(data: IInnerRCRTCStateReport): Promise<RCSendCode>;
2946
- /**
2947
- * 加入房间
2948
- */
2949
- sendR1(): void;
2950
- /**
2951
- * RTC 和 LIVE 发布、取消发布
2952
- * RTC 订阅、取消订阅
2953
- */
2954
- sendR2(action: string, status: string, trackIds: string[]): void;
2955
- }
2956
-
2957
- declare class PolarisHttpReporter {
2958
- private readonly _context;
2959
- private readonly _runtime;
2960
- private readonly _roomId;
2961
- private readonly _crtRTCRoom;
2962
- private readonly _userRole;
2963
- protected _polarisSignalReporter: PolarisReporter | null;
2964
- private _useHttp;
2965
- static logServer: string | undefined;
2966
- static dc: string | undefined;
2967
- constructor(_context: RTCContext, _runtime: IRuntime, _roomId: string, _crtRTCRoom: RCAbstractRoom | RCAudienceLivingRoom, _userRole?: PolarisRole);
2968
- private _send;
2969
- private _refetchNaviInfo;
2970
- /**
2971
- * 小流需去掉 _tiny,小流 resourceId 为 userId_tag_mediaType_tiny
2972
- */
2973
- private _getRealResourceId;
2974
- /**
2975
- * 生成北极星上报的 trackId
2976
- * @param resourceId userId_11_1_tiny 改为 userId_11_tiny_video
2977
- */
2978
- private _getPolarisTrackId;
2979
- private _formatReportBaseData;
2980
- private _formatReportData;
2981
- private _formatR1Data;
2982
- private _formatR2Data;
2983
- private _formatR3R4Data;
2984
- sendR3R4Data(data: IInnerRCRTCStateReport): Promise<RCSendCode>;
2985
- /**
2986
- * 加入房间
2987
- */
2988
- sendR1(): Promise<void>;
2989
- /**
2990
- * RTC 和 LIVE 发布、取消发布
2991
- * RTC 订阅、取消订阅
2992
- */
2993
- sendR2(action: string, status: string, trackIds: string[]): Promise<void>;
2994
- }
2995
-
2996
- declare enum RCEncoder {
2997
- VP8 = "VP8",
2998
- VP9 = "VP9",
2999
- H264 = "H264"
3000
- }
3001
-
3002
- /**
3003
- * PC 实例管理类
3004
- */
3005
- declare class RCRTCPeerConnection extends EventEmitter {
3006
- /**
3007
- * peerConnection 对应名称
3008
- */
3009
- private readonly _pcName;
3010
- /**
3011
- * _reTryExchange 方法
3012
- */
3013
- private readonly _reTryExchange;
3014
- /**
3015
- * 当前用户 id
3016
- */
3017
- private readonly _currentUserId;
3018
- /**
3019
- * 北极星上传实例
3020
- */
3021
- private readonly _polarisReport?;
3022
- private readonly onTrackTrouble?;
3023
- static __INNER_EVENT_TRACK_READY__: string;
3024
- private readonly _rtcPeerConn;
3025
- private readonly _sdpStrategy;
3026
- reportParser: IStatParser | null;
3027
- private pubLocalTracks;
3028
- private _reTryExchangeTimer;
3029
- private _reportStatsTimer;
3030
- private _reportR3R4ToPolarisTimer;
3031
- private _isDestroyed;
3032
- private _reportStatsData?;
3033
- private _originReportStatsData?;
3034
- private _logger;
3035
- constructor(
3075
+ private readonly _roomId;
3076
+ private readonly _crtRTCRoom;
3077
+ private readonly _userRole;
3078
+ constructor(_context: RTCContext, _runtime: IRuntime, _roomId: string, _crtRTCRoom: RCAbstractRoom | RCAudienceLivingRoom, _userRole?: PolarisRole);
3079
+ private _send;
3080
+ private _getClientID;
3036
3081
  /**
3037
- * peerConnection 对应名称
3038
- */
3039
- _pcName: string,
3082
+ * 小流需去掉 _tiny,小流 resourceId 为 userId_tag_mediaType_tiny
3083
+ */
3084
+ private _getRealResourceId;
3040
3085
  /**
3041
- * _reTryExchange 方法
3086
+ * 生成北极星上报的 trackId
3087
+ * @param resourceId userId_11_1_tiny 改为 userId_11_tiny_video
3042
3088
  */
3043
- _reTryExchange: Function,
3089
+ private _getPolarisTrackId;
3090
+ sendR3R4Data(data: IInnerRCRTCStateReport): Promise<RCSendCode>;
3044
3091
  /**
3045
- * 当前用户 id
3092
+ * 加入房间
3046
3093
  */
3047
- _currentUserId: string,
3094
+ sendR1(): void;
3048
3095
  /**
3049
- * 北极星上传实例
3096
+ * RTC 和 LIVE 发布、取消发布
3097
+ * RTC 订阅、取消订阅
3050
3098
  */
3051
- _polarisReport?: PolarisHttpReporter | undefined, onTrackTrouble?: Function | undefined);
3052
- getName(): string;
3053
- getLocalTracks(): RCLocalTrack[];
3054
- private _onConnectionStateChange;
3055
- private startAutoExecute;
3056
- private stopAutoExecute;
3057
- private _onICEConnectionStateChange;
3058
- private _onTrackReady;
3099
+ sendR2(action: string, status: string, trackIds: string[]): void;
3100
+ }
3101
+
3102
+ declare class PolarisHttpReporter {
3103
+ private readonly _context;
3104
+ private readonly _runtime;
3105
+ private readonly _roomId;
3106
+ private readonly _crtRTCRoom;
3107
+ private readonly _userRole;
3108
+ protected _polarisSignalReporter: PolarisReporter | null;
3109
+ private _useHttp;
3110
+ static logServer: string | undefined;
3111
+ static dc: string | undefined;
3112
+ constructor(_context: RTCContext, _runtime: IRuntime, _roomId: string, _crtRTCRoom: RCAbstractRoom | RCAudienceLivingRoom, _userRole?: PolarisRole);
3113
+ private _send;
3114
+ private _refetchNaviInfo;
3059
3115
  /**
3060
- * 它设置对等连接的比特率。
3061
- * @deprecated use RCLocalTrack.setBitrate instead of setBitrate
3116
+ * 小流需去掉 _tiny,小流 resourceId 为 userId_tag_mediaType_tiny
3062
3117
  */
3063
- setBitrate(max: number, min: number, start?: number): Promise<void>;
3118
+ private _getRealResourceId;
3064
3119
  /**
3065
- * `createOffer` 是一个创建报价并记录报价 SDP 和 SDP 语义的函数
3066
- * @param {boolean} iceRestart - 布尔值
3067
- * @returns 具有两个属性的对象:
3068
- * - sdp:SDP 字符串
3069
- * - 语义:SDP 语义
3120
+ * 生成北极星上报的 trackId
3121
+ * @param resourceId userId_11_1_tiny 改为 userId_11_tiny_video
3070
3122
  */
3071
- createOffer(iceRestart: boolean): Promise<IOfferInfo>;
3072
- setRemoteAnswer(answer: string): Promise<RCRTCCode>;
3073
- getLocalTrack(trackId: string): RCLocalTrack | null;
3123
+ private _getPolarisTrackId;
3124
+ private _formatReportBaseData;
3125
+ private _formatReportData;
3126
+ private _formatR1Data;
3127
+ private _formatR2Data;
3128
+ private _formatR3R4Data;
3129
+ sendR3R4Data(data: IInnerRCRTCStateReport): Promise<RCSendCode>;
3074
3130
  /**
3075
- * 它将本地轨道添加到对等连接。
3076
- * @param {RCLocalTrack} track - 要添加的本地轨道。
3131
+ * 加入房间
3077
3132
  */
3078
- addLocalTrack(track: RCLocalTrack): void;
3133
+ sendR1(): Promise<void>;
3079
3134
  /**
3080
- * ID 删除本地轨道
3081
- * @param {string} trackId - 要移除的轨道的 ID。
3082
- * @returns 正在删除的轨道。
3135
+ * RTC LIVE 发布、取消发布
3136
+ * RTC 订阅、取消订阅
3083
3137
  */
3084
- removeLocalTrackById(trackId: string): void;
3138
+ sendR2(action: string, status: string, trackIds: string[]): Promise<void>;
3139
+ }
3140
+
3141
+ declare abstract class ReadableStore {
3142
+ readonly context: RTCContext;
3143
+ readonly service: RCMediaService;
3144
+ readonly peerMgr: RCRTCPeerCManager;
3145
+ readonly roomId: string;
3146
+ readonly crtUserId: string;
3147
+ readonly roomMode?: RTCMode | undefined;
3148
+ readonly polarisReport?: PolarisHttpReporter | undefined;
3149
+ readonly isUpgrade?: boolean | undefined;
3150
+ readonly isMainRoom?: boolean | undefined;
3085
3151
  /**
3086
- * 它会删除所有本地Track。
3152
+ * 房间资源数据
3087
3153
  */
3088
- removeAllLocalTrack(): void;
3154
+ protected _roomResources: RoomData;
3089
3155
  /**
3090
- * 从对等连接中删除本地轨道。
3091
- * @param {RCLocalTrack} track - 要删除的本地轨道。
3156
+ * 远端 track
3092
3157
  */
3093
- removeLocalTrack(track: RCLocalTrack): void;
3094
- private _updateRecvTransceiverMap;
3095
- updateSubRemoteTracks(remoteTracks: RCRemoteTrack[]): void;
3158
+ protected _remoteTracks: {
3159
+ [trackId: string]: RCRemoteAudioTrack | RCRemoteVideoTrack;
3160
+ };
3096
3161
  /**
3097
- * 获取当前已发布视频流信息
3162
+ * 已订阅参数
3098
3163
  */
3099
- getOutboundVideoInfo(): OutboundVideoInfo[];
3100
- private _onLocalTrackMuted;
3101
- private _onLocalTrackDestroied;
3102
- private _reportListener;
3164
+ protected _subscribedList: ISubscribeAttr[];
3165
+ protected _collectSubscribeList: ISubscribeAttr[];
3103
3166
  /**
3104
- * 注册连接数据监控,开启质量数据上报定时器
3105
- * @param listener
3167
+ * 与 MediaServer 交互需要的 token 信息
3106
3168
  */
3107
- registerReportListener(listener: IRCRTCReportListener | null): void;
3108
- private _createRCRTCStateReport;
3169
+ protected _token: string;
3109
3170
  /**
3110
- * 获取 peerConnection stats 数据并格式化
3111
- * @returns 返回格式化后的数据
3171
+ * 每次加入房间后都会改变
3112
3172
  */
3113
- private _getStatsData;
3114
- getAudioLevelReportData(gap?: number): Promise<{
3115
- trackId: string;
3116
- audioLevel: number | null;
3117
- }[] | undefined>;
3173
+ protected _sessionId: string;
3118
3174
  /**
3119
- * 通知用户质量数据、peerConnection 北极星数据上报
3120
- * @todo
3175
+ * cdn_uris 信令扩散数据
3121
3176
  */
3122
- private _reportHandle;
3177
+ protected _CDNUris: ICDNUris | null;
3178
+ protected _CDNEnable: boolean;
3179
+ protected _destroyed: boolean;
3123
3180
  /**
3124
- * 获取缓存的本地质量数据
3181
+ * 存储 ssrc-trackId 的 map
3125
3182
  */
3126
- _getCacheStatsData(): IInnerRCRTCStateReport | null | undefined;
3183
+ protected _trackIdSSRCMap: Map<number, string>;
3184
+ protected _roomStatusVersion: number;
3185
+ constructor(context: RTCContext, service: RCMediaService, peerMgr: RCRTCPeerCManager, roomId: string, crtUserId: string, roomMode?: RTCMode | undefined, polarisReport?: PolarisHttpReporter | undefined, isUpgrade?: boolean | undefined, isMainRoom?: boolean | undefined);
3186
+ get useMutilPeerC(): boolean;
3187
+ getResourcesByUserId(userId: string): IPublishedResource[] | undefined;
3188
+ getRemoteTrack(trackId: string): RCRemoteTrack | undefined;
3189
+ getRemoteTracksByUserId(userId: string): RCRemoteTrack[];
3190
+ getRemoteTracks(): {
3191
+ [trackId: string]: RCRemoteAudioTrack | RCRemoteVideoTrack;
3192
+ };
3193
+ getSessionId(): string;
3194
+ getAllUserIds(): string[];
3195
+ getRemoteUserIds(): string[];
3196
+ getSubscribedList(): ISubscribeAttr[];
3197
+ getCollectSubscribeList(): ISubscribeAttr[];
3198
+ getPublishedResourceByTrackId(trackId: string): IPublishedResource | undefined;
3199
+ getToken(): string;
3200
+ getLocalTrack(trackId: string): RCLocalTrack | null;
3201
+ getLocalTracks(): RCLocalTrack[];
3202
+ getTrackState(trackId: string): 0 | 1;
3203
+ getCDNEnable(): boolean;
3204
+ getCDNUris(): ICDNUris | null;
3205
+ getRoomStatusVersion(): number;
3206
+ getTrackIdBySSRC(ssrc: number): string | undefined;
3207
+ }
3208
+ declare class Store extends ReadableStore {
3127
3209
  /**
3128
- * 北极星上报 R3、R4 数据
3210
+ * 更新房间内 ssrc-trackId 的 map
3129
3211
  */
3130
- private _sendR3R4Data;
3212
+ private _updateTrackIdSSRCMap;
3213
+ setTrackIdSSRCMap(ssrc: number, trackId: string): void;
3214
+ private _initRemoteTracks;
3215
+ initWithRoomData(data: IJoinRTCRoomData, traceId: string): void;
3216
+ assignRoomData(data: RoomData): void;
3217
+ setResourcesByUserId(userId: string, arr: IPublishedResource[]): void;
3218
+ removeRemoteTrack(trackId: string): void;
3219
+ removeResourcesByUserId(userId: string): void;
3220
+ addRemoteTrack(track: RCRemoteTrack): void;
3221
+ removeRemoteTracks(): void;
3222
+ setCDNEnabel(bool: boolean): void;
3223
+ setCDNUris(uris: ICDNUris | null): void;
3224
+ resetSubscribedList(subscribeList: ISubscribeAttr[]): void;
3225
+ resetCollectSubscribeList(collectSubscribeList: ISubscribeAttr[]): void;
3226
+ setRoomStatusVersion(version: number): void;
3227
+ }
3228
+
3229
+ declare type ISdpSemantics = 'plan-b' | 'unified-plan';
3230
+ interface IOfferInfo {
3231
+ type: 'offer';
3232
+ sdp: string;
3233
+ semantics: ISdpSemantics;
3234
+ }
3235
+ declare type OutboundVideoInfo = {
3236
+ trackId: string;
3237
+ simulcast: RCStreamType;
3238
+ resolution: string;
3239
+ };
3240
+
3241
+ declare enum RCInnerCDNPullKind {
3242
+ RTMP = "rtmp",
3243
+ FLV = "flv",
3244
+ HLS = "hls"
3245
+ }
3246
+
3247
+ declare enum RCInnerCDNPullIsHttps {
3248
+ NOT_HTTPS = 0,
3249
+ HTTPS = 1
3250
+ }
3251
+
3252
+ declare enum RCKickReason {
3131
3253
  /**
3132
- * 2s 给北极星上报一次 R3、R4
3254
+ * Server 主动踢(掉 Server API 踢出)
3133
3255
  */
3134
- __reportR3R4ToPolaris(): Promise<void>;
3135
- getRTCPeerConn(): RTCPeerConnection;
3256
+ SERVER_KICK = 1,
3136
3257
  /**
3137
- * 它返回一个 RTCRtpCodecCapability 对象数组,第一个元素是与传入的编码器类型匹配的元素
3138
- * @param {RCEncoder} encoder - RCEncoder.H264
3139
- * @returns 正在返回 RTCRtpCodecCapability[] 数组。
3258
+ * 其他设备登陆后,本端被踢
3140
3259
  */
3141
- private getCapabilitiesCodes;
3260
+ OTHER_KICK = 2
3261
+ }
3262
+
3263
+ declare enum RCRTCPingResult {
3264
+ SUCCESS = "Success",
3265
+ FAIL = "Fail"
3266
+ }
3267
+
3268
+ /**
3269
+ * 直播角色
3270
+ */
3271
+ declare enum RCRTCLiveRole {
3142
3272
  /**
3143
- * 它为视频流设置编码器首选项。
3144
- * @param {RCEncoder} [encoder] - RC编码器
3273
+ * 主播降级
3145
3274
  */
3146
- setEncoderPreferences(encoder?: RCEncoder): Promise<void>;
3147
- destroy(): void;
3148
- clearReTryExchangeTimer(): void;
3149
- isDestroyed(): boolean;
3275
+ ANCHOR = 1,
3150
3276
  /**
3151
- * 视频不可使用的收集器
3277
+ * 观众升级
3152
3278
  */
3153
- private troubleTracksCollection;
3154
- private setTroubleTrack;
3279
+ AUDIENCE = 2
3155
3280
  }
3156
3281
 
3157
3282
  /**
@@ -3383,6 +3508,7 @@ interface IInnerIcePair extends IRCCandidatePairStat {
3383
3508
  * 上、下行总丢包率
3384
3509
  */
3385
3510
  totalPacketsLost?: number;
3511
+ [key: string]: any;
3386
3512
  }
3387
3513
  /**
3388
3514
  * send track 所有字段
@@ -3473,6 +3599,23 @@ interface IRCRTCStateReport {
3473
3599
  */
3474
3600
  receivers: IRCTrackStat[];
3475
3601
  }
3602
+ /**
3603
+ * 合流音源数据
3604
+ */
3605
+ interface ILiveAudioState {
3606
+ /**
3607
+ * 用户 id
3608
+ */
3609
+ userId: string;
3610
+ /**
3611
+ * 资源 trackId
3612
+ */
3613
+ trackId: string;
3614
+ /**
3615
+ * 音量 0-100
3616
+ */
3617
+ audioLevel: number;
3618
+ }
3476
3619
  /**
3477
3620
  * http3 北极星上报基础数据
3478
3621
  */
@@ -3710,6 +3853,10 @@ interface IRCRTCReportListener {
3710
3853
  * @deprecated
3711
3854
  */
3712
3855
  onConnectionStateChange?(state: RTCPeerConnectionState, pcName?: string): void;
3856
+ /**
3857
+ * 上报合流音源数据
3858
+ */
3859
+ onReportLiveAudioStates?(data: ILiveAudioState[]): void;
3713
3860
  }
3714
3861
  interface IRCRTCTrackEventListener {
3715
3862
  /**
@@ -3861,6 +4008,10 @@ interface IRCRTCInitOptions {
3861
4008
  workletWasm?: string;
3862
4009
  isOpen?: boolean;
3863
4010
  };
4011
+ /**
4012
+ * 大会议场景下的北极星节流阀
4013
+ */
4014
+ polarisThrottle?: boolean;
3864
4015
  }
3865
4016
  interface ICameraVideoProfile extends IVideoProfile {
3866
4017
  cameraId?: string;
@@ -4425,7 +4576,7 @@ declare class RCRTCRoom extends RCAbstractRoom {
4425
4576
  * @param {boolean} [useMutilPeerC] - 是否使用多个 peerConnections
4426
4577
  * @param {string} [_clientSessionId] - 当前房间的clientSessionId,用于区分当前房间和其他房间。
4427
4578
  * @param {RTCMode} roomType - RTCMode = RTCMode.RTC,
4428
- * @param {number} signalRetryTime - 重新连接信令服务器的时间间隔。
4579
+ * @param {number} signalRetryTime - 连接信令服务器的超时时。
4429
4580
  */
4430
4581
  constructor(context: RTCContext, runtime: IRuntime, roomId: string, service: RCMediaService, initOptions: IRCRTCInitOptions, isUpgrade?: boolean, isMainRoom?: boolean,
4431
4582
  /**
@@ -4457,6 +4608,10 @@ declare class RCAudienceClient {
4457
4608
  * 已订阅的远端流
4458
4609
  */
4459
4610
  private readonly _subTracks;
4611
+ /**
4612
+ * 订阅的远端资源
4613
+ */
4614
+ private _subscribedList;
4460
4615
  /**
4461
4616
  * 客户端传入的数据上报事件
4462
4617
  */
@@ -4470,6 +4625,8 @@ declare class RCAudienceClient {
4470
4625
  */
4471
4626
  private _peerCManager;
4472
4627
  private readonly _clientSessionId;
4628
+ private _store;
4629
+ private _crtUserId;
4473
4630
  constructor(_context: RTCContext, runtime: IRuntime, _initOption: IRCRTCInitOptions,
4474
4631
  /**
4475
4632
  * 是否使用多 peerConnection
@@ -4494,6 +4651,10 @@ declare class RCAudienceClient {
4494
4651
  tracks: RCRemoteTrack[];
4495
4652
  }>;
4496
4653
  private __subscribe;
4654
+ /**
4655
+ * 处理订阅流的 ssrc 和 trackId map
4656
+ */
4657
+ private _updateTrackIdSSRCMap;
4497
4658
  /**
4498
4659
  * 取消订阅主播资源
4499
4660
  * @param liveUrl
@@ -4670,7 +4831,7 @@ declare class RCRTCClient extends RCMediaStreamCapture {
4670
4831
  * @param {IRTCUserData} [outerUserDatas] - 加入房间的用户的用户数据。
4671
4832
  * @param {boolean} [useMutilPeerC] - 是否使用多点连接,默认为false,即使用单点连接。
4672
4833
  * @param {RTCMode} roomType - RTCMode = RTCMode.RTC,
4673
- * @param {number} signalRetryTime - 重新连接信令服务器的时间间隔。
4834
+ * @param {number} signalRetryTime - 连接信令服务器的超时时间。
4674
4835
  */
4675
4836
  joinRTCRoom(roomId: string, joinType?: RTCJoinType, outerUserDatas?: IRTCUserData, useMutilPeerC?: boolean, roomType?: RTCMode, signalRetryTime?: number): Promise<{
4676
4837
  room?: RCRTCRoom;
@@ -4826,4 +4987,4 @@ declare const helper: {
4826
4987
  ifSupportScreenShare: typeof ifSupportScreenShare;
4827
4988
  };
4828
4989
 
4829
- export { BackgroundPictureFillMode, IAudienceRoomEventListener, ICameraVideoProfile, IMCUOutputConfig, IMCUOutputVideoConfig, IMicphoneAudioProfile, IPKEndInfo, IPKInviteAnswerInfo, IPKInviteInfo, IPubSuccessRes, IPublishAttrs, IPublishedResource, IRCCandidatePairStat, IRCRTCInitOptions, IRCRTCReportListener, IRCRTCStateReport, IRCTrackStat, IReqResPKOptions, IRoomEventListener, IRoomPKEventListener, ISubscribeAttr, IVideoProfile, MixLayoutMode, MixVideoRenderMode, RCAbstractRoom, RCAudienceClient, RCAudienceLivingRoom, RCAudioBitrate, RCCameraVideoTrack, RCFrameRate, RCInnerCDNPullIsHttps, RCInnerCDNPullKind, RCKickReason, RCLivingRoom, RCLivingType, RCLocalAudioTrack, RCLocalFileAudioTrack, RCLocalFileTrack, RCLocalFileVideoTrack, RCLocalTrack, RCLocalVideoTrack, RCMCUConfigBuilder, RCMediaStreamCapture, RCMediaType, RCMicphoneAudioTrack, RCRTCClient, RCRTCCode, RCRTCLiveRole, RCRTCPingResult, RCRTCRoom, RCRemoteAudioTrack, RCRemoteTrack, RCRemoteVideoTrack, RCResolution, RCScreenAudioTrack, RCScreenVideoTrack, RCTag, RCTrack, RCVideoBitrate, RTCJoinType, device, helper, installer };
4990
+ export { BackgroundPictureFillMode, IAudienceRoomEventListener, ICameraVideoProfile, ILiveAudioState, IMCUOutputConfig, IMCUOutputVideoConfig, IMicphoneAudioProfile, IPKEndInfo, IPKInviteAnswerInfo, IPKInviteInfo, IPubSuccessRes, IPublishAttrs, IPublishedResource, IRCCandidatePairStat, IRCRTCInitOptions, IRCRTCReportListener, IRCRTCStateReport, IRCTrackStat, IReqResPKOptions, IRoomEventListener, IRoomPKEventListener, ISubscribeAttr, IVideoProfile, MixLayoutMode, MixVideoRenderMode, RCAbstractRoom, RCAudienceClient, RCAudienceLivingRoom, RCAudioBitrate, RCCameraVideoTrack, RCFrameRate, RCInnerCDNPullIsHttps, RCInnerCDNPullKind, RCKickReason, RCLivingRoom, RCLivingType, RCLocalAudioTrack, RCLocalFileAudioTrack, RCLocalFileTrack, RCLocalFileVideoTrack, RCLocalTrack, RCLocalVideoTrack, RCMCUConfigBuilder, RCMediaStreamCapture, RCMediaType, RCMicphoneAudioTrack, RCRTCClient, RCRTCCode, RCRTCLiveRole, RCRTCPingResult, RCRTCRoom, RCRemoteAudioTrack, RCRemoteTrack, RCRemoteVideoTrack, RCResolution, RCScreenAudioTrack, RCScreenVideoTrack, RCTag, RCTrack, RCVideoBitrate, RTCJoinType, device, helper, installer };