Bug fixes: robust release of media streams + memoization of audio/video constraints #133
+69
−33
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
First, due to the
getMediaStream
function being asynchronous, streams might not be released properly by the cleanup function of the main useEffect. This leads to media streams that keep running even after the ReactMediaRecorder is unmounted, causing performance and privacy issues. The new architecture ensures that there is only one media stream running at every time and stops it when the component unmounts.Second, the video and audio media constraints are passed to the
useEffect
depedency list as objects, but the React dependency list compares objects by reference, not value. If the video and audio media constaints objects are created inside the same component that is calling the hook, their reference will be different every time. This would cause theuseEffect
to be called on every render, resulting in infinite re-renderings. This PR also fixes that by memoizing the video and audio constaints objects.