Javascript mediaRecorder.state即使在停止mediaStreamTrack后仍保持录制状态

Javascript mediaRecorder.state即使在停止mediaStreamTrack后仍保持录制状态,javascript,mediarecorder,getusermedia,Javascript,Mediarecorder,Getusermedia,我正在使用getUserMedia和mediaRecorder API从网络摄像头录制视频 我通过单击按钮调用stopLocalStram来停止媒体曲目并调用mediaRecorder.onstop() 在mediaRecorder.onstop()中,我将blob内容保存为formData并将其发送回服务器 即使在停止mediaTracks后,mediaRecorder.state也会显示正在录制。相反,它应该显示为不活动。 网络摄像头指示灯也保持亮起 在firefox中,一切都很好 我使用的

我正在使用getUserMedia和mediaRecorder API从网络摄像头录制视频

我通过单击按钮调用stopLocalStram来停止媒体曲目并调用mediaRecorder.onstop()

在mediaRecorder.onstop()中,我将blob内容保存为formData并将其发送回服务器

即使在停止mediaTracks后,mediaRecorder.state也会显示正在录制。相反,它应该显示为不活动。 网络摄像头指示灯也保持亮起

在firefox中,一切都很好

我使用的是chrome 51版

在firefox mediaRecorder中,当流轨迹停止时,会显式调用.onstop()

在chrome中,必须手动触发它

StopLocalStream()函数,在firefox中非常有效:-

function stoplocalStream(localStream)
        {
            console.log('stop called');

            localStream.getAudioTracks()[0].stop();
            localStream.getVideoTracks()[0].stop();

        }
在chrome first try中:-

function stoplocalStream(localStream)
        {
            console.log('stop called');

            localStream.getAudioTracks()[0].stop();
            localStream.getVideoTracks()[0].stop();

            console.log('Stopped, state = ' + mediaRecorder.state);
            //shows recording
            setTimeout(function(){
                mediaRecorder.onstop();
            }, 3000);

        }
我甚至试着从溪流中清除铁轨,而不是停止它,但没有成功。 在第二次尝试中:-

function stoplocalStream(localStream)
        {
            console.log('stop called');
            var audioTrack = localStream.getAudioTracks();

            if (audioTrack.length > 0) {

                localStream.removeTrack(audioTrack[0]);
            }

            var videoTrack = localStream.getVideoTracks();

            if (videoTrack.length > 0) {

                 localStream.removeTrack(videoTrack[0]);
            }


            console.log('Stopped, state = ' + mediaRecorder.state);

            setTimeout(function(){
                mediaRecorder.onstop();
            }, 3000);

        }
mediaRecorder.onstop():-

请帮助我如何停止chrome流

参考:-


不是一个事件监听器吗?你不想打电话吗?谢谢Kaido,我一定很累了,我错过了这么一个基本的区别。它解决了我的问题。我仍然不明白为什么我需要在chrome中停止mediarecorder,而不是在firefox中。在firefox中,如果我停止流跟踪,记录器将自动停止。另请参阅
mediaRecorder.onstop = function()
            {

                console.log('Stopped, state = ' + mediaRecorder.state);
                var blob = new Blob(chunks, {type: "video/mp4"});
                chunks = [];

                var videoURL = window.URL.createObjectURL(blob);
                var downloadLink = document.getElementById('downloadLink');
                downloadLink.href = videoURL;
                video.src = videoURL;
                downloadLink.innerHTML = 'Download video file';

                var rand = Math.floor((Math.random() * 10000000));
                var name = "video_"+rand+".mp4" ;

                downloadLink.setAttribute( "download", name);
                downloadLink.setAttribute( "name", name);

                var dataBlob = new Blob([$scope.upr,$scope.question], { type: "text/plain" });

                var uprId = $scope.upr;
                var question = $scope.question;
                var f = new FormData();

                f.append('videofile', blob);
                f.append('uprId', $scope.upr);
                f.append('questionId',$scope.question);

                var xhr = new XMLHttpRequest();
                xhr.open('POST','index.php?r=site/SaveRecordedFile',true);
                xhr.onreadystatechange = function() {
                    if (xhr.readyState == 4 && xhr.status == 200) {

                        $scope.$apply(function () {
                            video.src = xhr.responseText;
                        });

                    }
                };
                xhr.send(f);

            };