agora-electron-sdk 4.5.2 → 4.5.3-dev.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -0
- package/README.md +6 -3
- package/js/example/src/renderer/examples/advanced/VideoEffect/videoEffectHelpers.js +395 -0
- package/js/{AgoraSdk.js → ts/AgoraSdk.js} +2 -12
- package/js/{Decoder → ts/Decoder}/index.js +1 -1
- package/js/{Private → ts/Private}/AgoraBase.js +829 -674
- package/js/{Private → ts/Private}/AgoraMediaBase.js +154 -151
- package/js/{Private → ts/Private}/AgoraMediaPlayerTypes.js +58 -54
- package/js/{Private → ts/Private}/IAgoraLog.js +13 -13
- package/js/{Private → ts/Private}/IAgoraMediaEngine.js +4 -4
- package/js/{Private → ts/Private}/IAgoraMediaPlayer.js +2 -2
- package/js/{Private → ts/Private}/IAgoraMusicContentCenter.js +1 -1
- package/js/{Private → ts/Private}/IAgoraRhythmPlayer.js +13 -13
- package/js/{Private → ts/Private}/IAgoraRtcEngine.js +150 -94
- package/js/{Private → ts/Private}/IAgoraRtcEngineEx.js +3 -3
- package/js/{Private → ts/Private}/IAgoraSpatialAudio.js +4 -4
- package/js/{Private → ts/Private}/IAudioDeviceManager.js +2 -2
- package/js/{Private → ts/Private}/impl/IAgoraMediaPlayerImpl.js +10 -0
- package/js/{Private → ts/Private}/impl/IAgoraRtcEngineExImpl.js +74 -0
- package/js/{Private → ts/Private}/impl/IAgoraRtcEngineImpl.js +233 -1
- package/js/{Private → ts/Private}/internal/IrisApiEngine.js +45 -0
- package/js/{Private → ts/Private}/internal/RtcEngineExInternal.js +74 -4
- package/js/ts/Private/internal/VideoEffectObjectInternal.js +14 -0
- package/js/{Private → ts/Private}/ti/IAgoraRtcEngine-ti.js +2 -0
- package/js/{Renderer → ts/Renderer}/AgoraView.js +19 -2
- package/js/{Renderer → ts/Renderer}/IRenderer.js +7 -4
- package/js/{Renderer → ts/Renderer}/IRendererCache.js +17 -1
- package/js/ts/Renderer/RendererCache.js +252 -0
- package/js/{Renderer → ts/Renderer}/RendererManager.js +13 -64
- package/js/{Renderer → ts/Renderer}/WebCodecsRenderer/index.js +5 -5
- package/js/{Renderer → ts/Renderer}/WebCodecsRendererCache.js +13 -1
- package/js/{Renderer → ts/Renderer}/WebGLRenderer/index.js +179 -26
- package/js/{Renderer → ts/Renderer}/YUVCanvasRenderer/index.js +12 -5
- package/js/{Utils.js → ts/Utils.js} +7 -7
- package/package.json +25 -12
- package/scripts/checkElectron.js +4 -2
- package/scripts/download.js +102 -0
- package/scripts/downloadPrebuild.js +2 -1
- package/scripts/synclib.js +2 -2
- package/ts/AgoraSdk.ts +2 -12
- package/ts/Decoder/index.ts +5 -1
- package/ts/Private/AgoraBase.ts +1259 -1060
- package/ts/Private/AgoraMediaBase.ts +351 -324
- package/ts/Private/AgoraMediaPlayerTypes.ts +94 -91
- package/ts/Private/IAgoraLog.ts +20 -18
- package/ts/Private/IAgoraMediaEngine.ts +86 -81
- package/ts/Private/IAgoraMediaPlayer.ts +196 -181
- package/ts/Private/IAgoraMediaPlayerSource.ts +40 -40
- package/ts/Private/IAgoraMusicContentCenter.ts +3 -3
- package/ts/Private/IAgoraRhythmPlayer.ts +15 -15
- package/ts/Private/IAgoraRtcEngine.ts +2492 -2047
- package/ts/Private/IAgoraRtcEngineEx.ts +434 -335
- package/ts/Private/IAgoraSpatialAudio.ts +43 -45
- package/ts/Private/IAudioDeviceManager.ts +106 -97
- package/ts/Private/impl/IAgoraMediaPlayerImpl.ts +12 -0
- package/ts/Private/impl/IAgoraRtcEngineExImpl.ts +138 -0
- package/ts/Private/impl/IAgoraRtcEngineImpl.ts +331 -0
- package/ts/Private/internal/IrisApiEngine.ts +47 -0
- package/ts/Private/internal/RtcEngineExInternal.ts +106 -9
- package/ts/Private/internal/VideoEffectObjectInternal.ts +14 -0
- package/ts/Private/ti/IAgoraRtcEngine-ti.ts +2 -0
- package/ts/Renderer/AgoraView.ts +32 -3
- package/ts/Renderer/IRenderer.ts +8 -3
- package/ts/Renderer/IRendererCache.ts +33 -0
- package/ts/Renderer/RendererCache.ts +211 -12
- package/ts/Renderer/RendererManager.ts +21 -99
- package/ts/Renderer/WebCodecsRenderer/index.ts +9 -6
- package/ts/Renderer/WebCodecsRendererCache.ts +17 -1
- package/ts/Renderer/WebGLRenderer/index.ts +246 -40
- package/ts/Renderer/YUVCanvasRenderer/index.ts +29 -16
- package/ts/Types.ts +14 -9
- package/ts/Utils.ts +8 -7
- package/types/example/src/renderer/examples/advanced/VideoEffect/videoEffectHelpers.d.ts +168 -0
- package/types/example/src/renderer/examples/advanced/VideoEffect/videoEffectHelpers.d.ts.map +1 -0
- package/types/{AgoraSdk.d.ts → ts/AgoraSdk.d.ts} +2 -12
- package/types/ts/AgoraSdk.d.ts.map +1 -0
- package/types/ts/Decoder/gpu-utils.d.ts.map +1 -0
- package/types/ts/Decoder/index.d.ts.map +1 -0
- package/types/ts/Private/AgoraBase.d.ts +5504 -0
- package/types/ts/Private/AgoraBase.d.ts.map +1 -0
- package/types/ts/Private/AgoraMediaBase.d.ts +1695 -0
- package/types/ts/Private/AgoraMediaBase.d.ts.map +1 -0
- package/types/ts/Private/AgoraMediaPlayerTypes.d.ts +456 -0
- package/types/ts/Private/AgoraMediaPlayerTypes.d.ts.map +1 -0
- package/types/ts/Private/IAgoraH265Transcoder.d.ts.map +1 -0
- package/types/ts/Private/IAgoraLog.d.ts +91 -0
- package/types/ts/Private/IAgoraLog.d.ts.map +1 -0
- package/types/ts/Private/IAgoraMediaEngine.d.ts +255 -0
- package/types/ts/Private/IAgoraMediaEngine.d.ts.map +1 -0
- package/types/ts/Private/IAgoraMediaPlayer.d.ts +662 -0
- package/types/ts/Private/IAgoraMediaPlayer.d.ts.map +1 -0
- package/types/ts/Private/IAgoraMediaPlayerSource.d.ts +109 -0
- package/types/ts/Private/IAgoraMediaPlayerSource.d.ts.map +1 -0
- package/types/ts/Private/IAgoraMediaRecorder.d.ts.map +1 -0
- package/types/ts/Private/IAgoraMediaStreamingSource.d.ts.map +1 -0
- package/types/{Private → ts/Private}/IAgoraMusicContentCenter.d.ts +3 -3
- package/types/ts/Private/IAgoraMusicContentCenter.d.ts.map +1 -0
- package/types/ts/Private/IAgoraRhythmPlayer.d.ts +65 -0
- package/types/ts/Private/IAgoraRhythmPlayer.d.ts.map +1 -0
- package/types/ts/Private/IAgoraRtcEngine.d.ts +6504 -0
- package/types/ts/Private/IAgoraRtcEngine.d.ts.map +1 -0
- package/types/ts/Private/IAgoraRtcEngineEx.d.ts +817 -0
- package/types/ts/Private/IAgoraRtcEngineEx.d.ts.map +1 -0
- package/types/ts/Private/IAgoraSpatialAudio.d.ts +194 -0
- package/types/ts/Private/IAgoraSpatialAudio.d.ts.map +1 -0
- package/types/ts/Private/IAudioDeviceManager.d.ts +321 -0
- package/types/ts/Private/IAudioDeviceManager.d.ts.map +1 -0
- package/types/ts/Private/extension/AgoraBaseExtension.d.ts.map +1 -0
- package/types/ts/Private/extension/AgoraMediaBaseExtension.d.ts.map +1 -0
- package/types/ts/Private/extension/AgoraMediaPlayerTypesExtension.d.ts.map +1 -0
- package/types/ts/Private/extension/IAgoraH265TranscoderExtension.d.ts.map +1 -0
- package/types/ts/Private/extension/IAgoraLogExtension.d.ts.map +1 -0
- package/types/ts/Private/extension/IAgoraMediaEngineExtension.d.ts.map +1 -0
- package/types/ts/Private/extension/IAgoraMediaPlayerExtension.d.ts.map +1 -0
- package/types/ts/Private/extension/IAgoraMediaPlayerSourceExtension.d.ts.map +1 -0
- package/types/ts/Private/extension/IAgoraMediaRecorderExtension.d.ts.map +1 -0
- package/types/ts/Private/extension/IAgoraMusicContentCenterExtension.d.ts.map +1 -0
- package/types/ts/Private/extension/IAgoraRhythmPlayerExtension.d.ts.map +1 -0
- package/types/ts/Private/extension/IAgoraRtcEngineExExtension.d.ts.map +1 -0
- package/types/ts/Private/extension/IAgoraRtcEngineExtension.d.ts.map +1 -0
- package/types/ts/Private/extension/IAgoraSpatialAudioExtension.d.ts.map +1 -0
- package/types/ts/Private/extension/IAudioDeviceManagerExtension.d.ts.map +1 -0
- package/types/ts/Private/impl/AgoraBaseImpl.d.ts.map +1 -0
- package/types/ts/Private/impl/AgoraMediaBaseImpl.d.ts.map +1 -0
- package/types/ts/Private/impl/IAgoraH265TranscoderImpl.d.ts.map +1 -0
- package/types/ts/Private/impl/IAgoraMediaEngineImpl.d.ts.map +1 -0
- package/types/{Private → ts/Private}/impl/IAgoraMediaPlayerImpl.d.ts +2 -0
- package/types/ts/Private/impl/IAgoraMediaPlayerImpl.d.ts.map +1 -0
- package/types/ts/Private/impl/IAgoraMediaPlayerSourceImpl.d.ts.map +1 -0
- package/types/ts/Private/impl/IAgoraMediaRecorderImpl.d.ts.map +1 -0
- package/types/ts/Private/impl/IAgoraMusicContentCenterImpl.d.ts.map +1 -0
- package/types/{Private → ts/Private}/impl/IAgoraRtcEngineExImpl.d.ts +7 -1
- package/types/ts/Private/impl/IAgoraRtcEngineExImpl.d.ts.map +1 -0
- package/types/{Private → ts/Private}/impl/IAgoraRtcEngineImpl.d.ts +27 -1
- package/types/ts/Private/impl/IAgoraRtcEngineImpl.d.ts.map +1 -0
- package/types/ts/Private/impl/IAgoraSpatialAudioImpl.d.ts.map +1 -0
- package/types/ts/Private/impl/IAudioDeviceManagerImpl.d.ts.map +1 -0
- package/types/ts/Private/internal/AgoraH265TranscoderInternal.d.ts.map +1 -0
- package/types/ts/Private/internal/AgoraMediaBaseInternal.d.ts.map +1 -0
- package/types/ts/Private/internal/AudioDeviceManagerInternal.d.ts.map +1 -0
- package/types/ts/Private/internal/IrisApiEngine.d.ts.map +1 -0
- package/types/ts/Private/internal/LocalSpatialAudioEngineInternal.d.ts.map +1 -0
- package/types/ts/Private/internal/MediaEngineInternal.d.ts.map +1 -0
- package/types/ts/Private/internal/MediaPlayerInternal.d.ts.map +1 -0
- package/types/ts/Private/internal/MediaRecorderInternal.d.ts.map +1 -0
- package/types/ts/Private/internal/MusicContentCenterInternal.d.ts.map +1 -0
- package/types/{Private → ts/Private}/internal/RtcEngineExInternal.d.ts +10 -4
- package/types/ts/Private/internal/RtcEngineExInternal.d.ts.map +1 -0
- package/types/ts/Private/internal/VideoEffectObjectInternal.d.ts +7 -0
- package/types/ts/Private/internal/VideoEffectObjectInternal.d.ts.map +1 -0
- package/types/{Private → ts/Private}/ipc/main.d.ts.map +1 -1
- package/types/ts/Private/ipc/renderer.d.ts.map +1 -0
- package/types/ts/Private/ti/AgoraBase-ti.d.ts.map +1 -0
- package/types/ts/Private/ti/AgoraMediaBase-ti.d.ts.map +1 -0
- package/types/ts/Private/ti/AgoraMediaPlayerTypes-ti.d.ts.map +1 -0
- package/types/ts/Private/ti/IAgoraH265Transcoder-ti.d.ts.map +1 -0
- package/types/ts/Private/ti/IAgoraLog-ti.d.ts.map +1 -0
- package/types/ts/Private/ti/IAgoraMediaEngine-ti.d.ts.map +1 -0
- package/types/ts/Private/ti/IAgoraMediaPlayer-ti.d.ts.map +1 -0
- package/types/ts/Private/ti/IAgoraMediaPlayerSource-ti.d.ts.map +1 -0
- package/types/ts/Private/ti/IAgoraMediaRecorder-ti.d.ts.map +1 -0
- package/types/ts/Private/ti/IAgoraMediaStreamingSource-ti.d.ts.map +1 -0
- package/types/ts/Private/ti/IAgoraMusicContentCenter-ti.d.ts.map +1 -0
- package/types/ts/Private/ti/IAgoraRhythmPlayer-ti.d.ts.map +1 -0
- package/types/ts/Private/ti/IAgoraRtcEngine-ti.d.ts.map +1 -0
- package/types/ts/Private/ti/IAgoraRtcEngineEx-ti.d.ts.map +1 -0
- package/types/ts/Private/ti/IAgoraSpatialAudio-ti.d.ts.map +1 -0
- package/types/ts/Private/ti/IAudioDeviceManager-ti.d.ts.map +1 -0
- package/types/{Renderer → ts/Renderer}/AgoraView.d.ts +6 -0
- package/types/ts/Renderer/AgoraView.d.ts.map +1 -0
- package/types/ts/Renderer/CapabilityManager.d.ts.map +1 -0
- package/types/{Renderer → ts/Renderer}/IRenderer.d.ts +2 -2
- package/types/ts/Renderer/IRenderer.d.ts.map +1 -0
- package/types/{Renderer → ts/Renderer}/IRendererCache.d.ts +21 -1
- package/types/ts/Renderer/IRendererCache.d.ts.map +1 -0
- package/types/{Renderer → ts/Renderer}/RendererCache.d.ts +27 -0
- package/types/ts/Renderer/RendererCache.d.ts.map +1 -0
- package/types/{Renderer → ts/Renderer}/RendererManager.d.ts +4 -17
- package/types/ts/Renderer/RendererManager.d.ts.map +1 -0
- package/types/{Renderer → ts/Renderer}/WebCodecsRenderer/index.d.ts +3 -3
- package/types/ts/Renderer/WebCodecsRenderer/index.d.ts.map +1 -0
- package/types/{Renderer → ts/Renderer}/WebCodecsRendererCache.d.ts +7 -0
- package/types/ts/Renderer/WebCodecsRendererCache.d.ts.map +1 -0
- package/types/{Renderer → ts/Renderer}/WebGLRenderer/index.d.ts +12 -2
- package/types/ts/Renderer/WebGLRenderer/index.d.ts.map +1 -0
- package/types/ts/Renderer/WebGLRenderer/webgl-utils.d.ts.map +1 -0
- package/types/ts/Renderer/YUVCanvasRenderer/index.d.ts +10 -0
- package/types/ts/Renderer/YUVCanvasRenderer/index.d.ts.map +1 -0
- package/types/ts/Renderer/index.d.ts.map +1 -0
- package/types/{Types.d.ts → ts/Types.d.ts} +11 -6
- package/types/ts/Types.d.ts.map +1 -0
- package/types/{Utils.d.ts → ts/Utils.d.ts} +1 -1
- package/types/ts/Utils.d.ts.map +1 -0
- package/js/Renderer/RendererCache.js +0 -100
- package/types/AgoraSdk.d.ts.map +0 -1
- package/types/Decoder/gpu-utils.d.ts.map +0 -1
- package/types/Decoder/index.d.ts.map +0 -1
- package/types/Private/AgoraBase.d.ts +0 -5310
- package/types/Private/AgoraBase.d.ts.map +0 -1
- package/types/Private/AgoraMediaBase.d.ts +0 -1668
- package/types/Private/AgoraMediaBase.d.ts.map +0 -1
- package/types/Private/AgoraMediaPlayerTypes.d.ts +0 -453
- package/types/Private/AgoraMediaPlayerTypes.d.ts.map +0 -1
- package/types/Private/IAgoraH265Transcoder.d.ts.map +0 -1
- package/types/Private/IAgoraLog.d.ts +0 -89
- package/types/Private/IAgoraLog.d.ts.map +0 -1
- package/types/Private/IAgoraMediaEngine.d.ts +0 -250
- package/types/Private/IAgoraMediaEngine.d.ts.map +0 -1
- package/types/Private/IAgoraMediaPlayer.d.ts +0 -648
- package/types/Private/IAgoraMediaPlayer.d.ts.map +0 -1
- package/types/Private/IAgoraMediaPlayerSource.d.ts +0 -109
- package/types/Private/IAgoraMediaPlayerSource.d.ts.map +0 -1
- package/types/Private/IAgoraMediaRecorder.d.ts.map +0 -1
- package/types/Private/IAgoraMediaStreamingSource.d.ts.map +0 -1
- package/types/Private/IAgoraMusicContentCenter.d.ts.map +0 -1
- package/types/Private/IAgoraRhythmPlayer.d.ts +0 -65
- package/types/Private/IAgoraRhythmPlayer.d.ts.map +0 -1
- package/types/Private/IAgoraRtcEngine.d.ts +0 -6103
- package/types/Private/IAgoraRtcEngine.d.ts.map +0 -1
- package/types/Private/IAgoraRtcEngineEx.d.ts +0 -741
- package/types/Private/IAgoraRtcEngineEx.d.ts.map +0 -1
- package/types/Private/IAgoraSpatialAudio.d.ts +0 -196
- package/types/Private/IAgoraSpatialAudio.d.ts.map +0 -1
- package/types/Private/IAudioDeviceManager.d.ts +0 -312
- package/types/Private/IAudioDeviceManager.d.ts.map +0 -1
- package/types/Private/extension/AgoraBaseExtension.d.ts.map +0 -1
- package/types/Private/extension/AgoraMediaBaseExtension.d.ts.map +0 -1
- package/types/Private/extension/AgoraMediaPlayerTypesExtension.d.ts.map +0 -1
- package/types/Private/extension/IAgoraH265TranscoderExtension.d.ts.map +0 -1
- package/types/Private/extension/IAgoraLogExtension.d.ts.map +0 -1
- package/types/Private/extension/IAgoraMediaEngineExtension.d.ts.map +0 -1
- package/types/Private/extension/IAgoraMediaPlayerExtension.d.ts.map +0 -1
- package/types/Private/extension/IAgoraMediaPlayerSourceExtension.d.ts.map +0 -1
- package/types/Private/extension/IAgoraMediaRecorderExtension.d.ts.map +0 -1
- package/types/Private/extension/IAgoraMusicContentCenterExtension.d.ts.map +0 -1
- package/types/Private/extension/IAgoraRhythmPlayerExtension.d.ts.map +0 -1
- package/types/Private/extension/IAgoraRtcEngineExExtension.d.ts.map +0 -1
- package/types/Private/extension/IAgoraRtcEngineExtension.d.ts.map +0 -1
- package/types/Private/extension/IAgoraSpatialAudioExtension.d.ts.map +0 -1
- package/types/Private/extension/IAudioDeviceManagerExtension.d.ts.map +0 -1
- package/types/Private/impl/AgoraBaseImpl.d.ts.map +0 -1
- package/types/Private/impl/AgoraMediaBaseImpl.d.ts.map +0 -1
- package/types/Private/impl/IAgoraH265TranscoderImpl.d.ts.map +0 -1
- package/types/Private/impl/IAgoraMediaEngineImpl.d.ts.map +0 -1
- package/types/Private/impl/IAgoraMediaPlayerImpl.d.ts.map +0 -1
- package/types/Private/impl/IAgoraMediaPlayerSourceImpl.d.ts.map +0 -1
- package/types/Private/impl/IAgoraMediaRecorderImpl.d.ts.map +0 -1
- package/types/Private/impl/IAgoraMusicContentCenterImpl.d.ts.map +0 -1
- package/types/Private/impl/IAgoraRtcEngineExImpl.d.ts.map +0 -1
- package/types/Private/impl/IAgoraRtcEngineImpl.d.ts.map +0 -1
- package/types/Private/impl/IAgoraSpatialAudioImpl.d.ts.map +0 -1
- package/types/Private/impl/IAudioDeviceManagerImpl.d.ts.map +0 -1
- package/types/Private/internal/AgoraH265TranscoderInternal.d.ts.map +0 -1
- package/types/Private/internal/AgoraMediaBaseInternal.d.ts.map +0 -1
- package/types/Private/internal/AudioDeviceManagerInternal.d.ts.map +0 -1
- package/types/Private/internal/IrisApiEngine.d.ts.map +0 -1
- package/types/Private/internal/LocalSpatialAudioEngineInternal.d.ts.map +0 -1
- package/types/Private/internal/MediaEngineInternal.d.ts.map +0 -1
- package/types/Private/internal/MediaPlayerInternal.d.ts.map +0 -1
- package/types/Private/internal/MediaRecorderInternal.d.ts.map +0 -1
- package/types/Private/internal/MusicContentCenterInternal.d.ts.map +0 -1
- package/types/Private/internal/RtcEngineExInternal.d.ts.map +0 -1
- package/types/Private/ipc/renderer.d.ts.map +0 -1
- package/types/Private/ti/AgoraBase-ti.d.ts.map +0 -1
- package/types/Private/ti/AgoraMediaBase-ti.d.ts.map +0 -1
- package/types/Private/ti/AgoraMediaPlayerTypes-ti.d.ts.map +0 -1
- package/types/Private/ti/IAgoraH265Transcoder-ti.d.ts.map +0 -1
- package/types/Private/ti/IAgoraLog-ti.d.ts.map +0 -1
- package/types/Private/ti/IAgoraMediaEngine-ti.d.ts.map +0 -1
- package/types/Private/ti/IAgoraMediaPlayer-ti.d.ts.map +0 -1
- package/types/Private/ti/IAgoraMediaPlayerSource-ti.d.ts.map +0 -1
- package/types/Private/ti/IAgoraMediaRecorder-ti.d.ts.map +0 -1
- package/types/Private/ti/IAgoraMediaStreamingSource-ti.d.ts.map +0 -1
- package/types/Private/ti/IAgoraMusicContentCenter-ti.d.ts.map +0 -1
- package/types/Private/ti/IAgoraRhythmPlayer-ti.d.ts.map +0 -1
- package/types/Private/ti/IAgoraRtcEngine-ti.d.ts.map +0 -1
- package/types/Private/ti/IAgoraRtcEngineEx-ti.d.ts.map +0 -1
- package/types/Private/ti/IAgoraSpatialAudio-ti.d.ts.map +0 -1
- package/types/Private/ti/IAudioDeviceManager-ti.d.ts.map +0 -1
- package/types/Renderer/AgoraView.d.ts.map +0 -1
- package/types/Renderer/CapabilityManager.d.ts.map +0 -1
- package/types/Renderer/IRenderer.d.ts.map +0 -1
- package/types/Renderer/IRendererCache.d.ts.map +0 -1
- package/types/Renderer/RendererCache.d.ts.map +0 -1
- package/types/Renderer/RendererManager.d.ts.map +0 -1
- package/types/Renderer/WebCodecsRenderer/index.d.ts.map +0 -1
- package/types/Renderer/WebCodecsRendererCache.d.ts.map +0 -1
- package/types/Renderer/WebGLRenderer/index.d.ts.map +0 -1
- package/types/Renderer/WebGLRenderer/webgl-utils.d.ts.map +0 -1
- package/types/Renderer/YUVCanvasRenderer/index.d.ts +0 -9
- package/types/Renderer/YUVCanvasRenderer/index.d.ts.map +0 -1
- package/types/Renderer/index.d.ts.map +0 -1
- package/types/Types.d.ts.map +0 -1
- package/types/Utils.d.ts.map +0 -1
- /package/js/{Decoder → ts/Decoder}/gpu-utils.js +0 -0
- /package/js/{Private → ts/Private}/IAgoraH265Transcoder.js +0 -0
- /package/js/{Private → ts/Private}/IAgoraMediaPlayerSource.js +0 -0
- /package/js/{Private → ts/Private}/IAgoraMediaRecorder.js +0 -0
- /package/js/{Private → ts/Private}/IAgoraMediaStreamingSource.js +0 -0
- /package/js/{Private → ts/Private}/extension/AgoraBaseExtension.js +0 -0
- /package/js/{Private → ts/Private}/extension/AgoraMediaBaseExtension.js +0 -0
- /package/js/{Private → ts/Private}/extension/AgoraMediaPlayerTypesExtension.js +0 -0
- /package/js/{Private → ts/Private}/extension/IAgoraH265TranscoderExtension.js +0 -0
- /package/js/{Private → ts/Private}/extension/IAgoraLogExtension.js +0 -0
- /package/js/{Private → ts/Private}/extension/IAgoraMediaEngineExtension.js +0 -0
- /package/js/{Private → ts/Private}/extension/IAgoraMediaPlayerExtension.js +0 -0
- /package/js/{Private → ts/Private}/extension/IAgoraMediaPlayerSourceExtension.js +0 -0
- /package/js/{Private → ts/Private}/extension/IAgoraMediaRecorderExtension.js +0 -0
- /package/js/{Private → ts/Private}/extension/IAgoraMusicContentCenterExtension.js +0 -0
- /package/js/{Private → ts/Private}/extension/IAgoraRhythmPlayerExtension.js +0 -0
- /package/js/{Private → ts/Private}/extension/IAgoraRtcEngineExExtension.js +0 -0
- /package/js/{Private → ts/Private}/extension/IAgoraRtcEngineExtension.js +0 -0
- /package/js/{Private → ts/Private}/extension/IAgoraSpatialAudioExtension.js +0 -0
- /package/js/{Private → ts/Private}/extension/IAudioDeviceManagerExtension.js +0 -0
- /package/js/{Private → ts/Private}/impl/AgoraBaseImpl.js +0 -0
- /package/js/{Private → ts/Private}/impl/AgoraMediaBaseImpl.js +0 -0
- /package/js/{Private → ts/Private}/impl/IAgoraH265TranscoderImpl.js +0 -0
- /package/js/{Private → ts/Private}/impl/IAgoraMediaEngineImpl.js +0 -0
- /package/js/{Private → ts/Private}/impl/IAgoraMediaPlayerSourceImpl.js +0 -0
- /package/js/{Private → ts/Private}/impl/IAgoraMediaRecorderImpl.js +0 -0
- /package/js/{Private → ts/Private}/impl/IAgoraMusicContentCenterImpl.js +0 -0
- /package/js/{Private → ts/Private}/impl/IAgoraSpatialAudioImpl.js +0 -0
- /package/js/{Private → ts/Private}/impl/IAudioDeviceManagerImpl.js +0 -0
- /package/js/{Private → ts/Private}/internal/AgoraH265TranscoderInternal.js +0 -0
- /package/js/{Private → ts/Private}/internal/AgoraMediaBaseInternal.js +0 -0
- /package/js/{Private → ts/Private}/internal/AudioDeviceManagerInternal.js +0 -0
- /package/js/{Private → ts/Private}/internal/LocalSpatialAudioEngineInternal.js +0 -0
- /package/js/{Private → ts/Private}/internal/MediaEngineInternal.js +0 -0
- /package/js/{Private → ts/Private}/internal/MediaPlayerInternal.js +0 -0
- /package/js/{Private → ts/Private}/internal/MediaRecorderInternal.js +0 -0
- /package/js/{Private → ts/Private}/internal/MusicContentCenterInternal.js +0 -0
- /package/js/{Private → ts/Private}/ipc/main.js +0 -0
- /package/js/{Private → ts/Private}/ipc/renderer.js +0 -0
- /package/js/{Private → ts/Private}/ti/AgoraBase-ti.js +0 -0
- /package/js/{Private → ts/Private}/ti/AgoraMediaBase-ti.js +0 -0
- /package/js/{Private → ts/Private}/ti/AgoraMediaPlayerTypes-ti.js +0 -0
- /package/js/{Private → ts/Private}/ti/IAgoraH265Transcoder-ti.js +0 -0
- /package/js/{Private → ts/Private}/ti/IAgoraLog-ti.js +0 -0
- /package/js/{Private → ts/Private}/ti/IAgoraMediaEngine-ti.js +0 -0
- /package/js/{Private → ts/Private}/ti/IAgoraMediaPlayer-ti.js +0 -0
- /package/js/{Private → ts/Private}/ti/IAgoraMediaPlayerSource-ti.js +0 -0
- /package/js/{Private → ts/Private}/ti/IAgoraMediaRecorder-ti.js +0 -0
- /package/js/{Private → ts/Private}/ti/IAgoraMediaStreamingSource-ti.js +0 -0
- /package/js/{Private → ts/Private}/ti/IAgoraMusicContentCenter-ti.js +0 -0
- /package/js/{Private → ts/Private}/ti/IAgoraRhythmPlayer-ti.js +0 -0
- /package/js/{Private → ts/Private}/ti/IAgoraRtcEngineEx-ti.js +0 -0
- /package/js/{Private → ts/Private}/ti/IAgoraSpatialAudio-ti.js +0 -0
- /package/js/{Private → ts/Private}/ti/IAudioDeviceManager-ti.js +0 -0
- /package/js/{Renderer → ts/Renderer}/CapabilityManager.js +0 -0
- /package/js/{Renderer → ts/Renderer}/WebGLRenderer/webgl-utils.js +0 -0
- /package/js/{Renderer → ts/Renderer}/index.js +0 -0
- /package/js/{Types.js → ts/Types.js} +0 -0
- /package/types/{Decoder → ts/Decoder}/gpu-utils.d.ts +0 -0
- /package/types/{Decoder → ts/Decoder}/index.d.ts +0 -0
- /package/types/{Private → ts/Private}/IAgoraH265Transcoder.d.ts +0 -0
- /package/types/{Private → ts/Private}/IAgoraMediaRecorder.d.ts +0 -0
- /package/types/{Private → ts/Private}/IAgoraMediaStreamingSource.d.ts +0 -0
- /package/types/{Private → ts/Private}/extension/AgoraBaseExtension.d.ts +0 -0
- /package/types/{Private → ts/Private}/extension/AgoraMediaBaseExtension.d.ts +0 -0
- /package/types/{Private → ts/Private}/extension/AgoraMediaPlayerTypesExtension.d.ts +0 -0
- /package/types/{Private → ts/Private}/extension/IAgoraH265TranscoderExtension.d.ts +0 -0
- /package/types/{Private → ts/Private}/extension/IAgoraLogExtension.d.ts +0 -0
- /package/types/{Private → ts/Private}/extension/IAgoraMediaEngineExtension.d.ts +0 -0
- /package/types/{Private → ts/Private}/extension/IAgoraMediaPlayerExtension.d.ts +0 -0
- /package/types/{Private → ts/Private}/extension/IAgoraMediaPlayerSourceExtension.d.ts +0 -0
- /package/types/{Private → ts/Private}/extension/IAgoraMediaRecorderExtension.d.ts +0 -0
- /package/types/{Private → ts/Private}/extension/IAgoraMusicContentCenterExtension.d.ts +0 -0
- /package/types/{Private → ts/Private}/extension/IAgoraRhythmPlayerExtension.d.ts +0 -0
- /package/types/{Private → ts/Private}/extension/IAgoraRtcEngineExExtension.d.ts +0 -0
- /package/types/{Private → ts/Private}/extension/IAgoraRtcEngineExtension.d.ts +0 -0
- /package/types/{Private → ts/Private}/extension/IAgoraSpatialAudioExtension.d.ts +0 -0
- /package/types/{Private → ts/Private}/extension/IAudioDeviceManagerExtension.d.ts +0 -0
- /package/types/{Private → ts/Private}/impl/AgoraBaseImpl.d.ts +0 -0
- /package/types/{Private → ts/Private}/impl/AgoraMediaBaseImpl.d.ts +0 -0
- /package/types/{Private → ts/Private}/impl/IAgoraH265TranscoderImpl.d.ts +0 -0
- /package/types/{Private → ts/Private}/impl/IAgoraMediaEngineImpl.d.ts +0 -0
- /package/types/{Private → ts/Private}/impl/IAgoraMediaPlayerSourceImpl.d.ts +0 -0
- /package/types/{Private → ts/Private}/impl/IAgoraMediaRecorderImpl.d.ts +0 -0
- /package/types/{Private → ts/Private}/impl/IAgoraMusicContentCenterImpl.d.ts +0 -0
- /package/types/{Private → ts/Private}/impl/IAgoraSpatialAudioImpl.d.ts +0 -0
- /package/types/{Private → ts/Private}/impl/IAudioDeviceManagerImpl.d.ts +0 -0
- /package/types/{Private → ts/Private}/internal/AgoraH265TranscoderInternal.d.ts +0 -0
- /package/types/{Private → ts/Private}/internal/AgoraMediaBaseInternal.d.ts +0 -0
- /package/types/{Private → ts/Private}/internal/AudioDeviceManagerInternal.d.ts +0 -0
- /package/types/{Private → ts/Private}/internal/IrisApiEngine.d.ts +0 -0
- /package/types/{Private → ts/Private}/internal/LocalSpatialAudioEngineInternal.d.ts +0 -0
- /package/types/{Private → ts/Private}/internal/MediaEngineInternal.d.ts +0 -0
- /package/types/{Private → ts/Private}/internal/MediaPlayerInternal.d.ts +0 -0
- /package/types/{Private → ts/Private}/internal/MediaRecorderInternal.d.ts +0 -0
- /package/types/{Private → ts/Private}/internal/MusicContentCenterInternal.d.ts +0 -0
- /package/types/{Private → ts/Private}/ipc/main.d.ts +0 -0
- /package/types/{Private → ts/Private}/ipc/renderer.d.ts +0 -0
- /package/types/{Private → ts/Private}/ti/AgoraBase-ti.d.ts +0 -0
- /package/types/{Private → ts/Private}/ti/AgoraMediaBase-ti.d.ts +0 -0
- /package/types/{Private → ts/Private}/ti/AgoraMediaPlayerTypes-ti.d.ts +0 -0
- /package/types/{Private → ts/Private}/ti/IAgoraH265Transcoder-ti.d.ts +0 -0
- /package/types/{Private → ts/Private}/ti/IAgoraLog-ti.d.ts +0 -0
- /package/types/{Private → ts/Private}/ti/IAgoraMediaEngine-ti.d.ts +0 -0
- /package/types/{Private → ts/Private}/ti/IAgoraMediaPlayer-ti.d.ts +0 -0
- /package/types/{Private → ts/Private}/ti/IAgoraMediaPlayerSource-ti.d.ts +0 -0
- /package/types/{Private → ts/Private}/ti/IAgoraMediaRecorder-ti.d.ts +0 -0
- /package/types/{Private → ts/Private}/ti/IAgoraMediaStreamingSource-ti.d.ts +0 -0
- /package/types/{Private → ts/Private}/ti/IAgoraMusicContentCenter-ti.d.ts +0 -0
- /package/types/{Private → ts/Private}/ti/IAgoraRhythmPlayer-ti.d.ts +0 -0
- /package/types/{Private → ts/Private}/ti/IAgoraRtcEngine-ti.d.ts +0 -0
- /package/types/{Private → ts/Private}/ti/IAgoraRtcEngineEx-ti.d.ts +0 -0
- /package/types/{Private → ts/Private}/ti/IAgoraSpatialAudio-ti.d.ts +0 -0
- /package/types/{Private → ts/Private}/ti/IAudioDeviceManager-ti.d.ts +0 -0
- /package/types/{Renderer → ts/Renderer}/CapabilityManager.d.ts +0 -0
- /package/types/{Renderer → ts/Renderer}/WebGLRenderer/webgl-utils.d.ts +0 -0
- /package/types/{Renderer → ts/Renderer}/index.d.ts +0 -0
|
@@ -9,6 +9,7 @@ const CHANNEL_ID_STRING = 'channel-id';
|
|
|
9
9
|
const POSITION_STRING = 'position';
|
|
10
10
|
const RENDERER_CONTENT_MODE_STRING = 'renderer-content-mode';
|
|
11
11
|
const RENDERER_MIRROR_STRING = 'renderer-mirror';
|
|
12
|
+
const ENABLE_ALPHA_MASK_STRING = 'enable-alpha-mask';
|
|
12
13
|
const observedAttributes = [
|
|
13
14
|
VIDEO_SOURCE_TYPE_STRING,
|
|
14
15
|
UID_STRING,
|
|
@@ -16,6 +17,7 @@ const observedAttributes = [
|
|
|
16
17
|
POSITION_STRING,
|
|
17
18
|
RENDERER_CONTENT_MODE_STRING,
|
|
18
19
|
RENDERER_MIRROR_STRING,
|
|
20
|
+
ENABLE_ALPHA_MASK_STRING,
|
|
19
21
|
];
|
|
20
22
|
class AgoraView extends HTMLElement {
|
|
21
23
|
static get observedAttributes() {
|
|
@@ -95,11 +97,22 @@ class AgoraView extends HTMLElement {
|
|
|
95
97
|
this.removeAttribute(RENDERER_MIRROR_STRING);
|
|
96
98
|
}
|
|
97
99
|
}
|
|
100
|
+
get enableAlphaMask() {
|
|
101
|
+
return this.getAttribute(ENABLE_ALPHA_MASK_STRING) === 'true';
|
|
102
|
+
}
|
|
103
|
+
set enableAlphaMask(val) {
|
|
104
|
+
if (val) {
|
|
105
|
+
this.setAttribute(ENABLE_ALPHA_MASK_STRING, String(val));
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
this.removeAttribute(ENABLE_ALPHA_MASK_STRING);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
98
111
|
constructor() {
|
|
99
112
|
super();
|
|
100
113
|
this.isConnectedCallback = false;
|
|
101
114
|
this.initializeRender = () => {
|
|
102
|
-
const { channelId, uid, sourceType, position, renderMode, renderMirror } = this;
|
|
115
|
+
const { channelId, uid, sourceType, position, renderMode, renderMirror, enableAlphaMask, } = this;
|
|
103
116
|
Utils_1.AgoraEnv.AgoraRendererManager?.addOrRemoveRenderer({
|
|
104
117
|
sourceType,
|
|
105
118
|
view: this,
|
|
@@ -111,16 +124,18 @@ class AgoraView extends HTMLElement {
|
|
|
111
124
|
? AgoraBase_1.VideoMirrorModeType.VideoMirrorModeEnabled
|
|
112
125
|
: AgoraBase_1.VideoMirrorModeType.VideoMirrorModeDisabled,
|
|
113
126
|
setupMode: AgoraBase_1.VideoViewSetupMode.VideoViewSetupReplace,
|
|
127
|
+
enableAlphaMask,
|
|
114
128
|
});
|
|
115
129
|
};
|
|
116
130
|
this.destroyRender = () => {
|
|
117
|
-
const { channelId, uid, sourceType, position } = this;
|
|
131
|
+
const { channelId, uid, sourceType, position, enableAlphaMask } = this;
|
|
118
132
|
Utils_1.AgoraEnv.AgoraRendererManager?.removeRendererFromCache({
|
|
119
133
|
channelId,
|
|
120
134
|
position,
|
|
121
135
|
uid,
|
|
122
136
|
sourceType,
|
|
123
137
|
view: this,
|
|
138
|
+
enableAlphaMask,
|
|
124
139
|
});
|
|
125
140
|
};
|
|
126
141
|
}
|
|
@@ -135,6 +150,7 @@ class AgoraView extends HTMLElement {
|
|
|
135
150
|
const isSetRenderOption = [
|
|
136
151
|
RENDERER_CONTENT_MODE_STRING,
|
|
137
152
|
RENDERER_MIRROR_STRING,
|
|
153
|
+
ENABLE_ALPHA_MASK_STRING,
|
|
138
154
|
].includes(attrName);
|
|
139
155
|
if (isSetRenderOption) {
|
|
140
156
|
Utils_1.AgoraEnv.AgoraRendererManager?.setRendererContext({
|
|
@@ -143,6 +159,7 @@ class AgoraView extends HTMLElement {
|
|
|
143
159
|
mirrorMode: this.renderMirror
|
|
144
160
|
? AgoraBase_1.VideoMirrorModeType.VideoMirrorModeEnabled
|
|
145
161
|
: AgoraBase_1.VideoMirrorModeType.VideoMirrorModeDisabled,
|
|
162
|
+
enableAlphaMask: this.enableAlphaMask,
|
|
146
163
|
});
|
|
147
164
|
return;
|
|
148
165
|
}
|
|
@@ -9,8 +9,8 @@ class IRenderer {
|
|
|
9
9
|
this._frameCount = 0;
|
|
10
10
|
this._startTime = null;
|
|
11
11
|
}
|
|
12
|
-
bind(
|
|
13
|
-
this.parentElement =
|
|
12
|
+
bind(context) {
|
|
13
|
+
this.parentElement = context.view;
|
|
14
14
|
this.container = document.createElement('div');
|
|
15
15
|
Object.assign(this.container.style, {
|
|
16
16
|
width: '100%',
|
|
@@ -20,7 +20,7 @@ class IRenderer {
|
|
|
20
20
|
alignItems: 'center',
|
|
21
21
|
overflow: 'hidden',
|
|
22
22
|
});
|
|
23
|
-
this.parentElement
|
|
23
|
+
this.parentElement?.appendChild(this.container);
|
|
24
24
|
this.canvas = document.createElement('canvas');
|
|
25
25
|
this.canvas.style.display = 'none';
|
|
26
26
|
this.container.appendChild(this.canvas);
|
|
@@ -37,7 +37,7 @@ class IRenderer {
|
|
|
37
37
|
this.container = undefined;
|
|
38
38
|
this.parentElement = undefined;
|
|
39
39
|
}
|
|
40
|
-
drawFrame(_videoFrame, _codecConfig) {
|
|
40
|
+
drawFrame(uid, _videoFrame, _codecConfig) {
|
|
41
41
|
if (!this.canvas)
|
|
42
42
|
return;
|
|
43
43
|
if (this.canvas.style.display !== '') {
|
|
@@ -53,6 +53,9 @@ class IRenderer {
|
|
|
53
53
|
this.context.mirrorMode = context.mirrorMode;
|
|
54
54
|
this.updateMirrorMode();
|
|
55
55
|
}
|
|
56
|
+
if (this.context.enableAlphaMask !== context.enableAlphaMask) {
|
|
57
|
+
this.context.enableAlphaMask = context.enableAlphaMask;
|
|
58
|
+
}
|
|
56
59
|
this.context = { ...this.context, ...context };
|
|
57
60
|
}
|
|
58
61
|
updateRenderMode() {
|
|
@@ -17,7 +17,15 @@ function isUseConnection(context) {
|
|
|
17
17
|
}
|
|
18
18
|
exports.isUseConnection = isUseConnection;
|
|
19
19
|
class IRendererCache {
|
|
20
|
-
constructor({ channelId, uid, useWebCodecsDecoder, enableFps, sourceType, localUid, position, }) {
|
|
20
|
+
constructor({ channelId, uid, useWebCodecsDecoder, enableFps, sourceType, localUid, position, enableAlphaMask, }) {
|
|
21
|
+
// 性能统计数据
|
|
22
|
+
this.actualFps = 0;
|
|
23
|
+
this.avgFrameTime = 0;
|
|
24
|
+
this.maxFrameTime = 0;
|
|
25
|
+
this.minFrameTime = 0;
|
|
26
|
+
this.avgFrameInterval = 0;
|
|
27
|
+
this.maxFrameInterval = 0;
|
|
28
|
+
this.minFrameInterval = 0;
|
|
21
29
|
this.renderers = [];
|
|
22
30
|
this.cacheContext = {
|
|
23
31
|
channelId,
|
|
@@ -27,7 +35,15 @@ class IRendererCache {
|
|
|
27
35
|
sourceType,
|
|
28
36
|
localUid,
|
|
29
37
|
position,
|
|
38
|
+
enableAlphaMask,
|
|
30
39
|
};
|
|
40
|
+
this.callbackContext = {
|
|
41
|
+
connection: { channelId, localUid },
|
|
42
|
+
sourceType: sourceType,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
setCallbackContext(connection, sourceType) {
|
|
46
|
+
this.callbackContext = { connection, sourceType };
|
|
31
47
|
}
|
|
32
48
|
get key() {
|
|
33
49
|
return generateRendererCacheKey(this.cacheContext);
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RendererCache = void 0;
|
|
4
|
+
const IrisApiEngine_1 = require("../Private/internal/IrisApiEngine");
|
|
5
|
+
const Utils_1 = require("../Utils");
|
|
6
|
+
const IRendererCache_1 = require("./IRendererCache");
|
|
7
|
+
class RendererCache extends IRendererCache_1.IRendererCache {
|
|
8
|
+
constructor(context) {
|
|
9
|
+
super(context);
|
|
10
|
+
// 渲染相关属性
|
|
11
|
+
this._renderingFps = 0;
|
|
12
|
+
this._isRendering = false;
|
|
13
|
+
this._lastRenderTime = 0;
|
|
14
|
+
// 性能监控相关属性
|
|
15
|
+
this._frameTimes = []; // 存储最近100帧的渲染时间
|
|
16
|
+
this._frameIntervals = []; // 存储最近100帧的帧间隔
|
|
17
|
+
this._lastFrameTimestamp = 0; // 上一帧的时间戳
|
|
18
|
+
this._statsInterval = 100; // 每100帧输出一次统计
|
|
19
|
+
this.videoFrame = {
|
|
20
|
+
yBuffer: Buffer.alloc(0),
|
|
21
|
+
uBuffer: Buffer.alloc(0),
|
|
22
|
+
vBuffer: Buffer.alloc(0),
|
|
23
|
+
alphaBuffer: Buffer.alloc(0),
|
|
24
|
+
width: 0,
|
|
25
|
+
height: 0,
|
|
26
|
+
yStride: 0,
|
|
27
|
+
uStride: 0,
|
|
28
|
+
vStride: 0,
|
|
29
|
+
rotation: 0,
|
|
30
|
+
colorSpace: undefined,
|
|
31
|
+
};
|
|
32
|
+
this._enabled = false;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* @deprecated Use videoFrame instead
|
|
36
|
+
*/
|
|
37
|
+
get shareVideoFrame() {
|
|
38
|
+
return this.videoFrame;
|
|
39
|
+
}
|
|
40
|
+
enable() {
|
|
41
|
+
if (this._enabled)
|
|
42
|
+
return;
|
|
43
|
+
IrisApiEngine_1.AgoraElectronBridge.EnableVideoFrameCache(this.cacheContext);
|
|
44
|
+
this._enabled = true;
|
|
45
|
+
if (Utils_1.AgoraEnv.AgoraRendererManager) {
|
|
46
|
+
this._renderingFps = Utils_1.AgoraEnv.AgoraRendererManager.renderingFps;
|
|
47
|
+
}
|
|
48
|
+
this.startRendering();
|
|
49
|
+
}
|
|
50
|
+
disable() {
|
|
51
|
+
if (!this._enabled)
|
|
52
|
+
return;
|
|
53
|
+
IrisApiEngine_1.AgoraElectronBridge.DisableVideoFrameCache(this.cacheContext);
|
|
54
|
+
this._enabled = false;
|
|
55
|
+
}
|
|
56
|
+
shouldEnable() {
|
|
57
|
+
if (this.renderers.length > 0) {
|
|
58
|
+
this.enable();
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
this.disable();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
draw() { }
|
|
65
|
+
fetchVideoFrame() {
|
|
66
|
+
const renderAlpha = this.cacheContext.enableAlphaMask ?? false;
|
|
67
|
+
let needRender = false;
|
|
68
|
+
let { ret, hasMoreFrame } = IrisApiEngine_1.AgoraElectronBridge.GetVideoFrame(this.cacheContext, this.videoFrame, {
|
|
69
|
+
renderAlpha: renderAlpha,
|
|
70
|
+
});
|
|
71
|
+
switch (ret) {
|
|
72
|
+
case 0: // GET_VIDEO_FRAME_CACHE_RETURN_TYPE::OK = 0
|
|
73
|
+
//
|
|
74
|
+
needRender = true;
|
|
75
|
+
break;
|
|
76
|
+
case 1: // GET_VIDEO_FRAME_CACHE_RETURN_TYPE::RESIZED = 1
|
|
77
|
+
const { yStride, uStride, vStride, height } = this.videoFrame;
|
|
78
|
+
this.videoFrame.yBuffer = Buffer.alloc(yStride * height);
|
|
79
|
+
this.videoFrame.uBuffer = Buffer.alloc(uStride * height);
|
|
80
|
+
this.videoFrame.vBuffer = Buffer.alloc(vStride * height);
|
|
81
|
+
if (renderAlpha) {
|
|
82
|
+
this.videoFrame.alphaBuffer = Buffer.alloc(this.videoFrame.width * this.videoFrame.height);
|
|
83
|
+
}
|
|
84
|
+
const result = IrisApiEngine_1.AgoraElectronBridge.GetVideoFrame(this.cacheContext, this.videoFrame, {
|
|
85
|
+
renderAlpha: renderAlpha,
|
|
86
|
+
});
|
|
87
|
+
ret = result.ret;
|
|
88
|
+
hasMoreFrame = result.hasMoreFrame;
|
|
89
|
+
needRender = false;
|
|
90
|
+
break;
|
|
91
|
+
case 2: // GET_VIDEO_FRAME_CACHE_RETURN_TYPE::NO_CACHE = 2
|
|
92
|
+
(0, Utils_1.logDebug)('No renderer cache, please enable cache first');
|
|
93
|
+
return { hasMoreFrame: false, needRender: false };
|
|
94
|
+
}
|
|
95
|
+
if (!renderAlpha) {
|
|
96
|
+
if (this.videoFrame.alphaBuffer &&
|
|
97
|
+
this.videoFrame.alphaBuffer.length > 0) {
|
|
98
|
+
this.videoFrame.alphaBuffer = Buffer.alloc(0);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
if (!this.videoFrame.alphaBuffer ||
|
|
103
|
+
this.videoFrame.alphaBuffer.length === 0) {
|
|
104
|
+
this.videoFrame.alphaBuffer = Buffer.alloc(this.videoFrame.width * this.videoFrame.height);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (hasMoreFrame) {
|
|
108
|
+
this.renderers.forEach((renderer) => {
|
|
109
|
+
renderer.drawFrame(this.cacheContext.uid, this.videoFrame);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
return { hasMoreFrame, needRender };
|
|
113
|
+
}
|
|
114
|
+
addRenderer(renderer) {
|
|
115
|
+
super.addRenderer(renderer);
|
|
116
|
+
this.shouldEnable();
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* 渲染当前视频帧
|
|
120
|
+
* 此方法假设已经通过fetchVideoFrame获取了新帧
|
|
121
|
+
*/
|
|
122
|
+
renderFrame() {
|
|
123
|
+
if (this.renderers.length === 0)
|
|
124
|
+
return;
|
|
125
|
+
// 记录当前时间戳,用于计算帧间隔
|
|
126
|
+
const now = performance.now();
|
|
127
|
+
// 计算帧间隔并记录
|
|
128
|
+
if (this._lastFrameTimestamp > 0) {
|
|
129
|
+
const interval = now - this._lastFrameTimestamp;
|
|
130
|
+
this._frameIntervals.push(interval);
|
|
131
|
+
}
|
|
132
|
+
this._lastFrameTimestamp = now;
|
|
133
|
+
// 使用高精度计数器测量渲染时间
|
|
134
|
+
const renderStartTime = performance.now();
|
|
135
|
+
// 执行渲染
|
|
136
|
+
this.renderers.forEach((renderer) => {
|
|
137
|
+
renderer.drawFrame(this.cacheContext.uid, this.videoFrame);
|
|
138
|
+
});
|
|
139
|
+
// 计算渲染耗时
|
|
140
|
+
const renderEndTime = performance.now();
|
|
141
|
+
const frameTime = renderEndTime - renderStartTime;
|
|
142
|
+
// 更新帧时间统计
|
|
143
|
+
this._frameTimes.push(frameTime);
|
|
144
|
+
// 每statsInterval帧输出一次统计信息
|
|
145
|
+
if (this._frameTimes.length >= this._statsInterval) {
|
|
146
|
+
this._outputPerformanceStats();
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* 输出性能统计信息
|
|
151
|
+
* 包括帧时间和帧间隔的统计数据
|
|
152
|
+
*/
|
|
153
|
+
_outputPerformanceStats() {
|
|
154
|
+
if (this._frameTimes.length === 0)
|
|
155
|
+
return;
|
|
156
|
+
// 计算帧时间统计
|
|
157
|
+
this.avgFrameTime =
|
|
158
|
+
this._frameTimes.reduce((a, b) => a + b, 0) / this._frameTimes.length;
|
|
159
|
+
this.maxFrameTime = Math.max(...this._frameTimes);
|
|
160
|
+
this.minFrameTime = Math.min(...this._frameTimes);
|
|
161
|
+
// 计算帧间隔统计
|
|
162
|
+
this.avgFrameInterval = 0;
|
|
163
|
+
this.maxFrameInterval = 0;
|
|
164
|
+
this.minFrameInterval = Number.MAX_VALUE;
|
|
165
|
+
if (this._frameIntervals.length > 0) {
|
|
166
|
+
this.avgFrameInterval =
|
|
167
|
+
this._frameIntervals.reduce((a, b) => a + b, 0) /
|
|
168
|
+
this._frameIntervals.length;
|
|
169
|
+
this.maxFrameInterval = Math.max(...this._frameIntervals);
|
|
170
|
+
this.minFrameInterval = Math.min(...this._frameIntervals);
|
|
171
|
+
}
|
|
172
|
+
// 计算实际帧率
|
|
173
|
+
this.actualFps =
|
|
174
|
+
this._frameIntervals.length > 0
|
|
175
|
+
? 1000 / this.avgFrameInterval
|
|
176
|
+
: this._renderingFps;
|
|
177
|
+
// 输出帧时间统计
|
|
178
|
+
(0, Utils_1.logDebug)(`[FPS_STATS][UID:${this.callbackContext.connection.localUid}] 帧时间统计(${this._frameTimes.length}帧):`, `平均=${this.avgFrameTime.toFixed(2)}ms`, `最大=${this.maxFrameTime.toFixed(2)}ms`, `最小=${this.minFrameTime.toFixed(2)}ms`);
|
|
179
|
+
// 输出帧间隔统计
|
|
180
|
+
if (this._frameIntervals.length > 0) {
|
|
181
|
+
(0, Utils_1.logDebug)(`[FPS_STATS][UID:${this.callbackContext.connection.localUid}] 帧间隔统计(${this._frameIntervals.length}帧):`, `实际帧率=${this.actualFps.toFixed(2)}fps`, `目标帧率=${this._renderingFps}fps`, `平均=${this.avgFrameInterval.toFixed(2)}ms`, `最大=${this.maxFrameInterval.toFixed(2)}ms`, `最小=${this.minFrameInterval.toFixed(2)}ms`);
|
|
182
|
+
}
|
|
183
|
+
// 重置统计数据
|
|
184
|
+
this._frameTimes = [];
|
|
185
|
+
this._frameIntervals = [];
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* 开始独立渲染循环
|
|
189
|
+
*/
|
|
190
|
+
startRendering() {
|
|
191
|
+
if (this._renderingTimer || this._isRendering)
|
|
192
|
+
return;
|
|
193
|
+
this._isRendering = true;
|
|
194
|
+
const renderingLooper = () => {
|
|
195
|
+
if (!this._isRendering)
|
|
196
|
+
return;
|
|
197
|
+
const currentTime = performance.now();
|
|
198
|
+
const timeSinceLastRender = this._lastRenderTime
|
|
199
|
+
? currentTime - this._lastRenderTime
|
|
200
|
+
: 0;
|
|
201
|
+
const frameInterval = 1000 / this._renderingFps;
|
|
202
|
+
// 如果距离上次渲染的时间不足一帧间隔,等待
|
|
203
|
+
if (this._lastRenderTime && timeSinceLastRender < frameInterval) {
|
|
204
|
+
const waitTime = frameInterval - timeSinceLastRender;
|
|
205
|
+
this._renderingTimer = window.setTimeout(renderingLooper, waitTime);
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
// 记录当前时间作为本次循环的开始时间
|
|
209
|
+
this._lastRenderTime = currentTime;
|
|
210
|
+
// 获取第一帧并渲染
|
|
211
|
+
// 无论hasMoreFrame是true还是false,都渲染当前帧
|
|
212
|
+
// 因为fetchVideoFrame总是会获取一帧数据(如果有的话)
|
|
213
|
+
let { hasMoreFrame, needRender } = this.fetchVideoFrame();
|
|
214
|
+
if (needRender) {
|
|
215
|
+
this.renderFrame();
|
|
216
|
+
}
|
|
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
|
+
// 安排下一帧
|
|
227
|
+
this._renderingTimer = window.setTimeout(renderingLooper, 0);
|
|
228
|
+
};
|
|
229
|
+
// 启动渲染循环
|
|
230
|
+
this._renderingTimer = window.setTimeout(renderingLooper, 0);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Remove the specified renderer if it is specified, otherwise remove all renderers
|
|
234
|
+
*/
|
|
235
|
+
removeRenderer(renderer) {
|
|
236
|
+
super.removeRenderer(renderer);
|
|
237
|
+
this.shouldEnable();
|
|
238
|
+
}
|
|
239
|
+
stopRendering() {
|
|
240
|
+
if (!this._isRendering)
|
|
241
|
+
return;
|
|
242
|
+
if (this._renderingTimer) {
|
|
243
|
+
window.clearTimeout(this._renderingTimer);
|
|
244
|
+
this._renderingTimer = undefined;
|
|
245
|
+
}
|
|
246
|
+
this._isRendering = false;
|
|
247
|
+
}
|
|
248
|
+
release() {
|
|
249
|
+
super.release();
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
exports.RendererCache = RendererCache;
|
|
@@ -28,8 +28,6 @@ class RendererManager {
|
|
|
28
28
|
this.defaultObservedFramePosition = AgoraMediaBase_1.VideoModulePosition.PositionPreRenderer |
|
|
29
29
|
AgoraMediaBase_1.VideoModulePosition.PositionPreEncoder;
|
|
30
30
|
this.renderingFps = 15;
|
|
31
|
-
this._currentFrameCount = 0;
|
|
32
|
-
this._previousFirstFrameTime = 0;
|
|
33
31
|
this._rendererCaches = [];
|
|
34
32
|
this._context = {
|
|
35
33
|
renderMode: AgoraMediaBase_1.RenderModeType.RenderModeHidden,
|
|
@@ -41,10 +39,6 @@ class RendererManager {
|
|
|
41
39
|
}
|
|
42
40
|
setRenderingFps(fps) {
|
|
43
41
|
this.renderingFps = fps;
|
|
44
|
-
if (this._renderingTimer) {
|
|
45
|
-
this.stopRendering();
|
|
46
|
-
this.startRendering();
|
|
47
|
-
}
|
|
48
42
|
}
|
|
49
43
|
set defaultChannelId(channelId) {
|
|
50
44
|
this._context.channelId = channelId;
|
|
@@ -59,7 +53,6 @@ class RendererManager {
|
|
|
59
53
|
return this._context.mirrorMode;
|
|
60
54
|
}
|
|
61
55
|
release() {
|
|
62
|
-
this.stopRendering();
|
|
63
56
|
this.clearRendererCache();
|
|
64
57
|
}
|
|
65
58
|
presetRendererContext(context) {
|
|
@@ -69,6 +62,7 @@ class RendererManager {
|
|
|
69
62
|
context.useWebCodecsDecoder = context.useWebCodecsDecoder || false;
|
|
70
63
|
context.enableFps = context.enableFps || false;
|
|
71
64
|
context.position = context.position || this.defaultObservedFramePosition;
|
|
65
|
+
context.enableAlphaMask = context.enableAlphaMask || false;
|
|
72
66
|
if (!Utils_1.AgoraEnv.CapabilityManager?.webCodecsDecoderEnabled) {
|
|
73
67
|
context.useWebCodecsDecoder = false;
|
|
74
68
|
}
|
|
@@ -131,10 +125,8 @@ class RendererManager {
|
|
|
131
125
|
}
|
|
132
126
|
this._rendererCaches.push(rendererCache);
|
|
133
127
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
this.startRendering();
|
|
137
|
-
}
|
|
128
|
+
const renderer = this.createRenderer(checkedContext);
|
|
129
|
+
rendererCache.addRenderer(renderer);
|
|
138
130
|
return rendererCache;
|
|
139
131
|
}
|
|
140
132
|
removeRendererFromCache(context) {
|
|
@@ -152,12 +144,14 @@ class RendererManager {
|
|
|
152
144
|
rendererCache.removeRenderer();
|
|
153
145
|
}
|
|
154
146
|
if (rendererCache.renderers.length === 0) {
|
|
147
|
+
rendererCache.stopRendering();
|
|
155
148
|
rendererCache.release();
|
|
156
149
|
this._rendererCaches.splice(this._rendererCaches.indexOf(rendererCache), 1);
|
|
157
150
|
}
|
|
158
151
|
}
|
|
159
152
|
clearRendererCache() {
|
|
160
153
|
for (const rendererCache of this._rendererCaches) {
|
|
154
|
+
rendererCache.stopRendering();
|
|
161
155
|
rendererCache.release();
|
|
162
156
|
}
|
|
163
157
|
this._rendererCaches.splice(0);
|
|
@@ -165,6 +159,12 @@ class RendererManager {
|
|
|
165
159
|
getRendererCache(context) {
|
|
166
160
|
return this._rendererCaches.find((cache) => cache.key === (0, IRendererCache_1.generateRendererCacheKey)(context));
|
|
167
161
|
}
|
|
162
|
+
getRendererCachesBySourceType(sourceType) {
|
|
163
|
+
return this._rendererCaches.filter((cache) => cache.cacheContext.sourceType === sourceType);
|
|
164
|
+
}
|
|
165
|
+
getRendererCaches() {
|
|
166
|
+
return this._rendererCaches;
|
|
167
|
+
}
|
|
168
168
|
getRenderers(context) {
|
|
169
169
|
return this.getRendererCache(context)?.renderers || [];
|
|
170
170
|
}
|
|
@@ -185,12 +185,12 @@ class RendererManager {
|
|
|
185
185
|
}
|
|
186
186
|
else {
|
|
187
187
|
renderer = new WebGLRenderer_1.WebGLRenderer(this.handleWebGLFallback(context).bind(this));
|
|
188
|
-
renderer.bind(context
|
|
188
|
+
renderer.bind(context);
|
|
189
189
|
}
|
|
190
190
|
break;
|
|
191
191
|
case Types_1.RendererType.SOFTWARE:
|
|
192
192
|
renderer = new YUVCanvasRenderer_1.YUVCanvasRenderer();
|
|
193
|
-
renderer.bind(context
|
|
193
|
+
renderer.bind(context);
|
|
194
194
|
break;
|
|
195
195
|
default:
|
|
196
196
|
throw new Error('Unknown renderer type');
|
|
@@ -198,51 +198,6 @@ class RendererManager {
|
|
|
198
198
|
renderer.setContext(context);
|
|
199
199
|
return renderer;
|
|
200
200
|
}
|
|
201
|
-
startRendering() {
|
|
202
|
-
if (this._renderingTimer)
|
|
203
|
-
return;
|
|
204
|
-
const renderingLooper = () => {
|
|
205
|
-
if (this._previousFirstFrameTime === 0) {
|
|
206
|
-
// Get the current time as the time of the first frame of per second
|
|
207
|
-
this._previousFirstFrameTime = performance.now();
|
|
208
|
-
// Reset the frame count
|
|
209
|
-
this._currentFrameCount = 0;
|
|
210
|
-
}
|
|
211
|
-
// Increase the frame count
|
|
212
|
-
++this._currentFrameCount;
|
|
213
|
-
// Get the current time
|
|
214
|
-
const currentFrameTime = performance.now();
|
|
215
|
-
// Calculate the time difference between the current frame and the previous frame
|
|
216
|
-
const deltaTime = currentFrameTime - this._previousFirstFrameTime;
|
|
217
|
-
// Calculate the expected time of the current frame
|
|
218
|
-
const expectedTime = (this._currentFrameCount * 1000) / this.renderingFps;
|
|
219
|
-
(0, Utils_1.logDebug)(new Date().toLocaleTimeString(), 'currentFrameCount', this._currentFrameCount, 'expectedTime', expectedTime, 'deltaTime', deltaTime);
|
|
220
|
-
if (this._rendererCaches.length === 0) {
|
|
221
|
-
// If there is no renderer, stop rendering
|
|
222
|
-
this.stopRendering();
|
|
223
|
-
return;
|
|
224
|
-
}
|
|
225
|
-
// Render all renderers that do not use WebCodecs
|
|
226
|
-
for (const rendererCache of this._rendererCaches.filter((cache) => cache instanceof RendererCache_1.RendererCache)) {
|
|
227
|
-
this.doRendering(rendererCache);
|
|
228
|
-
}
|
|
229
|
-
if (this._currentFrameCount >= this.renderingFps) {
|
|
230
|
-
this._previousFirstFrameTime = 0;
|
|
231
|
-
}
|
|
232
|
-
if (deltaTime < expectedTime) {
|
|
233
|
-
// If the time difference between the current frame and the previous frame is less than the expected time, then wait for the difference
|
|
234
|
-
this._renderingTimer = window.setTimeout(renderingLooper, expectedTime - deltaTime);
|
|
235
|
-
}
|
|
236
|
-
else {
|
|
237
|
-
// If the time difference between the current frame and the previous frame is greater than the expected time, then render immediately
|
|
238
|
-
renderingLooper();
|
|
239
|
-
}
|
|
240
|
-
};
|
|
241
|
-
renderingLooper();
|
|
242
|
-
}
|
|
243
|
-
doRendering(rendererCache) {
|
|
244
|
-
rendererCache.draw();
|
|
245
|
-
}
|
|
246
201
|
handleWebGLFallback(context) {
|
|
247
202
|
return (renderer) => {
|
|
248
203
|
const renderers = this.getRenderers(context);
|
|
@@ -281,12 +236,6 @@ class RendererManager {
|
|
|
281
236
|
});
|
|
282
237
|
}
|
|
283
238
|
}
|
|
284
|
-
stopRendering() {
|
|
285
|
-
if (this._renderingTimer) {
|
|
286
|
-
window.clearTimeout(this._renderingTimer);
|
|
287
|
-
this._renderingTimer = undefined;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
239
|
setRendererContext(context) {
|
|
291
240
|
const checkedContext = this.presetRendererContext(context);
|
|
292
241
|
for (const rendererCache of this._rendererCaches) {
|
|
@@ -9,12 +9,12 @@ class WebCodecsRenderer extends IRenderer_1.IRenderer {
|
|
|
9
9
|
super();
|
|
10
10
|
this.rendererType = Types_1.RendererType.WEBCODECSRENDERER;
|
|
11
11
|
}
|
|
12
|
-
bind(
|
|
13
|
-
super.bind(
|
|
12
|
+
bind(context) {
|
|
13
|
+
super.bind(context);
|
|
14
14
|
if (!this.canvas)
|
|
15
15
|
return;
|
|
16
16
|
this.offscreenCanvas = this.canvas.transferControlToOffscreen();
|
|
17
|
-
this.gl = (0, Utils_1.getContextByCanvas)(this.offscreenCanvas);
|
|
17
|
+
this.gl = (0, Utils_1.getContextByCanvas)(this.offscreenCanvas, this.context.enableAlphaMask);
|
|
18
18
|
if (!this.gl)
|
|
19
19
|
return;
|
|
20
20
|
const vertexShader = this.gl.createShader(this.gl.VERTEX_SHADER);
|
|
@@ -58,7 +58,7 @@ class WebCodecsRenderer extends IRenderer_1.IRenderer {
|
|
|
58
58
|
this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_S, this.gl.CLAMP_TO_EDGE);
|
|
59
59
|
this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_T, this.gl.CLAMP_TO_EDGE);
|
|
60
60
|
}
|
|
61
|
-
drawFrame(frame, _codecConfig) {
|
|
61
|
+
drawFrame(uid, frame, _codecConfig) {
|
|
62
62
|
if (!this.offscreenCanvas || !frame)
|
|
63
63
|
return;
|
|
64
64
|
this.offscreenCanvas.width = _codecConfig.codedWidth;
|
|
@@ -80,7 +80,7 @@ class WebCodecsRenderer extends IRenderer_1.IRenderer {
|
|
|
80
80
|
// Draw the frame.
|
|
81
81
|
this.gl.drawArrays(this.gl.TRIANGLE_FAN, 0, 4);
|
|
82
82
|
}
|
|
83
|
-
super.drawFrame();
|
|
83
|
+
super.drawFrame(uid);
|
|
84
84
|
this.getFps();
|
|
85
85
|
}
|
|
86
86
|
rotateCanvas({ rotation }) {
|
|
@@ -40,7 +40,7 @@ class WebCodecsRendererCache extends IRendererCache_1.IRendererCache {
|
|
|
40
40
|
if (renderer.rendererType !== Types_1.RendererType.WEBCODECSRENDERER) {
|
|
41
41
|
continue;
|
|
42
42
|
}
|
|
43
|
-
renderer.bind(renderer.context
|
|
43
|
+
renderer.bind(renderer.context);
|
|
44
44
|
}
|
|
45
45
|
try {
|
|
46
46
|
this._decoder.decoderConfigure(_data.videoEncodedFrameInfo);
|
|
@@ -111,5 +111,17 @@ class WebCodecsRendererCache extends IRendererCache_1.IRendererCache {
|
|
|
111
111
|
this._decoder = null;
|
|
112
112
|
super.release();
|
|
113
113
|
}
|
|
114
|
+
fetchVideoFrame() {
|
|
115
|
+
return { hasMoreFrame: false, needRender: false };
|
|
116
|
+
}
|
|
117
|
+
renderFrame() {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
startRendering() {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
stopRendering() {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
114
126
|
}
|
|
115
127
|
exports.WebCodecsRendererCache = WebCodecsRendererCache;
|