从网络摄像头到服务器的纯js流

时间:2019-12-13 12:26:31

标签: javascript video-streaming http-live-streaming rtmp

是否可以从webcamera(前端)捕获流并通过 hls rtmp 使用纯js(无闪存)将其流传输到服务器。
并且如果还有其他协议允许将流作为流发送(与hls不同),则将更受欢迎。

2 个答案:

答案 0 :(得分:3)

我找到了解决方案。 目前尚没有任何方法可以将前端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(平均)秒的视频流。

答案 1 :(得分:0)

是的,你可以做到。

  

您可以使用WebRTC规范中称为getUserMedia()的API直接访问相机。 getUserMedia()会提示用户访问其连接的麦克风和摄像机。

     

如果成功,API将返回包含数据的Stream   从相机或麦克风,然后我们可以   将其附加到元素,将其附加到WebRTC流或保存   它使用MediaRecorder API。

     

要从摄像机获取数据,我们只需设置视频:约束中为true   传递给getUserMedia()API的对象。

    <video id="player" controls height="400" width="400"/video>

<script>
  var player = document.getElementById("player");

  var handleSuccess = function(stream) {
    player.srcObject = stream;
  };

  navigator.mediaDevices
    .getUserMedia({ audio: true, video: true })
    .then(handleSuccess);
</script>

我引用此link

的答案