MediaStreamRecorder不会触发ondataavailable事件

时间:2017-04-17 13:41:56

标签: javascript websocket streaming blob webrtc

我正在使用开源JavaScript库MediaStreamRecorder在Mozilla Firefox和Google Chrome中录制音频和视频webRTC调用。

电话录音成功,但我面临以下问题。

如果我在multiStreamRecorder.ondataavailable中使用1秒(1000毫秒)的时间间隔,则multiStreamRecorder.ondataavailable事件不会触发。这就是为什么没有错误或没有登录控制台的原因。

但是,如果我使用1.5秒(1500毫秒)或更长的时间间隔,它会触发var ws; function start() { ws = new WebSocket("wss://xyz/"); ws.onopen = function () { console.log("WebSocket has been opened!"); }; ws.onmessage = function (message) { console.log("A messsage is received from WebSocket Server.", message); }; ws.onclose = function (e) { console.log('WebSocket is closed. Reconnection will be attempted in 5 second.', e.reason); setTimeout(function () { start(); }, 5000); }; ws.onerror = function (err) { console.error('WebSocket encountered an error: ', err.message, 'Closing WebSocket'); ws.close(); }; } start(); function startRecording(localStream, remoteStream) { if (localStream != null && remoteStream != null) { multiStreamRecorder = new MultiStreamRecorder([localStream, remoteStream], "video/webm"); multiStreamRecorder.mimeType = "video/webm"; multiStreamRecorder.ondataavailable = function (blob) { console.log("sending blob to websocket server", blob); ws.send(blob); }; // It doesn't work with the 1000ms time interval multiStreamRecorder.start(1500); } else{ console.error("One or more streams are null."); } } 事件,一切正常。 (仅限视频情况)

我想将间隔保持为1秒(1000毫秒)。

        private float timeSeconds = 0f;
        private float period = 1f;

        public void render() {
            //Execute handleEvent each 1 second
            timeSeconds +=Gdx.graphics.getRawDeltaTime();
            if(timeSeconds > period){
                timeSeconds-=period;
                handleEvent();
            }

            [...]

        }

        public void handleEvent() {
             [...]
        }

2 个答案:

答案 0 :(得分:1)

我怀疑一秒钟没有足够的时间让相机流预热。虽然您可以立即将录音机连接到流,但它似乎没有准备好在零时间播放/录制。

视频元素chart1.DataBind(); 让您等待数据准备就绪;录音机没有。

你可以制作一个(对Chrome使用https fiddle):



//Inside main form
chart1.Series["one"].Points.DataBindY(myclass1.values);
chart1.Series["two"].Points.DataBindY(myclass2.values);
//...

.onloadedmetadata




(Chrome和Firefox都直接实施MediaRecorder,所以我已经回答了问题。)

答案 1 :(得分:0)

我有类似的问题。除非我开始录制并停止几次,否则它不会触发ondataavailable事件。 2天后发现问题出在我的麦克风驱动程序:)。它可能一直在尝试使用麦克风,因此要花几秒钟才能发现它不起作用。将audio设置为false后,所有功能都将完美运行。只是没有声音大声笑。