从网络摄像头到服务器的纯 js 流
Pure js stream from webcamera to server
是否可以从网络摄像头(在前端)捕获流并使用纯 js 通过 hls 或 rtmp 将其流式传输到服务器(没有闪光灯)。
如果有另一种协议允许将流作为流发送(与 hls 不同),将是首选。
我找到了解决方案。
目前还没有任何方法可以 "convert" 从 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(平均)秒的视频流。
是否可以从网络摄像头(在前端)捕获流并使用纯 js 通过 hls 或 rtmp 将其流式传输到服务器(没有闪光灯)。
如果有另一种协议允许将流作为流发送(与 hls 不同),将是首选。
我找到了解决方案。
目前还没有任何方法可以 "convert" 从 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(平均)秒的视频流。