shengwang-electron-sdk 4.6.2-rc.1

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 (369) hide show
  1. package/CHANGELOG.md +391 -0
  2. package/LICENSE +21 -0
  3. package/README.md +146 -0
  4. package/gulpfile.js +52 -0
  5. package/js/AgoraSdk.js +54 -0
  6. package/js/Decoder/gpu-utils.js +74 -0
  7. package/js/Decoder/index.js +172 -0
  8. package/js/Private/AgoraBase.js +4292 -0
  9. package/js/Private/AgoraMediaBase.js +1017 -0
  10. package/js/Private/AgoraMediaPlayerTypes.js +320 -0
  11. package/js/Private/IAgoraH265Transcoder.js +36 -0
  12. package/js/Private/IAgoraLog.js +78 -0
  13. package/js/Private/IAgoraMediaEngine.js +32 -0
  14. package/js/Private/IAgoraMediaPlayer.js +16 -0
  15. package/js/Private/IAgoraMediaPlayerSource.js +3 -0
  16. package/js/Private/IAgoraMediaRecorder.js +10 -0
  17. package/js/Private/IAgoraMediaStreamingSource.js +74 -0
  18. package/js/Private/IAgoraMusicContentCenter.js +160 -0
  19. package/js/Private/IAgoraRhythmPlayer.js +62 -0
  20. package/js/Private/IAgoraRtcEngine.js +1042 -0
  21. package/js/Private/IAgoraRtcEngineEx.js +19 -0
  22. package/js/Private/IAgoraSpatialAudio.js +24 -0
  23. package/js/Private/IAudioDeviceManager.js +20 -0
  24. package/js/Private/extension/AgoraBaseExtension.js +3 -0
  25. package/js/Private/extension/AgoraMediaBaseExtension.js +2 -0
  26. package/js/Private/extension/AgoraMediaPlayerTypesExtension.js +2 -0
  27. package/js/Private/extension/IAgoraH265TranscoderExtension.js +2 -0
  28. package/js/Private/extension/IAgoraLogExtension.js +2 -0
  29. package/js/Private/extension/IAgoraMediaEngineExtension.js +2 -0
  30. package/js/Private/extension/IAgoraMediaPlayerExtension.js +2 -0
  31. package/js/Private/extension/IAgoraMediaPlayerSourceExtension.js +2 -0
  32. package/js/Private/extension/IAgoraMediaRecorderExtension.js +2 -0
  33. package/js/Private/extension/IAgoraMusicContentCenterExtension.js +2 -0
  34. package/js/Private/extension/IAgoraRhythmPlayerExtension.js +2 -0
  35. package/js/Private/extension/IAgoraRtcEngineExExtension.js +2 -0
  36. package/js/Private/extension/IAgoraRtcEngineExtension.js +2 -0
  37. package/js/Private/extension/IAgoraSpatialAudioExtension.js +2 -0
  38. package/js/Private/extension/IAudioDeviceManagerExtension.js +2 -0
  39. package/js/Private/impl/AgoraBaseImpl.js +23 -0
  40. package/js/Private/impl/AgoraMediaBaseImpl.js +149 -0
  41. package/js/Private/impl/IAgoraH265TranscoderImpl.js +116 -0
  42. package/js/Private/impl/IAgoraMediaEngineImpl.js +337 -0
  43. package/js/Private/impl/IAgoraMediaPlayerImpl.js +960 -0
  44. package/js/Private/impl/IAgoraMediaPlayerSourceImpl.js +73 -0
  45. package/js/Private/impl/IAgoraMediaRecorderImpl.js +47 -0
  46. package/js/Private/impl/IAgoraMusicContentCenterImpl.js +422 -0
  47. package/js/Private/impl/IAgoraRtcEngineExImpl.js +1178 -0
  48. package/js/Private/impl/IAgoraRtcEngineImpl.js +5428 -0
  49. package/js/Private/impl/IAgoraSpatialAudioImpl.js +358 -0
  50. package/js/Private/impl/IAudioDeviceManagerImpl.js +375 -0
  51. package/js/Private/internal/AgoraH265TranscoderInternal.js +62 -0
  52. package/js/Private/internal/AgoraMediaBaseInternal.js +15 -0
  53. package/js/Private/internal/AudioDeviceManagerInternal.js +44 -0
  54. package/js/Private/internal/IrisApiEngine.js +451 -0
  55. package/js/Private/internal/LocalSpatialAudioEngineInternal.js +7 -0
  56. package/js/Private/internal/MediaEngineInternal.js +122 -0
  57. package/js/Private/internal/MediaPlayerInternal.js +194 -0
  58. package/js/Private/internal/MediaRecorderInternal.js +70 -0
  59. package/js/Private/internal/MusicContentCenterInternal.js +139 -0
  60. package/js/Private/internal/RtcEngineExInternal.js +488 -0
  61. package/js/Private/ipc/main.js +21 -0
  62. package/js/Private/ipc/renderer.js +21 -0
  63. package/js/Private/ti/AgoraBase-ti.js +40 -0
  64. package/js/Private/ti/AgoraMediaBase-ti.js +75 -0
  65. package/js/Private/ti/AgoraMediaPlayerTypes-ti.js +5 -0
  66. package/js/Private/ti/IAgoraH265Transcoder-ti.js +40 -0
  67. package/js/Private/ti/IAgoraLog-ti.js +5 -0
  68. package/js/Private/ti/IAgoraMediaEngine-ti.js +5 -0
  69. package/js/Private/ti/IAgoraMediaPlayer-ti.js +38 -0
  70. package/js/Private/ti/IAgoraMediaPlayerSource-ti.js +50 -0
  71. package/js/Private/ti/IAgoraMediaRecorder-ti.js +5 -0
  72. package/js/Private/ti/IAgoraMediaStreamingSource-ti.js +5 -0
  73. package/js/Private/ti/IAgoraMusicContentCenter-ti.js +42 -0
  74. package/js/Private/ti/IAgoraRhythmPlayer-ti.js +5 -0
  75. package/js/Private/ti/IAgoraRtcEngine-ti.js +144 -0
  76. package/js/Private/ti/IAgoraRtcEngineEx-ti.js +5 -0
  77. package/js/Private/ti/IAgoraSpatialAudio-ti.js +5 -0
  78. package/js/Private/ti/IAudioDeviceManager-ti.js +5 -0
  79. package/js/Renderer/AgoraView.js +178 -0
  80. package/js/Renderer/CapabilityManager.js +99 -0
  81. package/js/Renderer/IRenderer.js +139 -0
  82. package/js/Renderer/IRendererCache.js +91 -0
  83. package/js/Renderer/RendererCache.js +252 -0
  84. package/js/Renderer/RendererManager.js +250 -0
  85. package/js/Renderer/WebCodecsRenderer/index.js +109 -0
  86. package/js/Renderer/WebCodecsRendererCache.js +127 -0
  87. package/js/Renderer/WebGLRenderer/index.js +467 -0
  88. package/js/Renderer/WebGLRenderer/webgl-utils.js +1337 -0
  89. package/js/Renderer/YUVCanvasRenderer/index.js +53 -0
  90. package/js/Renderer/index.js +17 -0
  91. package/js/Types.js +67 -0
  92. package/js/Utils.js +187 -0
  93. package/package.json +168 -0
  94. package/scripts/bootstrap.js +29 -0
  95. package/scripts/build.js +37 -0
  96. package/scripts/buildJS.js +14 -0
  97. package/scripts/checkElectron.js +43 -0
  98. package/scripts/clean.js +16 -0
  99. package/scripts/download.js +102 -0
  100. package/scripts/downloadPrebuild.js +199 -0
  101. package/scripts/getConfig.js +73 -0
  102. package/scripts/logger.js +32 -0
  103. package/scripts/synclib.js +69 -0
  104. package/scripts/util.js +47 -0
  105. package/scripts/zipBuild.js +40 -0
  106. package/ts/AgoraSdk.ts +44 -0
  107. package/ts/Decoder/gpu-utils.ts +92 -0
  108. package/ts/Decoder/index.ts +210 -0
  109. package/ts/Private/AgoraBase.ts +5941 -0
  110. package/ts/Private/AgoraMediaBase.ts +1814 -0
  111. package/ts/Private/AgoraMediaPlayerTypes.ts +467 -0
  112. package/ts/Private/IAgoraH265Transcoder.ts +73 -0
  113. package/ts/Private/IAgoraLog.ts +93 -0
  114. package/ts/Private/IAgoraMediaEngine.ts +321 -0
  115. package/ts/Private/IAgoraMediaPlayer.ts +759 -0
  116. package/ts/Private/IAgoraMediaPlayerSource.ts +137 -0
  117. package/ts/Private/IAgoraMediaRecorder.ts +65 -0
  118. package/ts/Private/IAgoraMediaStreamingSource.ts +81 -0
  119. package/ts/Private/IAgoraMusicContentCenter.ts +676 -0
  120. package/ts/Private/IAgoraRhythmPlayer.ts +67 -0
  121. package/ts/Private/IAgoraRtcEngine.ts +7909 -0
  122. package/ts/Private/IAgoraRtcEngineEx.ts +1138 -0
  123. package/ts/Private/IAgoraSpatialAudio.ts +248 -0
  124. package/ts/Private/IAudioDeviceManager.ts +351 -0
  125. package/ts/Private/extension/AgoraBaseExtension.ts +14 -0
  126. package/ts/Private/extension/AgoraMediaBaseExtension.ts +1 -0
  127. package/ts/Private/extension/AgoraMediaPlayerTypesExtension.ts +1 -0
  128. package/ts/Private/extension/IAgoraH265TranscoderExtension.ts +39 -0
  129. package/ts/Private/extension/IAgoraLogExtension.ts +1 -0
  130. package/ts/Private/extension/IAgoraMediaEngineExtension.ts +62 -0
  131. package/ts/Private/extension/IAgoraMediaPlayerExtension.ts +64 -0
  132. package/ts/Private/extension/IAgoraMediaPlayerSourceExtension.ts +1 -0
  133. package/ts/Private/extension/IAgoraMediaRecorderExtension.ts +59 -0
  134. package/ts/Private/extension/IAgoraMusicContentCenterExtension.ts +34 -0
  135. package/ts/Private/extension/IAgoraRhythmPlayerExtension.ts +1 -0
  136. package/ts/Private/extension/IAgoraRtcEngineExExtension.ts +1 -0
  137. package/ts/Private/extension/IAgoraRtcEngineExtension.ts +64 -0
  138. package/ts/Private/extension/IAgoraSpatialAudioExtension.ts +1 -0
  139. package/ts/Private/extension/IAudioDeviceManagerExtension.ts +1 -0
  140. package/ts/Private/impl/AgoraBaseImpl.ts +39 -0
  141. package/ts/Private/impl/AgoraMediaBaseImpl.ts +238 -0
  142. package/ts/Private/impl/IAgoraH265TranscoderImpl.ts +152 -0
  143. package/ts/Private/impl/IAgoraMediaEngineImpl.ts +491 -0
  144. package/ts/Private/impl/IAgoraMediaPlayerImpl.ts +1181 -0
  145. package/ts/Private/impl/IAgoraMediaPlayerSourceImpl.ts +94 -0
  146. package/ts/Private/impl/IAgoraMediaRecorderImpl.ts +59 -0
  147. package/ts/Private/impl/IAgoraMusicContentCenterImpl.ts +562 -0
  148. package/ts/Private/impl/IAgoraRtcEngineExImpl.ts +1912 -0
  149. package/ts/Private/impl/IAgoraRtcEngineImpl.ts +7738 -0
  150. package/ts/Private/impl/IAgoraSpatialAudioImpl.ts +495 -0
  151. package/ts/Private/impl/IAudioDeviceManagerImpl.ts +443 -0
  152. package/ts/Private/internal/AgoraH265TranscoderInternal.ts +97 -0
  153. package/ts/Private/internal/AgoraMediaBaseInternal.ts +15 -0
  154. package/ts/Private/internal/AudioDeviceManagerInternal.ts +46 -0
  155. package/ts/Private/internal/IrisApiEngine.ts +627 -0
  156. package/ts/Private/internal/LocalSpatialAudioEngineInternal.ts +3 -0
  157. package/ts/Private/internal/MediaEngineInternal.ts +190 -0
  158. package/ts/Private/internal/MediaPlayerInternal.ts +311 -0
  159. package/ts/Private/internal/MediaRecorderInternal.ts +100 -0
  160. package/ts/Private/internal/MusicContentCenterInternal.ts +208 -0
  161. package/ts/Private/internal/RtcEngineExInternal.ts +720 -0
  162. package/ts/Private/ipc/main.ts +22 -0
  163. package/ts/Private/ipc/renderer.ts +21 -0
  164. package/ts/Private/ti/AgoraBase-ti.ts +16 -0
  165. package/ts/Private/ti/AgoraMediaBase-ti.ts +58 -0
  166. package/ts/Private/ti/AgoraMediaPlayerTypes-ti.ts +11 -0
  167. package/ts/Private/ti/IAgoraH265Transcoder-ti.ts +16 -0
  168. package/ts/Private/ti/IAgoraLog-ti.ts +11 -0
  169. package/ts/Private/ti/IAgoraMediaEngine-ti.ts +11 -0
  170. package/ts/Private/ti/IAgoraMediaPlayer-ti.ts +14 -0
  171. package/ts/Private/ti/IAgoraMediaPlayerSource-ti.ts +26 -0
  172. package/ts/Private/ti/IAgoraMediaRecorder-ti.ts +11 -0
  173. package/ts/Private/ti/IAgoraMediaStreamingSource-ti.ts +11 -0
  174. package/ts/Private/ti/IAgoraMusicContentCenter-ti.ts +18 -0
  175. package/ts/Private/ti/IAgoraRhythmPlayer-ti.ts +11 -0
  176. package/ts/Private/ti/IAgoraRtcEngine-ti.ts +122 -0
  177. package/ts/Private/ti/IAgoraRtcEngineEx-ti.ts +11 -0
  178. package/ts/Private/ti/IAgoraSpatialAudio-ti.ts +11 -0
  179. package/ts/Private/ti/IAudioDeviceManager-ti.ts +11 -0
  180. package/ts/Renderer/AgoraView.ts +264 -0
  181. package/ts/Renderer/CapabilityManager.ts +126 -0
  182. package/ts/Renderer/IRenderer.ts +163 -0
  183. package/ts/Renderer/IRendererCache.ts +130 -0
  184. package/ts/Renderer/RendererCache.ts +323 -0
  185. package/ts/Renderer/RendererManager.ts +322 -0
  186. package/ts/Renderer/WebCodecsRenderer/index.ts +148 -0
  187. package/ts/Renderer/WebCodecsRendererCache.ts +153 -0
  188. package/ts/Renderer/WebGLRenderer/index.ts +695 -0
  189. package/ts/Renderer/WebGLRenderer/webgl-utils.js +1510 -0
  190. package/ts/Renderer/YUVCanvasRenderer/index.ts +80 -0
  191. package/ts/Renderer/index.ts +1 -0
  192. package/ts/Types.ts +254 -0
  193. package/ts/Utils.ts +198 -0
  194. package/types/AgoraSdk.d.ts +30 -0
  195. package/types/AgoraSdk.d.ts.map +1 -0
  196. package/types/Decoder/gpu-utils.d.ts +21 -0
  197. package/types/Decoder/gpu-utils.d.ts.map +1 -0
  198. package/types/Decoder/index.d.ts +26 -0
  199. package/types/Decoder/index.d.ts.map +1 -0
  200. package/types/Private/AgoraBase.d.ts +5728 -0
  201. package/types/Private/AgoraBase.d.ts.map +1 -0
  202. package/types/Private/AgoraMediaBase.d.ts +1717 -0
  203. package/types/Private/AgoraMediaBase.d.ts.map +1 -0
  204. package/types/Private/AgoraMediaPlayerTypes.d.ts +456 -0
  205. package/types/Private/AgoraMediaPlayerTypes.d.ts.map +1 -0
  206. package/types/Private/IAgoraH265Transcoder.d.ts +28 -0
  207. package/types/Private/IAgoraH265Transcoder.d.ts.map +1 -0
  208. package/types/Private/IAgoraLog.d.ts +91 -0
  209. package/types/Private/IAgoraLog.d.ts.map +1 -0
  210. package/types/Private/IAgoraMediaEngine.d.ts +255 -0
  211. package/types/Private/IAgoraMediaEngine.d.ts.map +1 -0
  212. package/types/Private/IAgoraMediaPlayer.d.ts +662 -0
  213. package/types/Private/IAgoraMediaPlayer.d.ts.map +1 -0
  214. package/types/Private/IAgoraMediaPlayerSource.d.ts +109 -0
  215. package/types/Private/IAgoraMediaPlayerSource.d.ts.map +1 -0
  216. package/types/Private/IAgoraMediaRecorder.d.ts +60 -0
  217. package/types/Private/IAgoraMediaRecorder.d.ts.map +1 -0
  218. package/types/Private/IAgoraMediaStreamingSource.d.ts +42 -0
  219. package/types/Private/IAgoraMediaStreamingSource.d.ts.map +1 -0
  220. package/types/Private/IAgoraMusicContentCenter.d.ts +602 -0
  221. package/types/Private/IAgoraMusicContentCenter.d.ts.map +1 -0
  222. package/types/Private/IAgoraRhythmPlayer.d.ts +65 -0
  223. package/types/Private/IAgoraRhythmPlayer.d.ts.map +1 -0
  224. package/types/Private/IAgoraRtcEngine.d.ts +6640 -0
  225. package/types/Private/IAgoraRtcEngine.d.ts.map +1 -0
  226. package/types/Private/IAgoraRtcEngineEx.d.ts +847 -0
  227. package/types/Private/IAgoraRtcEngineEx.d.ts.map +1 -0
  228. package/types/Private/IAgoraSpatialAudio.d.ts +194 -0
  229. package/types/Private/IAgoraSpatialAudio.d.ts.map +1 -0
  230. package/types/Private/IAudioDeviceManager.d.ts +321 -0
  231. package/types/Private/IAudioDeviceManager.d.ts.map +1 -0
  232. package/types/Private/extension/AgoraBaseExtension.d.ts +14 -0
  233. package/types/Private/extension/AgoraBaseExtension.d.ts.map +1 -0
  234. package/types/Private/extension/AgoraMediaBaseExtension.d.ts +2 -0
  235. package/types/Private/extension/AgoraMediaBaseExtension.d.ts.map +1 -0
  236. package/types/Private/extension/AgoraMediaPlayerTypesExtension.d.ts +2 -0
  237. package/types/Private/extension/AgoraMediaPlayerTypesExtension.d.ts.map +1 -0
  238. package/types/Private/extension/IAgoraH265TranscoderExtension.d.ts +24 -0
  239. package/types/Private/extension/IAgoraH265TranscoderExtension.d.ts.map +1 -0
  240. package/types/Private/extension/IAgoraLogExtension.d.ts +2 -0
  241. package/types/Private/extension/IAgoraLogExtension.d.ts.map +1 -0
  242. package/types/Private/extension/IAgoraMediaEngineExtension.d.ts +40 -0
  243. package/types/Private/extension/IAgoraMediaEngineExtension.d.ts.map +1 -0
  244. package/types/Private/extension/IAgoraMediaPlayerExtension.d.ts +46 -0
  245. package/types/Private/extension/IAgoraMediaPlayerExtension.d.ts.map +1 -0
  246. package/types/Private/extension/IAgoraMediaPlayerSourceExtension.d.ts +2 -0
  247. package/types/Private/extension/IAgoraMediaPlayerSourceExtension.d.ts.map +1 -0
  248. package/types/Private/extension/IAgoraMediaRecorderExtension.d.ts +44 -0
  249. package/types/Private/extension/IAgoraMediaRecorderExtension.d.ts.map +1 -0
  250. package/types/Private/extension/IAgoraMusicContentCenterExtension.d.ts +20 -0
  251. package/types/Private/extension/IAgoraMusicContentCenterExtension.d.ts.map +1 -0
  252. package/types/Private/extension/IAgoraRhythmPlayerExtension.d.ts +2 -0
  253. package/types/Private/extension/IAgoraRhythmPlayerExtension.d.ts.map +1 -0
  254. package/types/Private/extension/IAgoraRtcEngineExExtension.d.ts +2 -0
  255. package/types/Private/extension/IAgoraRtcEngineExExtension.d.ts.map +1 -0
  256. package/types/Private/extension/IAgoraRtcEngineExtension.d.ts +42 -0
  257. package/types/Private/extension/IAgoraRtcEngineExtension.d.ts.map +1 -0
  258. package/types/Private/extension/IAgoraSpatialAudioExtension.d.ts +2 -0
  259. package/types/Private/extension/IAgoraSpatialAudioExtension.d.ts.map +1 -0
  260. package/types/Private/extension/IAudioDeviceManagerExtension.d.ts +2 -0
  261. package/types/Private/extension/IAudioDeviceManagerExtension.d.ts.map +1 -0
  262. package/types/Private/impl/AgoraBaseImpl.d.ts +3 -0
  263. package/types/Private/impl/AgoraBaseImpl.d.ts.map +1 -0
  264. package/types/Private/impl/AgoraMediaBaseImpl.d.ts +14 -0
  265. package/types/Private/impl/AgoraMediaBaseImpl.d.ts.map +1 -0
  266. package/types/Private/impl/IAgoraH265TranscoderImpl.d.ts +15 -0
  267. package/types/Private/impl/IAgoraH265TranscoderImpl.d.ts.map +1 -0
  268. package/types/Private/impl/IAgoraMediaEngineImpl.d.ts +46 -0
  269. package/types/Private/impl/IAgoraMediaEngineImpl.d.ts.map +1 -0
  270. package/types/Private/impl/IAgoraMediaPlayerImpl.d.ts +145 -0
  271. package/types/Private/impl/IAgoraMediaPlayerImpl.d.ts.map +1 -0
  272. package/types/Private/impl/IAgoraMediaPlayerSourceImpl.d.ts +3 -0
  273. package/types/Private/impl/IAgoraMediaPlayerSourceImpl.d.ts.map +1 -0
  274. package/types/Private/impl/IAgoraMediaRecorderImpl.d.ts +11 -0
  275. package/types/Private/impl/IAgoraMediaRecorderImpl.d.ts.map +1 -0
  276. package/types/Private/impl/IAgoraMusicContentCenterImpl.d.ts +67 -0
  277. package/types/Private/impl/IAgoraMusicContentCenterImpl.d.ts.map +1 -0
  278. package/types/Private/impl/IAgoraRtcEngineExImpl.d.ts +128 -0
  279. package/types/Private/impl/IAgoraRtcEngineExImpl.d.ts.map +1 -0
  280. package/types/Private/impl/IAgoraRtcEngineImpl.d.ts +656 -0
  281. package/types/Private/impl/IAgoraRtcEngineImpl.d.ts.map +1 -0
  282. package/types/Private/impl/IAgoraSpatialAudioImpl.d.ts +47 -0
  283. package/types/Private/impl/IAgoraSpatialAudioImpl.d.ts.map +1 -0
  284. package/types/Private/impl/IAudioDeviceManagerImpl.d.ts +65 -0
  285. package/types/Private/impl/IAudioDeviceManagerImpl.d.ts.map +1 -0
  286. package/types/Private/internal/AgoraH265TranscoderInternal.d.ts +14 -0
  287. package/types/Private/internal/AgoraH265TranscoderInternal.d.ts.map +1 -0
  288. package/types/Private/internal/AgoraMediaBaseInternal.d.ts +8 -0
  289. package/types/Private/internal/AgoraMediaBaseInternal.d.ts.map +1 -0
  290. package/types/Private/internal/AudioDeviceManagerInternal.d.ts +9 -0
  291. package/types/Private/internal/AudioDeviceManagerInternal.d.ts.map +1 -0
  292. package/types/Private/internal/IrisApiEngine.d.ts +69 -0
  293. package/types/Private/internal/IrisApiEngine.d.ts.map +1 -0
  294. package/types/Private/internal/LocalSpatialAudioEngineInternal.d.ts +4 -0
  295. package/types/Private/internal/LocalSpatialAudioEngineInternal.d.ts.map +1 -0
  296. package/types/Private/internal/MediaEngineInternal.d.ts +23 -0
  297. package/types/Private/internal/MediaEngineInternal.d.ts.map +1 -0
  298. package/types/Private/internal/MediaPlayerInternal.d.ts +30 -0
  299. package/types/Private/internal/MediaPlayerInternal.d.ts.map +1 -0
  300. package/types/Private/internal/MediaRecorderInternal.d.ts +16 -0
  301. package/types/Private/internal/MediaRecorderInternal.d.ts.map +1 -0
  302. package/types/Private/internal/MusicContentCenterInternal.d.ts +31 -0
  303. package/types/Private/internal/MusicContentCenterInternal.d.ts.map +1 -0
  304. package/types/Private/internal/RtcEngineExInternal.d.ts +77 -0
  305. package/types/Private/internal/RtcEngineExInternal.d.ts.map +1 -0
  306. package/types/Private/ipc/main.d.ts +2 -0
  307. package/types/Private/ipc/main.d.ts.map +1 -0
  308. package/types/Private/ipc/renderer.d.ts +3 -0
  309. package/types/Private/ipc/renderer.d.ts.map +1 -0
  310. package/types/Private/ti/AgoraBase-ti.d.ts +8 -0
  311. package/types/Private/ti/AgoraBase-ti.d.ts.map +1 -0
  312. package/types/Private/ti/AgoraMediaBase-ti.d.ts +15 -0
  313. package/types/Private/ti/AgoraMediaBase-ti.d.ts.map +1 -0
  314. package/types/Private/ti/AgoraMediaPlayerTypes-ti.d.ts +7 -0
  315. package/types/Private/ti/AgoraMediaPlayerTypes-ti.d.ts.map +1 -0
  316. package/types/Private/ti/IAgoraH265Transcoder-ti.d.ts +8 -0
  317. package/types/Private/ti/IAgoraH265Transcoder-ti.d.ts.map +1 -0
  318. package/types/Private/ti/IAgoraLog-ti.d.ts +7 -0
  319. package/types/Private/ti/IAgoraLog-ti.d.ts.map +1 -0
  320. package/types/Private/ti/IAgoraMediaEngine-ti.d.ts +7 -0
  321. package/types/Private/ti/IAgoraMediaEngine-ti.d.ts.map +1 -0
  322. package/types/Private/ti/IAgoraMediaPlayer-ti.d.ts +8 -0
  323. package/types/Private/ti/IAgoraMediaPlayer-ti.d.ts.map +1 -0
  324. package/types/Private/ti/IAgoraMediaPlayerSource-ti.d.ts +8 -0
  325. package/types/Private/ti/IAgoraMediaPlayerSource-ti.d.ts.map +1 -0
  326. package/types/Private/ti/IAgoraMediaRecorder-ti.d.ts +7 -0
  327. package/types/Private/ti/IAgoraMediaRecorder-ti.d.ts.map +1 -0
  328. package/types/Private/ti/IAgoraMediaStreamingSource-ti.d.ts +7 -0
  329. package/types/Private/ti/IAgoraMediaStreamingSource-ti.d.ts.map +1 -0
  330. package/types/Private/ti/IAgoraMusicContentCenter-ti.d.ts +8 -0
  331. package/types/Private/ti/IAgoraMusicContentCenter-ti.d.ts.map +1 -0
  332. package/types/Private/ti/IAgoraRhythmPlayer-ti.d.ts +7 -0
  333. package/types/Private/ti/IAgoraRhythmPlayer-ti.d.ts.map +1 -0
  334. package/types/Private/ti/IAgoraRtcEngine-ti.d.ts +10 -0
  335. package/types/Private/ti/IAgoraRtcEngine-ti.d.ts.map +1 -0
  336. package/types/Private/ti/IAgoraRtcEngineEx-ti.d.ts +7 -0
  337. package/types/Private/ti/IAgoraRtcEngineEx-ti.d.ts.map +1 -0
  338. package/types/Private/ti/IAgoraSpatialAudio-ti.d.ts +7 -0
  339. package/types/Private/ti/IAgoraSpatialAudio-ti.d.ts.map +1 -0
  340. package/types/Private/ti/IAudioDeviceManager-ti.d.ts +7 -0
  341. package/types/Private/ti/IAudioDeviceManager-ti.d.ts.map +1 -0
  342. package/types/Renderer/AgoraView.d.ts +82 -0
  343. package/types/Renderer/AgoraView.d.ts.map +1 -0
  344. package/types/Renderer/CapabilityManager.d.ts +20 -0
  345. package/types/Renderer/CapabilityManager.d.ts.map +1 -0
  346. package/types/Renderer/IRenderer.d.ts +20 -0
  347. package/types/Renderer/IRenderer.d.ts.map +1 -0
  348. package/types/Renderer/IRendererCache.d.ts +47 -0
  349. package/types/Renderer/IRendererCache.d.ts.map +1 -0
  350. package/types/Renderer/RendererCache.d.ts +51 -0
  351. package/types/Renderer/RendererCache.d.ts.map +1 -0
  352. package/types/Renderer/RendererManager.d.ts +53 -0
  353. package/types/Renderer/RendererManager.d.ts.map +1 -0
  354. package/types/Renderer/WebCodecsRenderer/index.d.ts +14 -0
  355. package/types/Renderer/WebCodecsRenderer/index.d.ts.map +1 -0
  356. package/types/Renderer/WebCodecsRendererCache.d.ts +22 -0
  357. package/types/Renderer/WebCodecsRendererCache.d.ts.map +1 -0
  358. package/types/Renderer/WebGLRenderer/index.d.ts +37 -0
  359. package/types/Renderer/WebGLRenderer/index.d.ts.map +1 -0
  360. package/types/Renderer/WebGLRenderer/webgl-utils.d.ts +1 -0
  361. package/types/Renderer/WebGLRenderer/webgl-utils.d.ts.map +1 -0
  362. package/types/Renderer/YUVCanvasRenderer/index.d.ts +10 -0
  363. package/types/Renderer/YUVCanvasRenderer/index.d.ts.map +1 -0
  364. package/types/Renderer/index.d.ts +2 -0
  365. package/types/Renderer/index.d.ts.map +1 -0
  366. package/types/Types.d.ts +182 -0
  367. package/types/Types.d.ts.map +1 -0
  368. package/types/Utils.d.ts +50 -0
  369. package/types/Utils.d.ts.map +1 -0
@@ -0,0 +1,264 @@
1
+ import { VideoMirrorModeType, VideoViewSetupMode } from '../Private/AgoraBase';
2
+ import {
3
+ RenderModeType,
4
+ VideoModulePosition,
5
+ VideoSourceType,
6
+ } from '../Private/AgoraMediaBase';
7
+ import { AgoraEnv } from '../Utils';
8
+
9
+ const VIDEO_SOURCE_TYPE_STRING = 'video-source-type';
10
+ const UID_STRING = 'uid';
11
+ const CHANNEL_ID_STRING = 'channel-id';
12
+ const POSITION_STRING = 'position';
13
+ const RENDERER_CONTENT_MODE_STRING = 'renderer-content-mode';
14
+ const RENDERER_MIRROR_STRING = 'renderer-mirror';
15
+ const ENABLE_ALPHA_MASK_STRING = 'enable-alpha-mask';
16
+
17
+ const observedAttributes = [
18
+ VIDEO_SOURCE_TYPE_STRING,
19
+ UID_STRING,
20
+ CHANNEL_ID_STRING,
21
+ POSITION_STRING,
22
+ RENDERER_CONTENT_MODE_STRING,
23
+ RENDERER_MIRROR_STRING,
24
+ ENABLE_ALPHA_MASK_STRING,
25
+ ];
26
+
27
+ declare global {
28
+ /**
29
+ * Attributes of the Agora custom element.
30
+ * You can use this custom element as follows:<agora-view video-source-type="{VideoSourceType.VideoSourceCamera}" channel-id="" uid="{0}" position="{VideoModulePosition.PositionPreRenderer}"></agora-view>
31
+ */
32
+ interface AgoraView {
33
+ /**
34
+ * The type of the video source. See VideoSourceType .
35
+ */
36
+ 'video-source-type': VideoSourceType;
37
+ /**
38
+ * The ID of the remote user.
39
+ */
40
+ 'uid': number;
41
+ /**
42
+ * The channel name. This parameter signifies the channel in which users engage in real-time audio and video interaction. Under the premise of the same App ID, users who fill in the same channel ID enter the same channel for audio and video interaction. The string length must be less than 64 bytes. Supported characters:
43
+ * All lowercase English letters: a to z.
44
+ * All uppercase English letters: A to Z.
45
+ * All numeric characters: 0 to 9.
46
+ * Space
47
+ * "!", "#", "$", "%", "&", "(", ")", "+", "-", ":", ";", "<", "= ", ".", ">", "?", "@", "[", "]", "^", "_", "{", "}", "|", "~", ","
48
+ */
49
+ 'channel-id': string;
50
+ /**
51
+ * The frame position of the video observer.
52
+ */
53
+ 'position': VideoModulePosition;
54
+ /**
55
+ * The video display mode.
56
+ */
57
+ 'renderer-content-mode': RenderModeType;
58
+ /**
59
+ * Whether to enable mirror mode when rendering video: true: Enable mirror mode.false: Do not enable mirror mode.
60
+ */
61
+ 'renderer-mirror': boolean;
62
+ /**
63
+ * The inline style of elements. See style .
64
+ */
65
+ 'style': any;
66
+ /**
67
+ * Whether to enable alpha mask rendering: true : Enable alpha mask rendering. false : (Default) Disable alpha mask rendering. Alpha mask rendering can create images with transparent effects and extract portraits from videos. When used in combination with other methods, you can implement effects such as portrait-in-picture and watermarking.
68
+ */
69
+ 'enable-alpha-mask': boolean;
70
+ }
71
+ namespace JSX {
72
+ /**
73
+ * The custom HTML elements defined by Agora.
74
+ */
75
+ interface IntrinsicElements {
76
+ /**
77
+ * The name of the custom element, which supports rendering an AgoraView or HTMLElement object.
78
+ */
79
+ 'agora-view': AgoraView | HTMLElement;
80
+ }
81
+ }
82
+ }
83
+
84
+ export default class AgoraView extends HTMLElement {
85
+ isConnectedCallback = false;
86
+ static get observedAttributes() {
87
+ return observedAttributes;
88
+ }
89
+
90
+ get sourceType(): VideoSourceType {
91
+ const number = Number(this.getAttribute(VIDEO_SOURCE_TYPE_STRING));
92
+ return isNaN(number) ? 0 : number;
93
+ }
94
+
95
+ set sourceType(val) {
96
+ if (val) {
97
+ this.setAttribute(VIDEO_SOURCE_TYPE_STRING, String(val));
98
+ } else {
99
+ this.removeAttribute(VIDEO_SOURCE_TYPE_STRING);
100
+ }
101
+ }
102
+
103
+ get uid(): number {
104
+ const number = Number(this.getAttribute(UID_STRING));
105
+ return isNaN(number) ? 0 : number;
106
+ }
107
+
108
+ set uid(val) {
109
+ if (val) {
110
+ this.setAttribute(UID_STRING, String(val));
111
+ } else {
112
+ this.removeAttribute(UID_STRING);
113
+ }
114
+ }
115
+
116
+ get channelId(): string {
117
+ return this.getAttribute(CHANNEL_ID_STRING) || '';
118
+ }
119
+
120
+ set channelId(val) {
121
+ if (val) {
122
+ this.setAttribute(CHANNEL_ID_STRING, val);
123
+ } else {
124
+ this.removeAttribute(CHANNEL_ID_STRING);
125
+ }
126
+ }
127
+
128
+ get position(): VideoModulePosition {
129
+ const number = Number(this.getAttribute(POSITION_STRING));
130
+ return isNaN(number)
131
+ ? VideoModulePosition.PositionPreEncoder |
132
+ VideoModulePosition.PositionPreRenderer
133
+ : number;
134
+ }
135
+
136
+ set position(val) {
137
+ if (val) {
138
+ this.setAttribute(POSITION_STRING, String(val));
139
+ } else {
140
+ this.removeAttribute(POSITION_STRING);
141
+ }
142
+ }
143
+
144
+ get renderMode(): RenderModeType {
145
+ const number = Number(
146
+ this.getAttribute(RENDERER_CONTENT_MODE_STRING) ||
147
+ RenderModeType.RenderModeFit
148
+ );
149
+ return isNaN(number) ? RenderModeType.RenderModeFit : number;
150
+ }
151
+
152
+ set renderMode(val) {
153
+ if (val) {
154
+ this.setAttribute(RENDERER_CONTENT_MODE_STRING, String(val));
155
+ } else {
156
+ this.removeAttribute(RENDERER_CONTENT_MODE_STRING);
157
+ }
158
+ }
159
+
160
+ get renderMirror(): boolean {
161
+ return this.getAttribute(RENDERER_MIRROR_STRING) === 'true';
162
+ }
163
+
164
+ set renderMirror(val) {
165
+ if (val) {
166
+ this.setAttribute(RENDERER_MIRROR_STRING, String(val));
167
+ } else {
168
+ this.removeAttribute(RENDERER_MIRROR_STRING);
169
+ }
170
+ }
171
+
172
+ get enableAlphaMask(): boolean {
173
+ return this.getAttribute(ENABLE_ALPHA_MASK_STRING) === 'true';
174
+ }
175
+
176
+ set enableAlphaMask(val) {
177
+ if (val) {
178
+ this.setAttribute(ENABLE_ALPHA_MASK_STRING, String(val));
179
+ } else {
180
+ this.removeAttribute(ENABLE_ALPHA_MASK_STRING);
181
+ }
182
+ }
183
+
184
+ constructor() {
185
+ super();
186
+ }
187
+
188
+ initializeRender = () => {
189
+ const {
190
+ channelId,
191
+ uid,
192
+ sourceType,
193
+ position,
194
+ renderMode,
195
+ renderMirror,
196
+ enableAlphaMask,
197
+ } = this;
198
+ AgoraEnv.AgoraRendererManager?.addOrRemoveRenderer({
199
+ sourceType,
200
+ view: this,
201
+ uid,
202
+ channelId,
203
+ position,
204
+ renderMode,
205
+ mirrorMode: renderMirror
206
+ ? VideoMirrorModeType.VideoMirrorModeEnabled
207
+ : VideoMirrorModeType.VideoMirrorModeDisabled,
208
+ setupMode: VideoViewSetupMode.VideoViewSetupReplace,
209
+ enableAlphaMask,
210
+ });
211
+ };
212
+
213
+ destroyRender = () => {
214
+ const { channelId, uid, sourceType, position, enableAlphaMask } = this;
215
+ AgoraEnv.AgoraRendererManager?.removeRendererFromCache({
216
+ channelId,
217
+ position,
218
+ uid,
219
+ sourceType,
220
+ view: this,
221
+ enableAlphaMask,
222
+ });
223
+ };
224
+
225
+ connectedCallback() {
226
+ this.isConnectedCallback = true;
227
+ this.initializeRender();
228
+ }
229
+
230
+ attributeChangedCallback(attrName: string, oldVal: any, newVal: any) {
231
+ if (!this.isConnectedCallback) {
232
+ return;
233
+ }
234
+ const isSetRenderOption = [
235
+ RENDERER_CONTENT_MODE_STRING,
236
+ RENDERER_MIRROR_STRING,
237
+ ENABLE_ALPHA_MASK_STRING,
238
+ ].includes(attrName);
239
+
240
+ if (isSetRenderOption) {
241
+ AgoraEnv.AgoraRendererManager?.setRendererContext({
242
+ view: this,
243
+ renderMode: this.renderMode,
244
+ mirrorMode: this.renderMirror
245
+ ? VideoMirrorModeType.VideoMirrorModeEnabled
246
+ : VideoMirrorModeType.VideoMirrorModeDisabled,
247
+ enableAlphaMask: this.enableAlphaMask,
248
+ });
249
+ return;
250
+ }
251
+ const isNeedReInitialize = observedAttributes.includes(attrName);
252
+ if (!isNeedReInitialize) {
253
+ return;
254
+ }
255
+ this.initializeRender();
256
+ }
257
+
258
+ disconnectedCallback() {
259
+ this.isConnectedCallback = false;
260
+ this.destroyRender();
261
+ }
262
+ }
263
+
264
+ window.customElements.define('agora-view', AgoraView);
@@ -0,0 +1,126 @@
1
+ import semver from 'semver';
2
+
3
+ import createAgoraRtcEngine from '../AgoraSdk';
4
+
5
+ import {
6
+ GpuInfo,
7
+ VideoDecodeAcceleratorSupportedProfile,
8
+ } from '../Decoder/gpu-utils';
9
+ import { VideoCodecType } from '../Private/AgoraBase';
10
+ import { IRtcEngineEx } from '../Private/IAgoraRtcEngineEx';
11
+ import { ipcSend } from '../Private/ipc/renderer';
12
+
13
+ import { IPCMessageType, VideoFallbackStrategy, codecMapping } from '../Types';
14
+ import { AgoraEnv, logError, logInfo } from '../Utils';
15
+
16
+ /**
17
+ * @ignore
18
+ */
19
+ export class CapabilityManager {
20
+ gpuInfo: GpuInfo = new GpuInfo();
21
+ frameCodecMapping: {
22
+ [key in VideoCodecType]?: VideoDecodeAcceleratorSupportedProfile;
23
+ } = {};
24
+ webCodecsDecoderEnabled: boolean = AgoraEnv.enableWebCodecsDecoder;
25
+ private _engine: IRtcEngineEx;
26
+
27
+ setWebCodecsDecoderEnabled(enabled: boolean): void {
28
+ this.webCodecsDecoderEnabled = enabled;
29
+ }
30
+
31
+ constructor() {
32
+ this._engine = createAgoraRtcEngine();
33
+ if (AgoraEnv.enableWebCodecsDecoder) {
34
+ this.getGpuInfo(() => {
35
+ if (
36
+ AgoraEnv.videoFallbackStrategy ===
37
+ VideoFallbackStrategy.PerformancePriority
38
+ ) {
39
+ if (!this.isSupportedH265()) {
40
+ if (this.isSupportedH264()) {
41
+ this._engine.setParameters(
42
+ JSON.stringify({ 'che.video.h265_dec_enable': false })
43
+ );
44
+ logInfo(
45
+ 'the videoFallbackStrategy is PerformancePriority, H265 is not supported, fallback to H264'
46
+ );
47
+ } else {
48
+ this.webCodecsDecoderEnabled = false;
49
+ logInfo(
50
+ 'the videoFallbackStrategy is PerformancePriority, H264 and H265 are not supported, fallback to native decoder'
51
+ );
52
+ }
53
+ }
54
+ } else if (
55
+ AgoraEnv.videoFallbackStrategy ===
56
+ VideoFallbackStrategy.BandwidthPriority
57
+ ) {
58
+ if (!this.isSupportedH265()) {
59
+ this.webCodecsDecoderEnabled = false;
60
+ logInfo(
61
+ 'the videoFallbackStrategy is BandwidthPriority, H265 is not supported, fallback to native decoder'
62
+ );
63
+ }
64
+ }
65
+ });
66
+ }
67
+ }
68
+
69
+ public getGpuInfo(callback?: () => void): void {
70
+ //getGpuInfo and videoDecoder is not supported in electron version < 22.0.0
71
+ //@ts-ignore
72
+ if (semver.lt(process.versions.electron, '22.0.0')) {
73
+ logError(
74
+ 'WebCodecsDecoder is not supported in electron version < 22.0.0, please upgrade electron to 22.0.0 or later.'
75
+ );
76
+ return;
77
+ }
78
+ //@ts-ignore
79
+ if (process.type === 'renderer') {
80
+ ipcSend(IPCMessageType.AGORA_IPC_GET_GPU_INFO)
81
+ .then((result) => {
82
+ this.gpuInfo.videoDecodeAcceleratorSupportedProfile = result;
83
+ this.webCodecsDecoderEnabled = (AgoraEnv.enableWebCodecsDecoder &&
84
+ this.gpuInfo.videoDecodeAcceleratorSupportedProfile.length > 0)!;
85
+
86
+ result.forEach((profile: VideoDecodeAcceleratorSupportedProfile) => {
87
+ const match = codecMapping.find((item) =>
88
+ profile.codec.includes(item.profile)
89
+ );
90
+ if (match) {
91
+ //Normally, the range of compatible widths and heights should be the same under the same codec.
92
+ //there is no need to differentiate between different profiles. This could be optimized in the future.
93
+ this.frameCodecMapping[match.type] = {
94
+ codec: match.codec,
95
+ minWidth: profile.minWidth,
96
+ minHeight: profile.minHeight,
97
+ maxWidth: profile.maxWidth,
98
+ maxHeight: profile.maxHeight,
99
+ };
100
+ }
101
+ });
102
+ callback && callback();
103
+ })
104
+ .catch((error) => {
105
+ logError(
106
+ 'Failed to get GPU info, please check if you are already import agora-electron-sdk in the main process.',
107
+ error
108
+ );
109
+ });
110
+ } else {
111
+ logError('This function only works in renderer process');
112
+ }
113
+ }
114
+
115
+ public isSupportedH264(): boolean {
116
+ return this.frameCodecMapping[VideoCodecType.VideoCodecH264] !== undefined;
117
+ }
118
+
119
+ public isSupportedH265(): boolean {
120
+ return this.frameCodecMapping[VideoCodecType.VideoCodecH265] !== undefined;
121
+ }
122
+
123
+ release(): void {
124
+ AgoraEnv.enableWebCodecsDecoder = false;
125
+ }
126
+ }
@@ -0,0 +1,163 @@
1
+ import { VideoMirrorModeType } from '../Private/AgoraBase';
2
+ import { RenderModeType, VideoFrame } from '../Private/AgoraMediaBase';
3
+ import { CodecConfigInfo, RendererContext, RendererType } from '../Types';
4
+
5
+ export abstract class IRenderer {
6
+ parentElement?: HTMLElement;
7
+ container?: HTMLElement;
8
+ canvas?: HTMLCanvasElement;
9
+ rendererType: RendererType | undefined;
10
+ context: RendererContext = {};
11
+ private _frameCount = 0;
12
+ private _startTime: number | null = null;
13
+
14
+ public bind(context: RendererContext) {
15
+ this.parentElement = context.view;
16
+ this.container = document.createElement('div');
17
+ Object.assign(this.container.style, {
18
+ width: '100%',
19
+ height: '100%',
20
+ display: 'flex',
21
+ justifyContent: 'center',
22
+ alignItems: 'center',
23
+ overflow: 'hidden',
24
+ });
25
+ this.parentElement?.appendChild(this.container);
26
+ this.canvas = document.createElement('canvas');
27
+ this.canvas.style.display = 'none';
28
+ this.container.appendChild(this.canvas);
29
+ }
30
+
31
+ public unbind() {
32
+ if (this.container && this.canvas?.parentNode === this.container) {
33
+ this.container.removeChild(this.canvas);
34
+ }
35
+ if (
36
+ this.parentElement &&
37
+ this.container?.parentNode === this.parentElement
38
+ ) {
39
+ this.parentElement.removeChild(this.container);
40
+ }
41
+
42
+ this.canvas = undefined;
43
+ this.container = undefined;
44
+ this.parentElement = undefined;
45
+ }
46
+
47
+ public drawFrame(
48
+ uid: number,
49
+ _videoFrame?: VideoFrame,
50
+ _codecConfig?: CodecConfigInfo
51
+ ): void {
52
+ if (!this.canvas) return;
53
+ if (this.canvas.style.display !== '') {
54
+ this.canvas.style.display = '';
55
+ }
56
+ }
57
+
58
+ public setContext(context: RendererContext) {
59
+ if (this.context.renderMode !== context.renderMode) {
60
+ this.context.renderMode = context.renderMode;
61
+ this.updateRenderMode();
62
+ }
63
+
64
+ if (this.context.mirrorMode !== context.mirrorMode) {
65
+ this.context.mirrorMode = context.mirrorMode;
66
+ this.updateMirrorMode();
67
+ }
68
+
69
+ if (this.context.enableAlphaMask !== context.enableAlphaMask) {
70
+ this.context.enableAlphaMask = context.enableAlphaMask;
71
+ }
72
+ this.context = { ...this.context, ...context };
73
+ }
74
+
75
+ protected updateRenderMode(): void {
76
+ if (!this.canvas || !this.container) return;
77
+
78
+ const { clientWidth, clientHeight } = this.container;
79
+ const { width, height } = this.canvas;
80
+
81
+ const containerAspectRatio = clientWidth / clientHeight;
82
+ const canvasAspectRatio = width / height;
83
+ const widthScale = clientWidth / width;
84
+ const heightScale = clientHeight / height;
85
+ const isHidden =
86
+ this.context.renderMode === RenderModeType.RenderModeHidden;
87
+
88
+ let scale = 1;
89
+ // If container's aspect ratio is larger than canvas's aspect ratio
90
+ if (containerAspectRatio > canvasAspectRatio) {
91
+ // Scale canvas to fit container's width on hidden mode
92
+ // Scale canvas to fit container's height on fit mode
93
+ scale = isHidden ? widthScale : heightScale;
94
+ } else {
95
+ // Scale canvas to fit container's height on hidden mode
96
+ // Scale canvas to fit container's width on fit mode
97
+ scale = isHidden ? heightScale : widthScale;
98
+ }
99
+ this.canvas.style.transform = `scale(${scale})`;
100
+ }
101
+
102
+ protected updateMirrorMode(): void {
103
+ if (!this.parentElement) return;
104
+
105
+ Object.assign(this.parentElement.style, {
106
+ transform:
107
+ this.context.mirrorMode === VideoMirrorModeType.VideoMirrorModeEnabled
108
+ ? 'rotateY(180deg)'
109
+ : '',
110
+ });
111
+ }
112
+
113
+ protected rotateCanvas({ width, height, rotation }: VideoFrame): void {
114
+ if (!this.canvas) return;
115
+
116
+ if (rotation === 0 || rotation === 180) {
117
+ this.canvas.width = width!;
118
+ this.canvas.height = height!;
119
+ } else if (rotation === 90 || rotation === 270) {
120
+ this.canvas.height = width!;
121
+ this.canvas.width = height!;
122
+ } else {
123
+ throw new Error(
124
+ `Invalid rotation: ${rotation}, only 0, 90, 180, 270 are supported`
125
+ );
126
+ }
127
+ }
128
+
129
+ public getFps(): number {
130
+ let fps = 0;
131
+ if (!this.context.enableFps || !this.container) {
132
+ return fps;
133
+ }
134
+ if (this._startTime == null) {
135
+ this._startTime = performance.now();
136
+ } else {
137
+ const elapsed = (performance.now() - this._startTime) / 1000;
138
+ fps = ++this._frameCount / elapsed;
139
+ }
140
+
141
+ let span = this.container.querySelector('span');
142
+ if (!span) {
143
+ span = document.createElement('span');
144
+
145
+ Object.assign(span.style, {
146
+ position: 'absolute',
147
+ bottom: '0',
148
+ left: '0',
149
+ zIndex: '10',
150
+ width: '55px',
151
+ background: '#fff',
152
+ });
153
+
154
+ this.container.style.position = 'relative';
155
+
156
+ this.container.appendChild(span);
157
+ }
158
+
159
+ span.innerText = `fps: ${fps.toFixed(0)}`;
160
+
161
+ return fps;
162
+ }
163
+ }
@@ -0,0 +1,130 @@
1
+ import { VideoSourceType } from '../Private/AgoraMediaBase';
2
+ import { RtcConnection } from '../Private/IAgoraRtcEngineEx';
3
+
4
+ import { RendererCacheContext, RendererContext } from '../Types';
5
+
6
+ import { IRenderer } from './IRenderer';
7
+
8
+ /**
9
+ * @ignore
10
+ */
11
+ export function generateRendererCacheKey({
12
+ channelId,
13
+ uid,
14
+ sourceType,
15
+ }: RendererContext): string {
16
+ return `${channelId}_${uid}_${sourceType}`;
17
+ }
18
+
19
+ /**
20
+ * @ignore
21
+ */
22
+ export function isUseConnection(context: RendererCacheContext): boolean {
23
+ // if RtcConnection is not undefined, then use connection
24
+ return !!context.channelId && context.localUid !== undefined;
25
+ }
26
+
27
+ export abstract class IRendererCache {
28
+ renderers: IRenderer[];
29
+ cacheContext: RendererCacheContext;
30
+ callbackContext: { connection: RtcConnection; sourceType: VideoSourceType };
31
+
32
+ // 性能统计数据
33
+ public actualFps: number = 0;
34
+ public avgFrameTime: number = 0;
35
+ public maxFrameTime: number = 0;
36
+ public minFrameTime: number = 0;
37
+ public avgFrameInterval: number = 0;
38
+ public maxFrameInterval: number = 0;
39
+ public minFrameInterval: number = 0;
40
+
41
+ constructor({
42
+ channelId,
43
+ uid,
44
+ useWebCodecsDecoder,
45
+ enableFps,
46
+ sourceType,
47
+ localUid,
48
+ position,
49
+ enableAlphaMask,
50
+ }: RendererContext) {
51
+ this.renderers = [];
52
+ this.cacheContext = {
53
+ channelId,
54
+ uid,
55
+ useWebCodecsDecoder,
56
+ enableFps,
57
+ sourceType,
58
+ localUid,
59
+ position,
60
+ enableAlphaMask,
61
+ };
62
+ this.callbackContext = {
63
+ connection: { channelId, localUid },
64
+ sourceType: sourceType!,
65
+ };
66
+ }
67
+
68
+ public setCallbackContext(
69
+ connection: RtcConnection,
70
+ sourceType: VideoSourceType
71
+ ): void {
72
+ this.callbackContext = { connection, sourceType };
73
+ }
74
+
75
+ public get key(): string {
76
+ return generateRendererCacheKey(this.cacheContext);
77
+ }
78
+
79
+ public abstract draw(): void;
80
+
81
+ public findRenderer(view: Element): IRenderer | undefined {
82
+ return this.renderers.find((renderer) => renderer.parentElement === view);
83
+ }
84
+
85
+ public addRenderer(renderer: IRenderer): void {
86
+ this.renderers.push(renderer);
87
+ }
88
+
89
+ /**
90
+ * Remove the specified renderer if it is specified, otherwise remove all renderers
91
+ */
92
+ public removeRenderer(renderer?: IRenderer): void {
93
+ let start = 0;
94
+ let deleteCount = this.renderers.length;
95
+ if (renderer) {
96
+ start = this.renderers.indexOf(renderer);
97
+ if (start < 0) return;
98
+ deleteCount = 1;
99
+ }
100
+ this.renderers.splice(start, deleteCount).forEach((it) => it.unbind());
101
+ }
102
+
103
+ public setRendererContext(context: RendererContext): boolean {
104
+ if (context.view) {
105
+ const renderer = this.findRenderer(context.view);
106
+ if (renderer) {
107
+ renderer.setContext(context);
108
+ return true;
109
+ }
110
+ return false;
111
+ } else {
112
+ this.renderers.forEach((it) => {
113
+ it.setContext(context);
114
+ });
115
+ return this.renderers.length > 0;
116
+ }
117
+ }
118
+
119
+ public abstract fetchVideoFrame(): {
120
+ hasMoreFrame: boolean;
121
+ needRender: boolean;
122
+ };
123
+ public abstract renderFrame(): void;
124
+ public abstract startRendering(): void;
125
+ public abstract stopRendering(): void;
126
+
127
+ public release(): void {
128
+ this.removeRenderer();
129
+ }
130
+ }