CycleJs ExtreamJs |我无法弄清楚在使用另一个流的一部分时如何处理addEventListeners以创建新流。

问题描述 投票:0回答:1
我正在尝试创建记录音频流,但在某些方面遇到了麻烦。1我正在从导航器mediaDevices getUserMedia创建一个承诺流接下来,我将该流映射到媒体记录器流。这一切都很好。最后,我想使用媒体记录器流创建blob流。问题是我需要来自mediaRecorder $的mediaRecorder对象,并且需要能够通过将事件添加到mediaRecoder.addEventListener('dataavailable')来监听它,然后我需要更新listener.next(event.data)

但是我遇到的是,subscribe函数中的blob变量是流而不是blob。这可能与我试图从xs.create()的内部返回Stream.map()的方式有关

从addEventListener获取结果并将其转换为可流式状态的正确方法是什么?

const mediaSource$ = xs.fromPromise(navigator.mediaDevices.getUserMedia({ audio: true, video: false })) const mediaRecorder$ = mediaSource$ .map( mediaSource => { const mediaRecorder = new window.MediaRecorder( mediaSource, {mimeType: 'audio/webm'}) return mediaRecorder }) const blob$ = mediaRecorder$ .map( (mediaRecorder) => xs.create({ start: (listener) => { mediaRecorder.addEventListener('dataavailable', (e) => { console.log('Data Available', e.data) listener.next(e.data) }) }, stop: () => {} }) ) xs.combine(action$, mediaRecorder$, blob$).subscribe({ next: ([action, mediaRecorder, blob]: [any, any, any]) => { console.log('BOLB', blob); //should be blob not a stream if(action.key === 'start_recording') mediaRecorder.start() if(action.key === 'stop_recording') mediaRecorder.stop() } })

我正在尝试创建记录音频流,但在某些方面遇到了麻烦。首先,我从导航器mediaDevices getUserMedia创建一个Promise流,然后将其映射到媒体...
cyclejs xstream-js
1个回答
0
投票
您的方法几乎是正确的,包括xs.create,但是如果您将map设为流,则现在有了事件流。要获取正常的事件流,只需在地图后添加.flatten()
© www.soinside.com 2019 - 2024. All rights reserved.