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流,然后将其映射到媒体...
map
设为流,则现在有了事件流。要获取正常的事件流,只需在地图后添加.flatten()
。