Node.js 通过Socket.IO使用FFMPEG中的块进行HTML5 WebM流媒体

Node.js 通过Socket.IO使用FFMPEG中的块进行HTML5 WebM流媒体,node.js,express,socket.io,webm,fluent-ffmpeg,Node.js,Express,Socket.io,Webm,Fluent Ffmpeg,我试图利用WebSocket从WebM流中获取livestream块。以下是我在服务器端拼凑的一些示例代码: const command = ffmpeg() .input('/dev/video0') .fps(24) .audioCodec('libvorbis') .videoCodec('libvpx') .outputFormat('webm') const ffstream = command.pipe() ffstream.on('data', chunk =

我试图利用WebSocket从WebM流中获取livestream块。以下是我在服务器端拼凑的一些示例代码:

const command = ffmpeg()
  .input('/dev/video0')
  .fps(24)
  .audioCodec('libvorbis')
  .videoCodec('libvpx')
  .outputFormat('webm')

const ffstream = command.pipe()
ffstream.on('data', chunk => {
  io.sockets.emit('Webcam', chunk)
})
我用这种方式构造服务器代码,因此
ffstream.on('data',…)
也可以写入文件。我可以打开文件并在本地查看视频,但在DOM中使用块在
标记中渲染时有困难

const ms = new MediaSource()
const video = document.querySelector('#video')
video.src = window.URL.createObjectURL(ms)
ms.addEventListener('sourceopen', function () {
  const sourceBuffer = ms.addSourceBuffer('video/webm; codecs="vorbis,vp8"')
  // read socket
  // ...sourceBuffer.appendBuffer(data)
})
我在我的客户端有类似于上面的东西。我能够从服务器接收完全相同的数据块,但
sourceBuffer.appendBuffer(data)
向我抛出以下错误:
未能对“SourceBuffer”执行“appendBuffer”:此SourceBuffer已从父媒体源中删除

问题:如何在HTML5视频标签中显示这些块?


注意:根据我的阅读,我相信这与获得关键帧有关。但我无法确定如何识别这些问题。

你有没有找到解决方案,或者找到另一种适合你的方法?@moeiscool没有,我从来没有设法让它与WebM一起工作过,但我是通过流式JPG来实现的。啊,这里也一样。我也只有JPEG流媒体。