Javascript mediaRecorder.state即使在停止mediaStreamTrack后仍保持录制状态
我正在使用getUserMedia和mediaRecorder API从网络摄像头录制视频 我通过单击按钮调用stopLocalStram来停止媒体曲目并调用mediaRecorder.onstop() 在mediaRecorder.onstop()中,我将blob内容保存为formData并将其发送回服务器 即使在停止mediaTracks后,mediaRecorder.state也会显示正在录制。相反,它应该显示为不活动。 网络摄像头指示灯也保持亮起 在firefox中,一切都很好 我使用的是chrome 51版 在firefox mediaRecorder中,当流轨迹停止时,会显式调用.onstop() 在chrome中,必须手动触发它 StopLocalStream()函数,在firefox中非常有效:-Javascript mediaRecorder.state即使在停止mediaStreamTrack后仍保持录制状态,javascript,mediarecorder,getusermedia,Javascript,Mediarecorder,Getusermedia,我正在使用getUserMedia和mediaRecorder API从网络摄像头录制视频 我通过单击按钮调用stopLocalStram来停止媒体曲目并调用mediaRecorder.onstop() 在mediaRecorder.onstop()中,我将blob内容保存为formData并将其发送回服务器 即使在停止mediaTracks后,mediaRecorder.state也会显示正在录制。相反,它应该显示为不活动。 网络摄像头指示灯也保持亮起 在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);
};