我在使用大部分演示代码设置的网络应用中拥有webrtc。它正在使用setTimeout停止记录。我想在按钮上添加click事件,作为停止录制的另一种方法。从演示代码中,我将我想作为新函数saveAudioFile()的内容折断了。它由playSequence函数通过传递在playSequence函数中实例化的记录器对象触发。我想知道的是如何通过单击鼠标(或停止超时)来触发saveAudioFile函数。我已经创建了一个按钮并单击事件侦听器,但是我遇到的问题是传递“ recorder”对象(在另一个函数中创建并超出范围),否则该函数将无法工作。这全都与回调有关(我认为),但我仍然没有把头放在这些回调上。我需要做些什么才能能够使用playSequence函数中的'recorder'对象来通过鼠标单击(同时保持超时回退)来停止记录?
nb。通过setTimeout触发playSequence函数是有意的-我需要它在页面加载后3秒开始。仅提及以防万一,这是造成混乱/疑问的原因。
function saveAudioFile(recorder)
{
// stop recording
recorder.stopRecording(function() {
//ajax function to upload audio and save as file- working
});
}
function playSequence()
{
navigator.mediaDevices.getUserMedia({ video: false, audio: true }).then(function(camera) {
// recording configuration/hints/parameters
var recordingHints = {
type: 'audio'
};
// initiating the recorder
var recorder = RecordRTC(camera, recordingHints);
// starting recording here
recorder.startRecording();
// auto stop recording after 30 seconds
var milliSeconds = 10 * 1000;
setTimeout(saveAudioFile(recorder) , milliSeconds);
});
});
}
setTimeout(
function(){
playSequence();
},
3000
);
jQuery('#endrecording').click(function() {
saveAudioFile();
});
是否有理由不将事件侦听器放入playSequence
函数中?您将无法将recorder
对象传递给click
侦听器,因为它尚不存在-它会在3s
之后创建,对吗? :)
加上,此部分:setTimeout(saveAudioFile(recorder) , milliSeconds);
似乎不起作用,对吗?当使用带有参数的函数作为回调时,您要么知道将使用什么参数调用该回调-f.e.事件侦听器回调是通过特定的Event
对象调用的-否则您应该传递一个匿名函数,该函数使用您的自定义参数调用您的函数。
尚未测试,这是我首先想到的:
function playSequence() {
navigator.mediaDevices.getUserMedia({
video: false,
audio: true
}).then(function(camera) {
// recording configuration/hints/parameters
var recordingHints = {
type: 'audio'
};
// initiating the recorder
var recorder = RecordRTC(camera, recordingHints);
// starting recording here
recorder.startRecording();
// auto stop recording after 30 secods
var milliSeconds = 30 * 1000;
document
.getElementById('endrecording')
.addEventListener('click', function(){ saveAudioFile(recorder) };
setTimeout(
function(){ saveAudioFile(recorder) },
milliSeconds
);
});
}