通过Socket IO从Screen发送数据?



我一直在谷歌周围,但找不到一个明确的答案。

我正在制作一个记录标签的chrome扩展。这个想法是使用Websockets(特别是Socket.io)将getUserMedia流式传输到后端,后端写入文件,直到特定条件(后端中的值)被设置。

问题是,我不知道如何使用特定的ID调用后端,也不知道如何正确地写入文件而不破坏它?

您正在通过websocket将MediaRecorder的输出发送到后端。

您可以在MediaRecorder的ondataavailable处理程序中执行此操作。

很容易把这些数据塞进websocket:

function ondataavailable ( event ) {
event.data.arrayBuffer().then ( buf => {socket.emit('media', buf) })
}

在后端,您必须按照接收的顺序将接收到的所有数据连接到媒体文件。该媒体文件可能具有视频/webm MIME类型;如果你给它.webm文件扩展名,大多数媒体播放器将正确处理它。注意,如果媒体文件没有按顺序包含所有blob,那么它将是无用的。前几个blob包含理解流所需的元数据。这很容易做到,只需将每个接收到的数据项附加到文件中。

服务器端你可以使用socket.id属性来组成一个文件名;这为每个套接字连接提供了唯一的文件。像下面这些性能差、未经调试、不适合生产的代码就会这样做。

io.on("connection", (socket) => {
if (!socket.filename) 
socket.filename = path.join(__dirname, 'media', socket.id + '.webm))
socket.on('filename', (name) => {
socket.filename = path.join(__dirname, 'media', name + '.webm))
})
socket.on('media', (buf) => {
fs.appendFile(buf, filename)
})
})

在客户端,你可以这样设置文件名

socket.emit('filename', 'myFavoriteScreencast')

最新更新