向现有的webrtc js函数添加回调

问题描述 投票:0回答:1

我在使用大部分演示代码设置的网络应用中拥有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();
        });
javascript callback webrtc
1个回答
0
投票

是否有理由不将事件侦听器放入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
    );
  });
}
© www.soinside.com 2019 - 2024. All rights reserved.