从网络摄像头到服务器的纯JS流式传输

11

是否可能使用纯JS(无需flash)从前端捕获网络摄像头流并通过hlsrtmp将其流式传输到服务器?
如果还有其他协议让流作为流发送(不像hls),将更优先选择。

1个回答

6
我找到了解决方案。 目前没有任何办法可以将从 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秒的视频流。


你能否提供一个实现了这个功能的 Github 仓库链接? - Anthony
很遗憾,该项目是私有的,但请查看此存储库。 就快完成了。 https://github.com/chenxiaoqino/getusermedia-to-rtmp - Kandrat
谢谢@Kandrat,我会去查看的。 - Anthony

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接