public void Start(ulong senderId, int frameWidth, int frameHeight)
        {
            Stop();

            _senderId = (uint)senderId;

            IRtcEngine engine = IRtcEngine.QueryEngine();

            if (engine != null)
            {
                _videoRender = (VideoRender)engine.GetVideoRender();
                _videoRender.SetVideoRenderMode(VIDEO_RENDER_MODE.RENDER_RAWDATA);
                _videoRender.AddUserVideoInfo(_senderId, 0);
            }

            _nativeTexture = new Texture2D(frameWidth, frameHeight, TextureFormat.RGBA32, false);
            OnUpdateTexture?.Invoke(_nativeTexture);

            _customTextureRenderer =
                new PluginTextureRenderer(
                    UpdateRawTextureDataFunction,
                    targetTexture: _nativeTexture,
                    autoDispose: false
                    );

            CustomTextureRenderSystem.Instance.AddRenderer(_customTextureRenderer);
        }
        public void Stop()
        {
            _disposable?.Dispose();
            _disposable = null;

            _customTextureRenderer?.Dispose();
            _customTextureRenderer = null;

            if (_nativeTexture != null)
            {
                UnityEngine.Object.Destroy(_nativeTexture);
                _nativeTexture = null;
            }

            if (_videoRender != null && IRtcEngine.QueryEngine() != null)
            {
                _videoRender.RemoveUserVideoInfo(_senderId);
                _senderId = 0;
            }
        }