@@ -28,19 +28,29 @@ export function useMediaRecorder({ constraints, onStop, videoRef }) {
2828 const stream = await getStream ( constraints , true ) ;
2929 chunks . current = [ ] ;
3030 const _recorder = new MediaRecorder ( stream ) ;
31- _recorder . start ( ) ;
32- setRecorder ( _recorder ) ;
33- _recorder . addEventListener ( 'dataavailable' , ( event ) => {
31+
32+ const handleDataAvailable = ( event ) => {
3433 chunks . current . push ( event . data ) ;
35- } ) ;
36- _recorder . addEventListener ( 'stop' , ( ) => {
34+ } ;
35+
36+ const handleStop = ( ) => {
3737 onStop && onStop ( chunks . current ) ;
38- } ) ;
38+ _recorder . removeEventListener ( 'dataavailable' , handleDataAvailable ) ;
39+ _recorder . removeEventListener ( 'stop' , handleStop ) ;
40+ } ;
41+
42+ _recorder . addEventListener ( 'dataavailable' , handleDataAvailable ) ;
43+ _recorder . addEventListener ( 'stop' , handleStop ) ;
44+
45+ _recorder . start ( ) ;
46+ setRecorder ( _recorder ) ;
3947 }
4048
4149 async function stop ( ) {
4250 if ( recorder ) {
43- recorder . stop ( ) ;
51+ if ( recorder . state !== 'inactive' ) {
52+ recorder . stop ( ) ;
53+ }
4454 ( await getStream ( ) ) . getTracks ( ) . forEach ( ( track ) => track . stop ( ) ) ;
4555 }
4656 }
@@ -77,17 +87,23 @@ export function useNewMediaRecorder({ constraints, videoRef, onStop }) {
7787
7888 chunks . current = [ ] ;
7989 const _recorder = new MediaRecorder ( stream ) ;
80- _recorder . start ( ) ;
81- setRecorder ( _recorder ) ;
8290
83- _recorder . addEventListener ( 'dataavailable' , ( event ) => {
91+ const handleDataAvailable = ( event ) => {
8492 chunks . current . push ( event . data ) ;
85- } ) ;
93+ } ;
8694
87- _recorder . addEventListener ( 'stop' , ( ) => {
95+ const handleStop = ( ) => {
8896 setRecordingData ( new Blob ( chunks . current , { type : 'video/mp4' } ) ) ;
8997 onStop && onStop ( chunks . current ) ;
90- } ) ;
98+ _recorder . removeEventListener ( 'dataavailable' , handleDataAvailable ) ;
99+ _recorder . removeEventListener ( 'stop' , handleStop ) ;
100+ } ;
101+
102+ _recorder . addEventListener ( 'dataavailable' , handleDataAvailable ) ;
103+ _recorder . addEventListener ( 'stop' , handleStop ) ;
104+
105+ _recorder . start ( ) ;
106+ setRecorder ( _recorder ) ;
91107 }
92108
93109 async function stopRecording ( ) {
0 commit comments