是否可能使用纯JS(无需flash)从前端捕获网络摄像头流并通过hls或rtmp将其流式传输到服务器?
如果还有其他协议让流作为流发送(不像hls),将更优先选择。
是否可能使用纯JS(无需flash)从前端捕获网络摄像头流并通过hls或rtmp将其流式传输到服务器?
如果还有其他协议让流作为流发送(不像hls),将更优先选择。
navigator.getUserMedia()
接收到的流 "转换" 为前端的 rtmp
。
但是我们可以使用 MediaRecorder Api。 const stream = await navigator.getUserMedia(options)
const recorder = new MediaRecorder(stream)
recorder.ondataavailable = (e) => { socket.emit('binaryData',e.data) }
recorder(start)
在后端
const ffmpegProcess = spawn('ffmpeg', ffmpegCommans)
socket.on('binaryData', (data) => {
ffmpegProcess.stdin.write(params.data)
})
FFmpeg可以将vp8视频流转换为hls/rtmp/rtsp或其他格式。
通过这种方式,我们可以获得平均延迟3秒的视频流。