微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过套接字 IO 从屏幕发送数据?

如何解决通过套接字 IO 从屏幕发送数据?

我一直在谷歌上搜索,但找不到明确的答案。

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

问题是,我不知道如何使用特定 ID 调用后端,以及如何在不损坏文件的情况下正确写入文件

解决方法

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

大概是您在 MediaRecorder 的 ondataavailable 处理程序中执行此操作。

将这些数据填充到 websocket 中非常容易:

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

在后端,您必须按照接收顺序将接收到的所有数据连接到一个媒体文件中。此媒体文件可能具有 video/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,name + '.webm))
  })
  socket.on('media',(buf) => {
    fs.appendFile(buf,filename)
  })
})

在客户端,您可以使用此设置文件名。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。