/// <summary> /// /// </summary> public override void Dispose() { if (this.disposed) { return; } if (self != IntPtr.Zero && !WebRTC.Context.IsNull) { if (_audioCapturer != null) { // Unity API must be called from main thread. _audioCapturer.onAudioRead -= SetData; WebRTC.DestroyOnMainThread(_audioCapturer); } if (_streamRenderer != null) { _streamRenderer?.Dispose(); _streamRenderer = null; } _trackSource?.Dispose(); _trackSource = null; } base.Dispose(); }
private void OnAudioReceivedInternal(float[] audioData, int sampleRate, int channels, int numOfFrames) { if (_streamRenderer == null) { if (frameCountReceiveDataForIgnoring < MaxFrameCountReceiveDataForIgnoring) { frameCountReceiveDataForIgnoring++; return; } _streamRenderer = new AudioStreamRenderer(this.Id, sampleRate, channels); OnAudioReceived?.Invoke(_streamRenderer.clip); } _streamRenderer?.SetData(audioData); }
internal void RemoveSink(AudioStreamRenderer renderer) { NativeMethods.AudioTrackRemoveSink( GetSelfOrThrow(), renderer.self); }
internal AudioStreamTrack(IntPtr ptr) : base(ptr) { _streamRenderer = new AudioStreamRenderer(this); }