agora-electron-sdk 4.5.3-dev.2 → 4.5.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.
Files changed (368) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/js/{ts/Private → Private}/internal/AgoraH265TranscoderInternal.js +3 -5
  3. package/js/{ts/Private → Private}/internal/IrisApiEngine.js +71 -14
  4. package/js/{ts/Private → Private}/internal/MediaEngineInternal.js +3 -5
  5. package/js/{ts/Private → Private}/internal/MediaPlayerInternal.js +3 -5
  6. package/js/{ts/Private → Private}/internal/MediaRecorderInternal.js +5 -6
  7. package/js/{ts/Private → Private}/internal/MusicContentCenterInternal.js +3 -5
  8. package/js/{ts/Private → Private}/internal/RtcEngineExInternal.js +45 -22
  9. package/js/{ts/Renderer → Renderer}/RendererCache.js +3 -18
  10. package/package.json +5 -5
  11. package/ts/Private/internal/AgoraH265TranscoderInternal.ts +8 -6
  12. package/ts/Private/internal/IrisApiEngine.ts +104 -14
  13. package/ts/Private/internal/MediaEngineInternal.ts +8 -6
  14. package/ts/Private/internal/MediaPlayerInternal.ts +8 -6
  15. package/ts/Private/internal/MediaRecorderInternal.ts +10 -7
  16. package/ts/Private/internal/MusicContentCenterInternal.ts +8 -6
  17. package/ts/Private/internal/RtcEngineExInternal.ts +57 -26
  18. package/ts/Renderer/RendererCache.ts +3 -22
  19. package/types/AgoraSdk.d.ts.map +1 -0
  20. package/types/Decoder/gpu-utils.d.ts.map +1 -0
  21. package/types/Decoder/index.d.ts.map +1 -0
  22. package/types/Private/AgoraBase.d.ts.map +1 -0
  23. package/types/Private/AgoraMediaBase.d.ts.map +1 -0
  24. package/types/Private/AgoraMediaPlayerTypes.d.ts.map +1 -0
  25. package/types/Private/IAgoraH265Transcoder.d.ts.map +1 -0
  26. package/types/Private/IAgoraLog.d.ts.map +1 -0
  27. package/types/Private/IAgoraMediaEngine.d.ts.map +1 -0
  28. package/types/Private/IAgoraMediaPlayer.d.ts.map +1 -0
  29. package/types/Private/IAgoraMediaPlayerSource.d.ts.map +1 -0
  30. package/types/Private/IAgoraMediaRecorder.d.ts.map +1 -0
  31. package/types/Private/IAgoraMediaStreamingSource.d.ts.map +1 -0
  32. package/types/Private/IAgoraMusicContentCenter.d.ts.map +1 -0
  33. package/types/Private/IAgoraRhythmPlayer.d.ts.map +1 -0
  34. package/types/Private/IAgoraRtcEngine.d.ts.map +1 -0
  35. package/types/Private/IAgoraRtcEngineEx.d.ts.map +1 -0
  36. package/types/Private/IAgoraSpatialAudio.d.ts.map +1 -0
  37. package/types/Private/IAudioDeviceManager.d.ts.map +1 -0
  38. package/types/Private/extension/AgoraBaseExtension.d.ts.map +1 -0
  39. package/types/Private/extension/AgoraMediaBaseExtension.d.ts.map +1 -0
  40. package/types/Private/extension/AgoraMediaPlayerTypesExtension.d.ts.map +1 -0
  41. package/types/Private/extension/IAgoraH265TranscoderExtension.d.ts.map +1 -0
  42. package/types/Private/extension/IAgoraLogExtension.d.ts.map +1 -0
  43. package/types/Private/extension/IAgoraMediaEngineExtension.d.ts.map +1 -0
  44. package/types/Private/extension/IAgoraMediaPlayerExtension.d.ts.map +1 -0
  45. package/types/Private/extension/IAgoraMediaPlayerSourceExtension.d.ts.map +1 -0
  46. package/types/Private/extension/IAgoraMediaRecorderExtension.d.ts.map +1 -0
  47. package/types/Private/extension/IAgoraMusicContentCenterExtension.d.ts.map +1 -0
  48. package/types/Private/extension/IAgoraRhythmPlayerExtension.d.ts.map +1 -0
  49. package/types/Private/extension/IAgoraRtcEngineExExtension.d.ts.map +1 -0
  50. package/types/Private/extension/IAgoraRtcEngineExtension.d.ts.map +1 -0
  51. package/types/Private/extension/IAgoraSpatialAudioExtension.d.ts.map +1 -0
  52. package/types/Private/extension/IAudioDeviceManagerExtension.d.ts.map +1 -0
  53. package/types/Private/impl/AgoraBaseImpl.d.ts.map +1 -0
  54. package/types/Private/impl/AgoraMediaBaseImpl.d.ts.map +1 -0
  55. package/types/Private/impl/IAgoraH265TranscoderImpl.d.ts.map +1 -0
  56. package/types/Private/impl/IAgoraMediaEngineImpl.d.ts.map +1 -0
  57. package/types/Private/impl/IAgoraMediaPlayerImpl.d.ts.map +1 -0
  58. package/types/Private/impl/IAgoraMediaPlayerSourceImpl.d.ts.map +1 -0
  59. package/types/Private/impl/IAgoraMediaRecorderImpl.d.ts.map +1 -0
  60. package/types/Private/impl/IAgoraMusicContentCenterImpl.d.ts.map +1 -0
  61. package/types/Private/impl/IAgoraRtcEngineExImpl.d.ts.map +1 -0
  62. package/types/Private/impl/IAgoraRtcEngineImpl.d.ts.map +1 -0
  63. package/types/Private/impl/IAgoraSpatialAudioImpl.d.ts.map +1 -0
  64. package/types/Private/impl/IAudioDeviceManagerImpl.d.ts.map +1 -0
  65. package/types/Private/internal/AgoraH265TranscoderInternal.d.ts.map +1 -0
  66. package/types/Private/internal/AgoraMediaBaseInternal.d.ts.map +1 -0
  67. package/types/Private/internal/AudioDeviceManagerInternal.d.ts.map +1 -0
  68. package/types/{ts/Private → Private}/internal/IrisApiEngine.d.ts +4 -0
  69. package/types/Private/internal/IrisApiEngine.d.ts.map +1 -0
  70. package/types/Private/internal/LocalSpatialAudioEngineInternal.d.ts.map +1 -0
  71. package/types/Private/internal/MediaEngineInternal.d.ts.map +1 -0
  72. package/types/Private/internal/MediaPlayerInternal.d.ts.map +1 -0
  73. package/types/Private/internal/MediaRecorderInternal.d.ts.map +1 -0
  74. package/types/Private/internal/MusicContentCenterInternal.d.ts.map +1 -0
  75. package/types/Private/internal/RtcEngineExInternal.d.ts.map +1 -0
  76. package/types/Private/internal/VideoEffectObjectInternal.d.ts.map +1 -0
  77. package/types/{ts/Private → Private}/ipc/main.d.ts.map +1 -1
  78. package/types/Private/ipc/renderer.d.ts.map +1 -0
  79. package/types/Private/ti/AgoraBase-ti.d.ts.map +1 -0
  80. package/types/Private/ti/AgoraMediaBase-ti.d.ts.map +1 -0
  81. package/types/Private/ti/AgoraMediaPlayerTypes-ti.d.ts.map +1 -0
  82. package/types/Private/ti/IAgoraH265Transcoder-ti.d.ts.map +1 -0
  83. package/types/Private/ti/IAgoraLog-ti.d.ts.map +1 -0
  84. package/types/Private/ti/IAgoraMediaEngine-ti.d.ts.map +1 -0
  85. package/types/Private/ti/IAgoraMediaPlayer-ti.d.ts.map +1 -0
  86. package/types/Private/ti/IAgoraMediaPlayerSource-ti.d.ts.map +1 -0
  87. package/types/Private/ti/IAgoraMediaRecorder-ti.d.ts.map +1 -0
  88. package/types/Private/ti/IAgoraMediaStreamingSource-ti.d.ts.map +1 -0
  89. package/types/Private/ti/IAgoraMusicContentCenter-ti.d.ts.map +1 -0
  90. package/types/Private/ti/IAgoraRhythmPlayer-ti.d.ts.map +1 -0
  91. package/types/Private/ti/IAgoraRtcEngine-ti.d.ts.map +1 -0
  92. package/types/Private/ti/IAgoraRtcEngineEx-ti.d.ts.map +1 -0
  93. package/types/Private/ti/IAgoraSpatialAudio-ti.d.ts.map +1 -0
  94. package/types/Private/ti/IAudioDeviceManager-ti.d.ts.map +1 -0
  95. package/types/Renderer/AgoraView.d.ts.map +1 -0
  96. package/types/Renderer/CapabilityManager.d.ts.map +1 -0
  97. package/types/Renderer/IRenderer.d.ts.map +1 -0
  98. package/types/Renderer/IRendererCache.d.ts.map +1 -0
  99. package/types/Renderer/RendererCache.d.ts.map +1 -0
  100. package/types/Renderer/RendererManager.d.ts.map +1 -0
  101. package/types/Renderer/WebCodecsRenderer/index.d.ts.map +1 -0
  102. package/types/Renderer/WebCodecsRendererCache.d.ts.map +1 -0
  103. package/types/Renderer/WebGLRenderer/index.d.ts.map +1 -0
  104. package/types/Renderer/WebGLRenderer/webgl-utils.d.ts.map +1 -0
  105. package/types/Renderer/YUVCanvasRenderer/index.d.ts.map +1 -0
  106. package/types/Renderer/index.d.ts.map +1 -0
  107. package/types/Types.d.ts.map +1 -0
  108. package/types/Utils.d.ts.map +1 -0
  109. package/js/example/src/renderer/examples/advanced/VideoEffect/videoEffectHelpers.js +0 -395
  110. package/types/example/src/renderer/examples/advanced/VideoEffect/videoEffectHelpers.d.ts +0 -168
  111. package/types/example/src/renderer/examples/advanced/VideoEffect/videoEffectHelpers.d.ts.map +0 -1
  112. package/types/ts/AgoraSdk.d.ts.map +0 -1
  113. package/types/ts/Decoder/gpu-utils.d.ts.map +0 -1
  114. package/types/ts/Decoder/index.d.ts.map +0 -1
  115. package/types/ts/Private/AgoraBase.d.ts.map +0 -1
  116. package/types/ts/Private/AgoraMediaBase.d.ts.map +0 -1
  117. package/types/ts/Private/AgoraMediaPlayerTypes.d.ts.map +0 -1
  118. package/types/ts/Private/IAgoraH265Transcoder.d.ts.map +0 -1
  119. package/types/ts/Private/IAgoraLog.d.ts.map +0 -1
  120. package/types/ts/Private/IAgoraMediaEngine.d.ts.map +0 -1
  121. package/types/ts/Private/IAgoraMediaPlayer.d.ts.map +0 -1
  122. package/types/ts/Private/IAgoraMediaPlayerSource.d.ts.map +0 -1
  123. package/types/ts/Private/IAgoraMediaRecorder.d.ts.map +0 -1
  124. package/types/ts/Private/IAgoraMediaStreamingSource.d.ts.map +0 -1
  125. package/types/ts/Private/IAgoraMusicContentCenter.d.ts.map +0 -1
  126. package/types/ts/Private/IAgoraRhythmPlayer.d.ts.map +0 -1
  127. package/types/ts/Private/IAgoraRtcEngine.d.ts.map +0 -1
  128. package/types/ts/Private/IAgoraRtcEngineEx.d.ts.map +0 -1
  129. package/types/ts/Private/IAgoraSpatialAudio.d.ts.map +0 -1
  130. package/types/ts/Private/IAudioDeviceManager.d.ts.map +0 -1
  131. package/types/ts/Private/extension/AgoraBaseExtension.d.ts.map +0 -1
  132. package/types/ts/Private/extension/AgoraMediaBaseExtension.d.ts.map +0 -1
  133. package/types/ts/Private/extension/AgoraMediaPlayerTypesExtension.d.ts.map +0 -1
  134. package/types/ts/Private/extension/IAgoraH265TranscoderExtension.d.ts.map +0 -1
  135. package/types/ts/Private/extension/IAgoraLogExtension.d.ts.map +0 -1
  136. package/types/ts/Private/extension/IAgoraMediaEngineExtension.d.ts.map +0 -1
  137. package/types/ts/Private/extension/IAgoraMediaPlayerExtension.d.ts.map +0 -1
  138. package/types/ts/Private/extension/IAgoraMediaPlayerSourceExtension.d.ts.map +0 -1
  139. package/types/ts/Private/extension/IAgoraMediaRecorderExtension.d.ts.map +0 -1
  140. package/types/ts/Private/extension/IAgoraMusicContentCenterExtension.d.ts.map +0 -1
  141. package/types/ts/Private/extension/IAgoraRhythmPlayerExtension.d.ts.map +0 -1
  142. package/types/ts/Private/extension/IAgoraRtcEngineExExtension.d.ts.map +0 -1
  143. package/types/ts/Private/extension/IAgoraRtcEngineExtension.d.ts.map +0 -1
  144. package/types/ts/Private/extension/IAgoraSpatialAudioExtension.d.ts.map +0 -1
  145. package/types/ts/Private/extension/IAudioDeviceManagerExtension.d.ts.map +0 -1
  146. package/types/ts/Private/impl/AgoraBaseImpl.d.ts.map +0 -1
  147. package/types/ts/Private/impl/AgoraMediaBaseImpl.d.ts.map +0 -1
  148. package/types/ts/Private/impl/IAgoraH265TranscoderImpl.d.ts.map +0 -1
  149. package/types/ts/Private/impl/IAgoraMediaEngineImpl.d.ts.map +0 -1
  150. package/types/ts/Private/impl/IAgoraMediaPlayerImpl.d.ts.map +0 -1
  151. package/types/ts/Private/impl/IAgoraMediaPlayerSourceImpl.d.ts.map +0 -1
  152. package/types/ts/Private/impl/IAgoraMediaRecorderImpl.d.ts.map +0 -1
  153. package/types/ts/Private/impl/IAgoraMusicContentCenterImpl.d.ts.map +0 -1
  154. package/types/ts/Private/impl/IAgoraRtcEngineExImpl.d.ts.map +0 -1
  155. package/types/ts/Private/impl/IAgoraRtcEngineImpl.d.ts.map +0 -1
  156. package/types/ts/Private/impl/IAgoraSpatialAudioImpl.d.ts.map +0 -1
  157. package/types/ts/Private/impl/IAudioDeviceManagerImpl.d.ts.map +0 -1
  158. package/types/ts/Private/internal/AgoraH265TranscoderInternal.d.ts.map +0 -1
  159. package/types/ts/Private/internal/AgoraMediaBaseInternal.d.ts.map +0 -1
  160. package/types/ts/Private/internal/AudioDeviceManagerInternal.d.ts.map +0 -1
  161. package/types/ts/Private/internal/IrisApiEngine.d.ts.map +0 -1
  162. package/types/ts/Private/internal/LocalSpatialAudioEngineInternal.d.ts.map +0 -1
  163. package/types/ts/Private/internal/MediaEngineInternal.d.ts.map +0 -1
  164. package/types/ts/Private/internal/MediaPlayerInternal.d.ts.map +0 -1
  165. package/types/ts/Private/internal/MediaRecorderInternal.d.ts.map +0 -1
  166. package/types/ts/Private/internal/MusicContentCenterInternal.d.ts.map +0 -1
  167. package/types/ts/Private/internal/RtcEngineExInternal.d.ts.map +0 -1
  168. package/types/ts/Private/internal/VideoEffectObjectInternal.d.ts.map +0 -1
  169. package/types/ts/Private/ipc/renderer.d.ts.map +0 -1
  170. package/types/ts/Private/ti/AgoraBase-ti.d.ts.map +0 -1
  171. package/types/ts/Private/ti/AgoraMediaBase-ti.d.ts.map +0 -1
  172. package/types/ts/Private/ti/AgoraMediaPlayerTypes-ti.d.ts.map +0 -1
  173. package/types/ts/Private/ti/IAgoraH265Transcoder-ti.d.ts.map +0 -1
  174. package/types/ts/Private/ti/IAgoraLog-ti.d.ts.map +0 -1
  175. package/types/ts/Private/ti/IAgoraMediaEngine-ti.d.ts.map +0 -1
  176. package/types/ts/Private/ti/IAgoraMediaPlayer-ti.d.ts.map +0 -1
  177. package/types/ts/Private/ti/IAgoraMediaPlayerSource-ti.d.ts.map +0 -1
  178. package/types/ts/Private/ti/IAgoraMediaRecorder-ti.d.ts.map +0 -1
  179. package/types/ts/Private/ti/IAgoraMediaStreamingSource-ti.d.ts.map +0 -1
  180. package/types/ts/Private/ti/IAgoraMusicContentCenter-ti.d.ts.map +0 -1
  181. package/types/ts/Private/ti/IAgoraRhythmPlayer-ti.d.ts.map +0 -1
  182. package/types/ts/Private/ti/IAgoraRtcEngine-ti.d.ts.map +0 -1
  183. package/types/ts/Private/ti/IAgoraRtcEngineEx-ti.d.ts.map +0 -1
  184. package/types/ts/Private/ti/IAgoraSpatialAudio-ti.d.ts.map +0 -1
  185. package/types/ts/Private/ti/IAudioDeviceManager-ti.d.ts.map +0 -1
  186. package/types/ts/Renderer/AgoraView.d.ts.map +0 -1
  187. package/types/ts/Renderer/CapabilityManager.d.ts.map +0 -1
  188. package/types/ts/Renderer/IRenderer.d.ts.map +0 -1
  189. package/types/ts/Renderer/IRendererCache.d.ts.map +0 -1
  190. package/types/ts/Renderer/RendererCache.d.ts.map +0 -1
  191. package/types/ts/Renderer/RendererManager.d.ts.map +0 -1
  192. package/types/ts/Renderer/WebCodecsRenderer/index.d.ts.map +0 -1
  193. package/types/ts/Renderer/WebCodecsRendererCache.d.ts.map +0 -1
  194. package/types/ts/Renderer/WebGLRenderer/index.d.ts.map +0 -1
  195. package/types/ts/Renderer/WebGLRenderer/webgl-utils.d.ts.map +0 -1
  196. package/types/ts/Renderer/YUVCanvasRenderer/index.d.ts.map +0 -1
  197. package/types/ts/Renderer/index.d.ts.map +0 -1
  198. package/types/ts/Types.d.ts.map +0 -1
  199. package/types/ts/Utils.d.ts.map +0 -1
  200. /package/js/{ts/AgoraSdk.js → AgoraSdk.js} +0 -0
  201. /package/js/{ts/Decoder → Decoder}/gpu-utils.js +0 -0
  202. /package/js/{ts/Decoder → Decoder}/index.js +0 -0
  203. /package/js/{ts/Private → Private}/AgoraBase.js +0 -0
  204. /package/js/{ts/Private → Private}/AgoraMediaBase.js +0 -0
  205. /package/js/{ts/Private → Private}/AgoraMediaPlayerTypes.js +0 -0
  206. /package/js/{ts/Private → Private}/IAgoraH265Transcoder.js +0 -0
  207. /package/js/{ts/Private → Private}/IAgoraLog.js +0 -0
  208. /package/js/{ts/Private → Private}/IAgoraMediaEngine.js +0 -0
  209. /package/js/{ts/Private → Private}/IAgoraMediaPlayer.js +0 -0
  210. /package/js/{ts/Private → Private}/IAgoraMediaPlayerSource.js +0 -0
  211. /package/js/{ts/Private → Private}/IAgoraMediaRecorder.js +0 -0
  212. /package/js/{ts/Private → Private}/IAgoraMediaStreamingSource.js +0 -0
  213. /package/js/{ts/Private → Private}/IAgoraMusicContentCenter.js +0 -0
  214. /package/js/{ts/Private → Private}/IAgoraRhythmPlayer.js +0 -0
  215. /package/js/{ts/Private → Private}/IAgoraRtcEngine.js +0 -0
  216. /package/js/{ts/Private → Private}/IAgoraRtcEngineEx.js +0 -0
  217. /package/js/{ts/Private → Private}/IAgoraSpatialAudio.js +0 -0
  218. /package/js/{ts/Private → Private}/IAudioDeviceManager.js +0 -0
  219. /package/js/{ts/Private → Private}/extension/AgoraBaseExtension.js +0 -0
  220. /package/js/{ts/Private → Private}/extension/AgoraMediaBaseExtension.js +0 -0
  221. /package/js/{ts/Private → Private}/extension/AgoraMediaPlayerTypesExtension.js +0 -0
  222. /package/js/{ts/Private → Private}/extension/IAgoraH265TranscoderExtension.js +0 -0
  223. /package/js/{ts/Private → Private}/extension/IAgoraLogExtension.js +0 -0
  224. /package/js/{ts/Private → Private}/extension/IAgoraMediaEngineExtension.js +0 -0
  225. /package/js/{ts/Private → Private}/extension/IAgoraMediaPlayerExtension.js +0 -0
  226. /package/js/{ts/Private → Private}/extension/IAgoraMediaPlayerSourceExtension.js +0 -0
  227. /package/js/{ts/Private → Private}/extension/IAgoraMediaRecorderExtension.js +0 -0
  228. /package/js/{ts/Private → Private}/extension/IAgoraMusicContentCenterExtension.js +0 -0
  229. /package/js/{ts/Private → Private}/extension/IAgoraRhythmPlayerExtension.js +0 -0
  230. /package/js/{ts/Private → Private}/extension/IAgoraRtcEngineExExtension.js +0 -0
  231. /package/js/{ts/Private → Private}/extension/IAgoraRtcEngineExtension.js +0 -0
  232. /package/js/{ts/Private → Private}/extension/IAgoraSpatialAudioExtension.js +0 -0
  233. /package/js/{ts/Private → Private}/extension/IAudioDeviceManagerExtension.js +0 -0
  234. /package/js/{ts/Private → Private}/impl/AgoraBaseImpl.js +0 -0
  235. /package/js/{ts/Private → Private}/impl/AgoraMediaBaseImpl.js +0 -0
  236. /package/js/{ts/Private → Private}/impl/IAgoraH265TranscoderImpl.js +0 -0
  237. /package/js/{ts/Private → Private}/impl/IAgoraMediaEngineImpl.js +0 -0
  238. /package/js/{ts/Private → Private}/impl/IAgoraMediaPlayerImpl.js +0 -0
  239. /package/js/{ts/Private → Private}/impl/IAgoraMediaPlayerSourceImpl.js +0 -0
  240. /package/js/{ts/Private → Private}/impl/IAgoraMediaRecorderImpl.js +0 -0
  241. /package/js/{ts/Private → Private}/impl/IAgoraMusicContentCenterImpl.js +0 -0
  242. /package/js/{ts/Private → Private}/impl/IAgoraRtcEngineExImpl.js +0 -0
  243. /package/js/{ts/Private → Private}/impl/IAgoraRtcEngineImpl.js +0 -0
  244. /package/js/{ts/Private → Private}/impl/IAgoraSpatialAudioImpl.js +0 -0
  245. /package/js/{ts/Private → Private}/impl/IAudioDeviceManagerImpl.js +0 -0
  246. /package/js/{ts/Private → Private}/internal/AgoraMediaBaseInternal.js +0 -0
  247. /package/js/{ts/Private → Private}/internal/AudioDeviceManagerInternal.js +0 -0
  248. /package/js/{ts/Private → Private}/internal/LocalSpatialAudioEngineInternal.js +0 -0
  249. /package/js/{ts/Private → Private}/internal/VideoEffectObjectInternal.js +0 -0
  250. /package/js/{ts/Private → Private}/ipc/main.js +0 -0
  251. /package/js/{ts/Private → Private}/ipc/renderer.js +0 -0
  252. /package/js/{ts/Private → Private}/ti/AgoraBase-ti.js +0 -0
  253. /package/js/{ts/Private → Private}/ti/AgoraMediaBase-ti.js +0 -0
  254. /package/js/{ts/Private → Private}/ti/AgoraMediaPlayerTypes-ti.js +0 -0
  255. /package/js/{ts/Private → Private}/ti/IAgoraH265Transcoder-ti.js +0 -0
  256. /package/js/{ts/Private → Private}/ti/IAgoraLog-ti.js +0 -0
  257. /package/js/{ts/Private → Private}/ti/IAgoraMediaEngine-ti.js +0 -0
  258. /package/js/{ts/Private → Private}/ti/IAgoraMediaPlayer-ti.js +0 -0
  259. /package/js/{ts/Private → Private}/ti/IAgoraMediaPlayerSource-ti.js +0 -0
  260. /package/js/{ts/Private → Private}/ti/IAgoraMediaRecorder-ti.js +0 -0
  261. /package/js/{ts/Private → Private}/ti/IAgoraMediaStreamingSource-ti.js +0 -0
  262. /package/js/{ts/Private → Private}/ti/IAgoraMusicContentCenter-ti.js +0 -0
  263. /package/js/{ts/Private → Private}/ti/IAgoraRhythmPlayer-ti.js +0 -0
  264. /package/js/{ts/Private → Private}/ti/IAgoraRtcEngine-ti.js +0 -0
  265. /package/js/{ts/Private → Private}/ti/IAgoraRtcEngineEx-ti.js +0 -0
  266. /package/js/{ts/Private → Private}/ti/IAgoraSpatialAudio-ti.js +0 -0
  267. /package/js/{ts/Private → Private}/ti/IAudioDeviceManager-ti.js +0 -0
  268. /package/js/{ts/Renderer → Renderer}/AgoraView.js +0 -0
  269. /package/js/{ts/Renderer → Renderer}/CapabilityManager.js +0 -0
  270. /package/js/{ts/Renderer → Renderer}/IRenderer.js +0 -0
  271. /package/js/{ts/Renderer → Renderer}/IRendererCache.js +0 -0
  272. /package/js/{ts/Renderer → Renderer}/RendererManager.js +0 -0
  273. /package/js/{ts/Renderer → Renderer}/WebCodecsRenderer/index.js +0 -0
  274. /package/js/{ts/Renderer → Renderer}/WebCodecsRendererCache.js +0 -0
  275. /package/js/{ts/Renderer → Renderer}/WebGLRenderer/index.js +0 -0
  276. /package/js/{ts/Renderer → Renderer}/WebGLRenderer/webgl-utils.js +0 -0
  277. /package/js/{ts/Renderer → Renderer}/YUVCanvasRenderer/index.js +0 -0
  278. /package/js/{ts/Renderer → Renderer}/index.js +0 -0
  279. /package/js/{ts/Types.js → Types.js} +0 -0
  280. /package/js/{ts/Utils.js → Utils.js} +0 -0
  281. /package/types/{ts/AgoraSdk.d.ts → AgoraSdk.d.ts} +0 -0
  282. /package/types/{ts/Decoder → Decoder}/gpu-utils.d.ts +0 -0
  283. /package/types/{ts/Decoder → Decoder}/index.d.ts +0 -0
  284. /package/types/{ts/Private → Private}/AgoraBase.d.ts +0 -0
  285. /package/types/{ts/Private → Private}/AgoraMediaBase.d.ts +0 -0
  286. /package/types/{ts/Private → Private}/AgoraMediaPlayerTypes.d.ts +0 -0
  287. /package/types/{ts/Private → Private}/IAgoraH265Transcoder.d.ts +0 -0
  288. /package/types/{ts/Private → Private}/IAgoraLog.d.ts +0 -0
  289. /package/types/{ts/Private → Private}/IAgoraMediaEngine.d.ts +0 -0
  290. /package/types/{ts/Private → Private}/IAgoraMediaPlayer.d.ts +0 -0
  291. /package/types/{ts/Private → Private}/IAgoraMediaPlayerSource.d.ts +0 -0
  292. /package/types/{ts/Private → Private}/IAgoraMediaRecorder.d.ts +0 -0
  293. /package/types/{ts/Private → Private}/IAgoraMediaStreamingSource.d.ts +0 -0
  294. /package/types/{ts/Private → Private}/IAgoraMusicContentCenter.d.ts +0 -0
  295. /package/types/{ts/Private → Private}/IAgoraRhythmPlayer.d.ts +0 -0
  296. /package/types/{ts/Private → Private}/IAgoraRtcEngine.d.ts +0 -0
  297. /package/types/{ts/Private → Private}/IAgoraRtcEngineEx.d.ts +0 -0
  298. /package/types/{ts/Private → Private}/IAgoraSpatialAudio.d.ts +0 -0
  299. /package/types/{ts/Private → Private}/IAudioDeviceManager.d.ts +0 -0
  300. /package/types/{ts/Private → Private}/extension/AgoraBaseExtension.d.ts +0 -0
  301. /package/types/{ts/Private → Private}/extension/AgoraMediaBaseExtension.d.ts +0 -0
  302. /package/types/{ts/Private → Private}/extension/AgoraMediaPlayerTypesExtension.d.ts +0 -0
  303. /package/types/{ts/Private → Private}/extension/IAgoraH265TranscoderExtension.d.ts +0 -0
  304. /package/types/{ts/Private → Private}/extension/IAgoraLogExtension.d.ts +0 -0
  305. /package/types/{ts/Private → Private}/extension/IAgoraMediaEngineExtension.d.ts +0 -0
  306. /package/types/{ts/Private → Private}/extension/IAgoraMediaPlayerExtension.d.ts +0 -0
  307. /package/types/{ts/Private → Private}/extension/IAgoraMediaPlayerSourceExtension.d.ts +0 -0
  308. /package/types/{ts/Private → Private}/extension/IAgoraMediaRecorderExtension.d.ts +0 -0
  309. /package/types/{ts/Private → Private}/extension/IAgoraMusicContentCenterExtension.d.ts +0 -0
  310. /package/types/{ts/Private → Private}/extension/IAgoraRhythmPlayerExtension.d.ts +0 -0
  311. /package/types/{ts/Private → Private}/extension/IAgoraRtcEngineExExtension.d.ts +0 -0
  312. /package/types/{ts/Private → Private}/extension/IAgoraRtcEngineExtension.d.ts +0 -0
  313. /package/types/{ts/Private → Private}/extension/IAgoraSpatialAudioExtension.d.ts +0 -0
  314. /package/types/{ts/Private → Private}/extension/IAudioDeviceManagerExtension.d.ts +0 -0
  315. /package/types/{ts/Private → Private}/impl/AgoraBaseImpl.d.ts +0 -0
  316. /package/types/{ts/Private → Private}/impl/AgoraMediaBaseImpl.d.ts +0 -0
  317. /package/types/{ts/Private → Private}/impl/IAgoraH265TranscoderImpl.d.ts +0 -0
  318. /package/types/{ts/Private → Private}/impl/IAgoraMediaEngineImpl.d.ts +0 -0
  319. /package/types/{ts/Private → Private}/impl/IAgoraMediaPlayerImpl.d.ts +0 -0
  320. /package/types/{ts/Private → Private}/impl/IAgoraMediaPlayerSourceImpl.d.ts +0 -0
  321. /package/types/{ts/Private → Private}/impl/IAgoraMediaRecorderImpl.d.ts +0 -0
  322. /package/types/{ts/Private → Private}/impl/IAgoraMusicContentCenterImpl.d.ts +0 -0
  323. /package/types/{ts/Private → Private}/impl/IAgoraRtcEngineExImpl.d.ts +0 -0
  324. /package/types/{ts/Private → Private}/impl/IAgoraRtcEngineImpl.d.ts +0 -0
  325. /package/types/{ts/Private → Private}/impl/IAgoraSpatialAudioImpl.d.ts +0 -0
  326. /package/types/{ts/Private → Private}/impl/IAudioDeviceManagerImpl.d.ts +0 -0
  327. /package/types/{ts/Private → Private}/internal/AgoraH265TranscoderInternal.d.ts +0 -0
  328. /package/types/{ts/Private → Private}/internal/AgoraMediaBaseInternal.d.ts +0 -0
  329. /package/types/{ts/Private → Private}/internal/AudioDeviceManagerInternal.d.ts +0 -0
  330. /package/types/{ts/Private → Private}/internal/LocalSpatialAudioEngineInternal.d.ts +0 -0
  331. /package/types/{ts/Private → Private}/internal/MediaEngineInternal.d.ts +0 -0
  332. /package/types/{ts/Private → Private}/internal/MediaPlayerInternal.d.ts +0 -0
  333. /package/types/{ts/Private → Private}/internal/MediaRecorderInternal.d.ts +0 -0
  334. /package/types/{ts/Private → Private}/internal/MusicContentCenterInternal.d.ts +0 -0
  335. /package/types/{ts/Private → Private}/internal/RtcEngineExInternal.d.ts +0 -0
  336. /package/types/{ts/Private → Private}/internal/VideoEffectObjectInternal.d.ts +0 -0
  337. /package/types/{ts/Private → Private}/ipc/main.d.ts +0 -0
  338. /package/types/{ts/Private → Private}/ipc/renderer.d.ts +0 -0
  339. /package/types/{ts/Private → Private}/ti/AgoraBase-ti.d.ts +0 -0
  340. /package/types/{ts/Private → Private}/ti/AgoraMediaBase-ti.d.ts +0 -0
  341. /package/types/{ts/Private → Private}/ti/AgoraMediaPlayerTypes-ti.d.ts +0 -0
  342. /package/types/{ts/Private → Private}/ti/IAgoraH265Transcoder-ti.d.ts +0 -0
  343. /package/types/{ts/Private → Private}/ti/IAgoraLog-ti.d.ts +0 -0
  344. /package/types/{ts/Private → Private}/ti/IAgoraMediaEngine-ti.d.ts +0 -0
  345. /package/types/{ts/Private → Private}/ti/IAgoraMediaPlayer-ti.d.ts +0 -0
  346. /package/types/{ts/Private → Private}/ti/IAgoraMediaPlayerSource-ti.d.ts +0 -0
  347. /package/types/{ts/Private → Private}/ti/IAgoraMediaRecorder-ti.d.ts +0 -0
  348. /package/types/{ts/Private → Private}/ti/IAgoraMediaStreamingSource-ti.d.ts +0 -0
  349. /package/types/{ts/Private → Private}/ti/IAgoraMusicContentCenter-ti.d.ts +0 -0
  350. /package/types/{ts/Private → Private}/ti/IAgoraRhythmPlayer-ti.d.ts +0 -0
  351. /package/types/{ts/Private → Private}/ti/IAgoraRtcEngine-ti.d.ts +0 -0
  352. /package/types/{ts/Private → Private}/ti/IAgoraRtcEngineEx-ti.d.ts +0 -0
  353. /package/types/{ts/Private → Private}/ti/IAgoraSpatialAudio-ti.d.ts +0 -0
  354. /package/types/{ts/Private → Private}/ti/IAudioDeviceManager-ti.d.ts +0 -0
  355. /package/types/{ts/Renderer → Renderer}/AgoraView.d.ts +0 -0
  356. /package/types/{ts/Renderer → Renderer}/CapabilityManager.d.ts +0 -0
  357. /package/types/{ts/Renderer → Renderer}/IRenderer.d.ts +0 -0
  358. /package/types/{ts/Renderer → Renderer}/IRendererCache.d.ts +0 -0
  359. /package/types/{ts/Renderer → Renderer}/RendererCache.d.ts +0 -0
  360. /package/types/{ts/Renderer → Renderer}/RendererManager.d.ts +0 -0
  361. /package/types/{ts/Renderer → Renderer}/WebCodecsRenderer/index.d.ts +0 -0
  362. /package/types/{ts/Renderer → Renderer}/WebCodecsRendererCache.d.ts +0 -0
  363. /package/types/{ts/Renderer → Renderer}/WebGLRenderer/index.d.ts +0 -0
  364. /package/types/{ts/Renderer → Renderer}/WebGLRenderer/webgl-utils.d.ts +0 -0
  365. /package/types/{ts/Renderer → Renderer}/YUVCanvasRenderer/index.d.ts +0 -0
  366. /package/types/{ts/Renderer → Renderer}/index.d.ts +0 -0
  367. /package/types/{ts/Types.d.ts → Types.d.ts} +0 -0
  368. /package/types/{ts/Utils.d.ts → Utils.d.ts} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
 
2
2
 
3
+ ## [4.5.3](https://github.com/AgoraIO-Extensions/Electron-SDK/compare/v4.5.3-dev.3...v4.5.3) (2026-04-28)
4
+
5
+ ## [4.5.3-dev.3](https://github.com/AgoraIO-Extensions/Electron-SDK/compare/v4.5.3-dev.2...v4.5.3-dev.3) (2026-04-03)
6
+
3
7
  ## [4.5.3-dev.2](https://github.com/AgoraIO-Extensions/Electron-SDK/compare/v4.5.3-dev.1...v4.5.3-dev.2) (2026-04-03)
4
8
 
5
9
  ## [4.5.3-dev.1](https://github.com/AgoraIO-Extensions/Electron-SDK/compare/v4.5.2-build.9-rc.1...v4.5.3-dev.1) (2026-04-03)
@@ -36,15 +36,13 @@ class H265TranscoderInternal extends IAgoraH265TranscoderImpl_1.IH265TranscoderI
36
36
  };
37
37
  // @ts-ignore
38
38
  listener.agoraCallback = callback;
39
- IrisApiEngine_1.DeviceEventEmitter.addListener(eventType, callback);
39
+ (0, IrisApiEngine_1.addScopedEventListener)(this, eventType, listener, callback);
40
40
  }
41
41
  removeListener(eventType, listener) {
42
- IrisApiEngine_1.DeviceEventEmitter.removeListener(eventType,
43
- // @ts-ignore
44
- listener?.agoraCallback ?? listener);
42
+ (0, IrisApiEngine_1.removeScopedEventListener)(this, eventType, listener);
45
43
  }
46
44
  removeAllListeners(eventType) {
47
- IrisApiEngine_1.DeviceEventEmitter.removeAllListeners(eventType);
45
+ (0, IrisApiEngine_1.removeAllScopedEventListeners)(this, eventType);
48
46
  }
49
47
  registerTranscoderObserver(observer) {
50
48
  if (!H265TranscoderInternal._h265_transcoder_observers.find((value) => value === observer)) {
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.emitEvent = exports.callIrisApi = exports.EVENT_PROCESSORS = exports.EVENT_TYPE = exports.isDebuggable = exports.setDebuggable = exports.AgoraElectronBridge = exports.DeviceEventEmitter = void 0;
6
+ exports.emitEvent = exports.callIrisApi = exports.EVENT_PROCESSORS = exports.EVENT_TYPE = exports.isDebuggable = exports.setDebuggable = exports.AgoraElectronBridge = exports.removeAllScopedEventListeners = exports.removeScopedEventListener = exports.addScopedEventListener = exports.DeviceEventEmitter = void 0;
7
7
  const eventemitter3_1 = __importDefault(require("eventemitter3"));
8
8
  const json_bigint_1 = __importDefault(require("json-bigint"));
9
9
  const JSON = (0, json_bigint_1.default)({ storeAsString: true });
@@ -26,6 +26,76 @@ const MusicContentCenterInternal_1 = require("./MusicContentCenterInternal");
26
26
  const RtcEngineExInternal_1 = require("./RtcEngineExInternal");
27
27
  // @ts-ignore
28
28
  exports.DeviceEventEmitter = new eventemitter3_1.default();
29
+ const ScopedDeviceEventListeners = new WeakMap();
30
+ function getScopedListenerMap(owner) {
31
+ let scopedListeners = ScopedDeviceEventListeners.get(owner);
32
+ if (scopedListeners === undefined) {
33
+ scopedListeners = new Map();
34
+ ScopedDeviceEventListeners.set(owner, scopedListeners);
35
+ }
36
+ return scopedListeners;
37
+ }
38
+ function cleanupScopedListenerMap(owner, scopedListeners) {
39
+ if (scopedListeners.size === 0) {
40
+ ScopedDeviceEventListeners.delete(owner);
41
+ }
42
+ }
43
+ function addScopedEventListener(owner, eventType, listener, callback) {
44
+ const scopedListeners = getScopedListenerMap(owner);
45
+ const listeners = scopedListeners.get(eventType) ?? [];
46
+ listeners.push({ listener, callback });
47
+ scopedListeners.set(eventType, listeners);
48
+ exports.DeviceEventEmitter.addListener(eventType, callback);
49
+ }
50
+ exports.addScopedEventListener = addScopedEventListener;
51
+ function removeScopedEventListener(owner, eventType, listener) {
52
+ if (listener === undefined) {
53
+ removeAllScopedEventListeners(owner, eventType);
54
+ return;
55
+ }
56
+ const scopedListeners = ScopedDeviceEventListeners.get(owner);
57
+ if (scopedListeners === undefined) {
58
+ return;
59
+ }
60
+ const listeners = scopedListeners.get(eventType) ?? [];
61
+ const index = listeners.findIndex((record) => record.listener === listener);
62
+ if (index === -1) {
63
+ return;
64
+ }
65
+ const [record] = listeners.splice(index, 1);
66
+ exports.DeviceEventEmitter.removeListener(eventType, record.callback);
67
+ if (listeners.length === 0) {
68
+ scopedListeners.delete(eventType);
69
+ }
70
+ else {
71
+ scopedListeners.set(eventType, listeners);
72
+ }
73
+ cleanupScopedListenerMap(owner, scopedListeners);
74
+ }
75
+ exports.removeScopedEventListener = removeScopedEventListener;
76
+ function removeAllScopedEventListeners(owner, eventType) {
77
+ const scopedListeners = ScopedDeviceEventListeners.get(owner);
78
+ if (scopedListeners === undefined) {
79
+ return;
80
+ }
81
+ if (eventType !== undefined) {
82
+ const listeners = scopedListeners.get(eventType) ?? [];
83
+ listeners.forEach((record) => {
84
+ exports.DeviceEventEmitter.removeListener(eventType, record.callback);
85
+ });
86
+ scopedListeners.delete(eventType);
87
+ cleanupScopedListenerMap(owner, scopedListeners);
88
+ return;
89
+ }
90
+ scopedListeners.forEach((listeners, currentEventType) => {
91
+ listeners.forEach((record) => {
92
+ exports.DeviceEventEmitter.removeListener(currentEventType, record.callback);
93
+ });
94
+ });
95
+ scopedListeners.clear();
96
+ ScopedDeviceEventListeners.delete(owner);
97
+ }
98
+ exports.removeAllScopedEventListeners = removeAllScopedEventListeners;
29
99
  const AgoraNode = require('../../../build/Release/agora_node_ext');
30
100
  exports.AgoraElectronBridge = new AgoraNode.AgoraElectronBridge();
31
101
  exports.AgoraElectronBridge.OnEvent('call_back_with_buffer', (...params) => {
@@ -201,19 +271,6 @@ exports.EVENT_PROCESSORS = {
201
271
  case 'onStreamMessageEx':
202
272
  data.data = buffers[0];
203
273
  break;
204
- case 'onLocalVideoStats':
205
- if (data) {
206
- let rendererManager = Utils_1.AgoraEnv.AgoraRendererManager;
207
- if (rendererManager) {
208
- let sourceType = data.sourceType;
209
- let connection = data.connection;
210
- let rendererCaches = rendererManager.getRendererCachesBySourceType(sourceType);
211
- rendererCaches.forEach((cache) => {
212
- cache.setCallbackContext(connection, sourceType);
213
- });
214
- }
215
- }
216
- break;
217
274
  case 'onRemoteVideoStats':
218
275
  if (data) {
219
276
  let rendererManager = Utils_1.AgoraEnv.AgoraRendererManager;
@@ -104,15 +104,13 @@ class MediaEngineInternal extends IAgoraMediaEngineImpl_1.IMediaEngineImpl {
104
104
  };
105
105
  // @ts-ignore
106
106
  listener.agoraCallback = callback;
107
- IrisApiEngine_1.DeviceEventEmitter.addListener(eventType, callback);
107
+ (0, IrisApiEngine_1.addScopedEventListener)(this, eventType, listener, callback);
108
108
  }
109
109
  removeListener(eventType, listener) {
110
- IrisApiEngine_1.DeviceEventEmitter.removeListener(eventType,
111
- // @ts-ignore
112
- listener?.agoraCallback ?? listener);
110
+ (0, IrisApiEngine_1.removeScopedEventListener)(this, eventType, listener);
113
111
  }
114
112
  removeAllListeners(eventType) {
115
- IrisApiEngine_1.DeviceEventEmitter.removeAllListeners(eventType);
113
+ (0, IrisApiEngine_1.removeAllScopedEventListeners)(this, eventType);
116
114
  }
117
115
  }
118
116
  exports.MediaEngineInternal = MediaEngineInternal;
@@ -77,15 +77,13 @@ class MediaPlayerInternal extends IAgoraMediaPlayerImpl_1.IMediaPlayerImpl {
77
77
  };
78
78
  // @ts-ignore
79
79
  listener.agoraCallback = callback;
80
- IrisApiEngine_1.DeviceEventEmitter.addListener(eventType, callback);
80
+ (0, IrisApiEngine_1.addScopedEventListener)(this, eventType, listener, callback);
81
81
  }
82
82
  removeListener(eventType, listener) {
83
- IrisApiEngine_1.DeviceEventEmitter.removeListener(eventType,
84
- // @ts-ignore
85
- listener?.agoraCallback ?? listener);
83
+ (0, IrisApiEngine_1.removeScopedEventListener)(this, eventType, listener);
86
84
  }
87
85
  removeAllListeners(eventType) {
88
- IrisApiEngine_1.DeviceEventEmitter.removeAllListeners(eventType);
86
+ (0, IrisApiEngine_1.removeAllScopedEventListeners)(this, eventType);
89
87
  }
90
88
  getMediaPlayerId() {
91
89
  return this._mediaPlayerId;
@@ -24,7 +24,8 @@ class MediaRecorderInternal extends IAgoraMediaRecorderImpl_1.IMediaRecorderImpl
24
24
  }
25
25
  setMediaRecorderObserver(callback) {
26
26
  const key = this._nativeHandle;
27
- if (MediaRecorderInternal._observers.has(key)) {
27
+ const currentObserver = MediaRecorderInternal._observers.get(key);
28
+ if (currentObserver === callback) {
28
29
  return AgoraBase_1.ErrorCodeType.ErrOk;
29
30
  }
30
31
  MediaRecorderInternal._observers.set(key, callback);
@@ -55,15 +56,13 @@ class MediaRecorderInternal extends IAgoraMediaRecorderImpl_1.IMediaRecorderImpl
55
56
  };
56
57
  // @ts-ignore
57
58
  listener.agoraCallback = callback;
58
- IrisApiEngine_1.DeviceEventEmitter.addListener(eventType, callback);
59
+ (0, IrisApiEngine_1.addScopedEventListener)(this, eventType, listener, callback);
59
60
  }
60
61
  removeListener(eventType, listener) {
61
- IrisApiEngine_1.DeviceEventEmitter.removeListener(eventType,
62
- // @ts-ignore
63
- listener?.agoraCallback ?? listener);
62
+ (0, IrisApiEngine_1.removeScopedEventListener)(this, eventType, listener);
64
63
  }
65
64
  removeAllListeners(eventType) {
66
- IrisApiEngine_1.DeviceEventEmitter.removeAllListeners(eventType);
65
+ (0, IrisApiEngine_1.removeAllScopedEventListeners)(this, eventType);
67
66
  }
68
67
  }
69
68
  exports.MediaRecorderInternal = MediaRecorderInternal;
@@ -34,15 +34,13 @@ class MusicContentCenterInternal extends IAgoraMusicContentCenterImpl_1.IMusicCo
34
34
  };
35
35
  // @ts-ignore
36
36
  listener.agoraCallback = callback;
37
- IrisApiEngine_1.DeviceEventEmitter.addListener(eventType, callback);
37
+ (0, IrisApiEngine_1.addScopedEventListener)(this, eventType, listener, callback);
38
38
  }
39
39
  removeListener(eventType, listener) {
40
- IrisApiEngine_1.DeviceEventEmitter.removeListener(eventType,
41
- // @ts-ignore
42
- listener?.agoraCallback ?? listener);
40
+ (0, IrisApiEngine_1.removeScopedEventListener)(this, eventType, listener);
43
41
  }
44
42
  removeAllListeners(eventType) {
45
- IrisApiEngine_1.DeviceEventEmitter.removeAllListeners(eventType);
43
+ (0, IrisApiEngine_1.removeAllScopedEventListeners)(this, eventType);
46
44
  }
47
45
  registerEventHandler(eventHandler) {
48
46
  if (!MusicContentCenterInternal._event_handlers.find((value) => value === eventHandler)) {
@@ -69,38 +69,62 @@ class RtcEngineExInternal extends IAgoraRtcEngineExImpl_1.IRtcEngineExImpl {
69
69
  try {
70
70
  this.performanceIntervalFunc = setInterval(() => {
71
71
  let rendererManager = Utils_1.AgoraEnv.AgoraRendererManager;
72
- let counters = [];
72
+ let remoteCounters = [];
73
+ let localCounters = [];
73
74
  if (rendererManager) {
74
75
  rendererManager.getRendererCaches().forEach((cache) => {
75
- const isRemote = cache.callbackContext.sourceType ===
76
+ const isRemote = cache.callbackContext?.sourceType ===
76
77
  AgoraMediaBase_1.VideoSourceType.VideoSourceRemote;
77
- if (cache.callbackContext.connection?.channelId &&
78
- (cache.callbackContext.connection?.localUid || isRemote)) {
79
- let counter = counters.find((counter) => counter.connection.channelId ===
80
- cache.callbackContext.connection.channelId &&
81
- counter.connection.localUid ===
82
- cache.callbackContext.connection.localUid);
78
+ if (isRemote) {
79
+ if (cache.callbackContext.connection?.channelId &&
80
+ cache.callbackContext.connection?.localUid) {
81
+ let counter = remoteCounters.find((counter) => counter.connection.channelId ===
82
+ cache.callbackContext.connection.channelId &&
83
+ counter.connection.localUid ===
84
+ cache.callbackContext.connection.localUid);
85
+ let data = {
86
+ counters: [
87
+ {
88
+ counterId: this.VideoRemoteRenderMeanFpsCounterId,
89
+ value: Math.floor(cache.actualFps),
90
+ },
91
+ {
92
+ counterId: this.VideoRemoteRenderDrawCostCounterId,
93
+ value: Math.floor(cache.avgFrameInterval),
94
+ },
95
+ ],
96
+ uid: cache.cacheContext.uid,
97
+ };
98
+ if (!counter) {
99
+ remoteCounters.push({
100
+ data: [data],
101
+ connection: cache.callbackContext.connection,
102
+ });
103
+ }
104
+ else {
105
+ counter.data.push(data);
106
+ }
107
+ }
108
+ }
109
+ else {
110
+ let counter = localCounters.find((counter) => counter.videoSourceType === cache.cacheContext.sourceType);
83
111
  let data = {
84
112
  counters: [
85
113
  {
86
- counterId: isRemote
87
- ? this.VideoRemoteRenderMeanFpsCounterId
88
- : this.VideoLocalRenderMeanFpsCounterId,
114
+ counterId: this.VideoLocalRenderMeanFpsCounterId,
89
115
  value: Math.floor(cache.actualFps),
90
116
  },
91
117
  {
92
- counterId: isRemote
93
- ? this.VideoRemoteRenderDrawCostCounterId
94
- : this.VideoLocalRenderDrawCostCounterId,
118
+ counterId: this.VideoLocalRenderDrawCostCounterId,
95
119
  value: Math.floor(cache.avgFrameInterval),
96
120
  },
97
121
  ],
98
- uid: isRemote ? cache.cacheContext.uid : 0,
122
+ uid: cache.cacheContext.uid,
99
123
  };
100
124
  if (!counter) {
101
- counters.push({
125
+ localCounters.push({
102
126
  data: [data],
103
- connection: cache.callbackContext.connection,
127
+ videoSourceType: cache.cacheContext.sourceType,
104
128
  });
105
129
  }
106
130
  else {
@@ -109,6 +133,7 @@ class RtcEngineExInternal extends IAgoraRtcEngineExImpl_1.IRtcEngineExImpl {
109
133
  }
110
134
  });
111
135
  }
136
+ const counters = [...remoteCounters, ...localCounters];
112
137
  counters.forEach((counter) => {
113
138
  this.setParameters(JSON.stringify({ 'rtc.report.argus_counters': counter }));
114
139
  });
@@ -201,15 +226,13 @@ class RtcEngineExInternal extends IAgoraRtcEngineExImpl_1.IRtcEngineExImpl {
201
226
  };
202
227
  // @ts-ignore
203
228
  listener.agoraCallback = callback;
204
- IrisApiEngine_2.DeviceEventEmitter.addListener(eventType, callback);
229
+ (0, IrisApiEngine_2.addScopedEventListener)(this, eventType, listener, callback);
205
230
  }
206
231
  removeListener(eventType, listener) {
207
- IrisApiEngine_2.DeviceEventEmitter.removeListener(eventType,
208
- // @ts-ignore
209
- listener?.agoraCallback ?? listener);
232
+ (0, IrisApiEngine_2.removeScopedEventListener)(this, eventType, listener);
210
233
  }
211
234
  removeAllListeners(eventType) {
212
- IrisApiEngine_2.DeviceEventEmitter.removeAllListeners(eventType);
235
+ (0, IrisApiEngine_2.removeAllScopedEventListeners)(this, eventType);
213
236
  }
214
237
  getVersion() {
215
238
  const apiType = 'RtcEngine_getVersion_915cb25';
@@ -104,11 +104,6 @@ class RendererCache extends IRendererCache_1.IRendererCache {
104
104
  this.videoFrame.alphaBuffer = Buffer.alloc(this.videoFrame.width * this.videoFrame.height);
105
105
  }
106
106
  }
107
- if (hasMoreFrame) {
108
- this.renderers.forEach((renderer) => {
109
- renderer.drawFrame(this.cacheContext.uid, this.videoFrame);
110
- });
111
- }
112
107
  return { hasMoreFrame, needRender };
113
108
  }
114
109
  addRenderer(renderer) {
@@ -207,22 +202,12 @@ class RendererCache extends IRendererCache_1.IRendererCache {
207
202
  }
208
203
  // 记录当前时间作为本次循环的开始时间
209
204
  this._lastRenderTime = currentTime;
210
- // 获取第一帧并渲染
211
- // 无论hasMoreFrame是true还是false,都渲染当前帧
212
- // 因为fetchVideoFrame总是会获取一帧数据(如果有的话)
213
- let { hasMoreFrame, needRender } = this.fetchVideoFrame();
205
+ // Fetch at most one frame per tick and render it once. When frames pile
206
+ // up, favor UI responsiveness over draining the entire backlog.
207
+ const { needRender } = this.fetchVideoFrame();
214
208
  if (needRender) {
215
209
  this.renderFrame();
216
210
  }
217
- // 如果hasMoreFrame为true,表示还有更多帧需要获取
218
- while (hasMoreFrame) {
219
- // 获取下一帧
220
- let { hasMoreFrame: nextHasMoreFrame, needRender } = this.fetchVideoFrame();
221
- hasMoreFrame = nextHasMoreFrame;
222
- if (needRender) {
223
- this.renderFrame();
224
- }
225
- }
226
211
  // 安排下一帧
227
212
  this._renderingTimer = window.setTimeout(renderingLooper, 0);
228
213
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agora-electron-sdk",
3
- "version": "4.5.3-dev.2",
3
+ "version": "4.5.3",
4
4
  "description": "agora-electron-sdk",
5
5
  "main": "js/AgoraSdk",
6
6
  "types": "types/AgoraSdk.d.ts",
@@ -160,9 +160,9 @@
160
160
  "pify": "^4.0.1"
161
161
  },
162
162
  "agora_electron": {
163
- "iris_sdk_win": "https://download.agora.io/sdk/release/iris_4.5.3-dev.8_DCG_Windows_Video_Standalone_20260403_0226_31945.zip",
164
- "iris_sdk_mac": "https://download.agora.io/sdk/release/iris_4.5.3-dev.8_DCG_Mac_Video_Standalone_20260403_0226_32882.zip",
165
- "native_sdk_win": "https://download.agora.io/sdk/release/Agora_Native_SDK_for_Windows_v4.5.3_FULL.zip",
166
- "native_sdk_mac": "https://download.agora.io/sdk/release/Agora_Native_SDK_for_Mac_v4.5.3_FULL.zip"
163
+ "iris_sdk_win": "https://download.agora.io/sdk/release/iris_4.5.3-build.1_DCG_Windows_Video_Standalone_20260428_1050_31959.zip",
164
+ "iris_sdk_mac": "https://download.agora.io/sdk/release/iris_4.5.3-build.1_DCG_Mac_Video_Standalone_20260428_1052_32896.zip",
165
+ "native_sdk_win": "https://download.agora.io/sdk/release/Agora_Native_SDK_for_Windows_rel.v4.5.3.70_32091_FULL_20260416_1933_1076734.zip",
166
+ "native_sdk_mac": "https://download.agora.io/sdk/release/Agora_Native_SDK_for_Mac_rel.v4.5.3.70_27430_FULL_20260416_1933_1076735.zip"
167
167
  }
168
168
  }
@@ -9,9 +9,11 @@ import IAgoraH265TranscoderTI from '../ti/IAgoraH265Transcoder-ti';
9
9
  const checkers = createCheckers(IAgoraH265TranscoderTI);
10
10
 
11
11
  import {
12
- DeviceEventEmitter,
13
12
  EVENT_TYPE,
14
13
  EventProcessor,
14
+ addScopedEventListener,
15
+ removeAllScopedEventListeners,
16
+ removeScopedEventListener,
15
17
  } from './IrisApiEngine';
16
18
 
17
19
  export class H265TranscoderInternal extends IH265TranscoderImpl {
@@ -52,24 +54,24 @@ export class H265TranscoderInternal extends IH265TranscoderImpl {
52
54
  };
53
55
  // @ts-ignore
54
56
  listener!.agoraCallback = callback;
55
- DeviceEventEmitter.addListener(eventType, callback);
57
+ addScopedEventListener(this, eventType, listener as Function, callback);
56
58
  }
57
59
 
58
60
  removeListener<EventType extends keyof IH265TranscoderEvent>(
59
61
  eventType: EventType,
60
62
  listener?: IH265TranscoderEvent[EventType]
61
63
  ) {
62
- DeviceEventEmitter.removeListener(
64
+ removeScopedEventListener(
65
+ this,
63
66
  eventType,
64
- // @ts-ignore
65
- listener?.agoraCallback ?? listener
67
+ listener as Function | undefined
66
68
  );
67
69
  }
68
70
 
69
71
  removeAllListeners<EventType extends keyof IH265TranscoderEvent>(
70
72
  eventType?: EventType
71
73
  ) {
72
- DeviceEventEmitter.removeAllListeners(eventType);
74
+ removeAllScopedEventListeners(this, eventType);
73
75
  }
74
76
 
75
77
  override registerTranscoderObserver(
@@ -71,6 +71,110 @@ import { VideoEffectObjectInternal } from './VideoEffectObjectInternal';
71
71
  // @ts-ignore
72
72
  export const DeviceEventEmitter: EventEmitter = new EventEmitter();
73
73
 
74
+ type DeviceEventListener = (...args: any[]) => void;
75
+ type ListenerRecord = {
76
+ listener: Function;
77
+ callback: DeviceEventListener;
78
+ };
79
+
80
+ const ScopedDeviceEventListeners = new WeakMap<
81
+ object,
82
+ Map<string, ListenerRecord[]>
83
+ >();
84
+
85
+ function getScopedListenerMap(owner: object): Map<string, ListenerRecord[]> {
86
+ let scopedListeners = ScopedDeviceEventListeners.get(owner);
87
+ if (scopedListeners === undefined) {
88
+ scopedListeners = new Map<string, ListenerRecord[]>();
89
+ ScopedDeviceEventListeners.set(owner, scopedListeners);
90
+ }
91
+ return scopedListeners;
92
+ }
93
+
94
+ function cleanupScopedListenerMap(
95
+ owner: object,
96
+ scopedListeners: Map<string, ListenerRecord[]>
97
+ ) {
98
+ if (scopedListeners.size === 0) {
99
+ ScopedDeviceEventListeners.delete(owner);
100
+ }
101
+ }
102
+
103
+ export function addScopedEventListener(
104
+ owner: object,
105
+ eventType: string,
106
+ listener: Function,
107
+ callback: DeviceEventListener
108
+ ) {
109
+ const scopedListeners = getScopedListenerMap(owner);
110
+ const listeners = scopedListeners.get(eventType) ?? [];
111
+
112
+ listeners.push({ listener, callback });
113
+ scopedListeners.set(eventType, listeners);
114
+ DeviceEventEmitter.addListener(eventType, callback);
115
+ }
116
+
117
+ export function removeScopedEventListener(
118
+ owner: object,
119
+ eventType: string,
120
+ listener?: Function
121
+ ) {
122
+ if (listener === undefined) {
123
+ removeAllScopedEventListeners(owner, eventType);
124
+ return;
125
+ }
126
+
127
+ const scopedListeners = ScopedDeviceEventListeners.get(owner);
128
+ if (scopedListeners === undefined) {
129
+ return;
130
+ }
131
+
132
+ const listeners = scopedListeners.get(eventType) ?? [];
133
+ const index = listeners.findIndex((record) => record.listener === listener);
134
+
135
+ if (index === -1) {
136
+ return;
137
+ }
138
+
139
+ const [record] = listeners.splice(index, 1);
140
+ DeviceEventEmitter.removeListener(eventType, record!.callback);
141
+
142
+ if (listeners.length === 0) {
143
+ scopedListeners.delete(eventType);
144
+ } else {
145
+ scopedListeners.set(eventType, listeners);
146
+ }
147
+ cleanupScopedListenerMap(owner, scopedListeners);
148
+ }
149
+
150
+ export function removeAllScopedEventListeners(
151
+ owner: object,
152
+ eventType?: string
153
+ ) {
154
+ const scopedListeners = ScopedDeviceEventListeners.get(owner);
155
+ if (scopedListeners === undefined) {
156
+ return;
157
+ }
158
+
159
+ if (eventType !== undefined) {
160
+ const listeners = scopedListeners.get(eventType) ?? [];
161
+ listeners.forEach((record) => {
162
+ DeviceEventEmitter.removeListener(eventType, record.callback);
163
+ });
164
+ scopedListeners.delete(eventType);
165
+ cleanupScopedListenerMap(owner, scopedListeners);
166
+ return;
167
+ }
168
+
169
+ scopedListeners.forEach((listeners, currentEventType) => {
170
+ listeners.forEach((record) => {
171
+ DeviceEventEmitter.removeListener(currentEventType, record.callback);
172
+ });
173
+ });
174
+ scopedListeners.clear();
175
+ ScopedDeviceEventListeners.delete(owner);
176
+ }
177
+
74
178
  const AgoraNode = require('../../../build/Release/agora_node_ext');
75
179
  export const AgoraElectronBridge: IAgoraElectronBridge =
76
180
  new AgoraNode.AgoraElectronBridge();
@@ -345,20 +449,6 @@ export const EVENT_PROCESSORS: EventProcessors = {
345
449
  case 'onStreamMessageEx':
346
450
  data.data = buffers[0];
347
451
  break;
348
- case 'onLocalVideoStats':
349
- if (data) {
350
- let rendererManager = AgoraEnv.AgoraRendererManager;
351
- if (rendererManager) {
352
- let sourceType = (data as any).sourceType;
353
- let connection = (data as any).connection;
354
- let rendererCaches =
355
- rendererManager.getRendererCachesBySourceType(sourceType);
356
- rendererCaches.forEach((cache) => {
357
- cache.setCallbackContext(connection, sourceType);
358
- });
359
- }
360
- }
361
- break;
362
452
  case 'onRemoteVideoStats':
363
453
  if (data) {
364
454
  let rendererManager = AgoraEnv.AgoraRendererManager;
@@ -12,9 +12,11 @@ import AgoraMediaBaseTI from '../ti/AgoraMediaBase-ti';
12
12
  const checkers = createCheckers(AgoraMediaBaseTI);
13
13
 
14
14
  import {
15
- DeviceEventEmitter,
16
15
  EVENT_TYPE,
17
16
  EventProcessor,
17
+ addScopedEventListener,
18
+ removeAllScopedEventListeners,
19
+ removeScopedEventListener,
18
20
  } from './IrisApiEngine';
19
21
 
20
22
  export class MediaEngineInternal extends IMediaEngineImpl {
@@ -168,23 +170,23 @@ export class MediaEngineInternal extends IMediaEngineImpl {
168
170
  };
169
171
  // @ts-ignore
170
172
  listener!.agoraCallback = callback;
171
- DeviceEventEmitter.addListener(eventType, callback);
173
+ addScopedEventListener(this, eventType, listener as Function, callback);
172
174
  }
173
175
 
174
176
  removeListener<EventType extends keyof IMediaEngineEvent>(
175
177
  eventType: EventType,
176
178
  listener?: IMediaEngineEvent[EventType]
177
179
  ) {
178
- DeviceEventEmitter.removeListener(
180
+ removeScopedEventListener(
181
+ this,
179
182
  eventType,
180
- // @ts-ignore
181
- listener?.agoraCallback ?? listener
183
+ listener as Function | undefined
182
184
  );
183
185
  }
184
186
 
185
187
  removeAllListeners<EventType extends keyof IMediaEngineEvent>(
186
188
  eventType?: EventType
187
189
  ) {
188
- DeviceEventEmitter.removeAllListeners(eventType);
190
+ removeAllScopedEventListeners(this, eventType);
189
191
  }
190
192
  }
@@ -23,9 +23,11 @@ const checkers = createCheckers(
23
23
  );
24
24
 
25
25
  import {
26
- DeviceEventEmitter,
27
26
  EVENT_TYPE,
28
27
  EventProcessor,
28
+ addScopedEventListener,
29
+ removeAllScopedEventListeners,
30
+ removeScopedEventListener,
29
31
  } from './IrisApiEngine';
30
32
 
31
33
  export class MediaPlayerInternal extends IMediaPlayerImpl {
@@ -131,24 +133,24 @@ export class MediaPlayerInternal extends IMediaPlayerImpl {
131
133
  };
132
134
  // @ts-ignore
133
135
  listener!.agoraCallback = callback;
134
- DeviceEventEmitter.addListener(eventType, callback);
136
+ addScopedEventListener(this, eventType, listener as Function, callback);
135
137
  }
136
138
 
137
139
  removeListener<EventType extends keyof IMediaPlayerEvent>(
138
140
  eventType: EventType,
139
141
  listener?: IMediaPlayerEvent[EventType]
140
142
  ) {
141
- DeviceEventEmitter.removeListener(
143
+ removeScopedEventListener(
144
+ this,
142
145
  eventType,
143
- // @ts-ignore
144
- listener?.agoraCallback ?? listener
146
+ listener as Function | undefined
145
147
  );
146
148
  }
147
149
 
148
150
  removeAllListeners<EventType extends keyof IMediaPlayerEvent>(
149
151
  eventType?: EventType
150
152
  ) {
151
- DeviceEventEmitter.removeAllListeners(eventType);
153
+ removeAllScopedEventListeners(this, eventType);
152
154
  }
153
155
 
154
156
  override getMediaPlayerId(): number {