在 Shiny 中从 JavaScript 保存/导出 webm 视频到应用程序目录
Save / export webm videos to app directory from JavaScript in Shiny
我已经使用 RecordRTC 和 JavaScript 将网络摄像头视频捕获集成到 Shiny 应用程序中。效果很好,我可以访问我的视频并将其存储在名为 "video.blob" 的 JavaScript 变量中。但是,我很难在按下 "btn-save-recording" 按钮后将该文件导出到我的应用程序的闪亮目录中。
我已尝试按照此处的建议将 blob 传递给 shiny:https://shiny.rstudio.com/articles/communicating-with-js.html
Shiny.setInputValue("videoObject", video.blob)
我还尝试将它作为表单的一部分传递给 shiny:
var formData = new FormData();
formData.append('video', video.blob);
Shiny.setInputValue("videoObject", formData)
但是,到目前为止,我既无法访问 Shiny 中的 videoObject,也无法将其保存到应用程序目录中。
我还尝试按照此处 https://ourcodeworld.com/articles/read/671/how-to-record-a-video-with-audio-in-the-browser-with-javascript-webrtc and here Local store video webRTC 的建议在 PHP 中编写解决方案。但是,执行 PHP 脚本 returns 出现“400 错误请求错误”。我以前从未使用过 PHP,所以很有可能我做错了什么,或者 PHP 一开始就无法在 Shiny 服务器上运行。
如有任何关于
的信息,我将不胜感激
- 如何在 Shiny
上从 JavaScript 将 webm 视频保存到我的应用程序目录
- 如何将 webm 视频从 JavaScript 传递到 Shiny,以便我可以使用 opencv、imager 或 av 等库来处理它。
- 如果没有简单的方法来完成上述任务,我将不胜感激关于我应该启动什么类型的其他服务器的一些建议,这些服务器将能够接收从 JavaScript.[=31 发送的我的 webm 视频=]
我找到了答案:
在JavaScript
- 使用 URL.getDataURL() 函数(基于 https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL)将视频 blob 转换为 base 64 编码字符串。
代码:
recorder.getDataURL(function(dataURL) {
video.data = dataURL;
});
- 将该数据传递给 Shiny 在 JavaScript 中初始化的 Shiny.onInputChange 变量。
代码:
var formData = {id:123, data: video.data}
Shiny.onInputChange("videoobject", formData)
在 R / 闪亮
- 删除 data:/;base64, 添加的 JavaScript 前缀。
- 从 base_64 转换回二进制。
- 在服务器上存储二进制文件。
代码:
observeEvent(input$videoobject,{
data <- input$videoobject$data
writeBin(jsonlite::base64_dec(substr(data,24,nchar(data))), "www/test_video.webm")
})
我已经使用 RecordRTC 和 JavaScript 将网络摄像头视频捕获集成到 Shiny 应用程序中。效果很好,我可以访问我的视频并将其存储在名为 "video.blob" 的 JavaScript 变量中。但是,我很难在按下 "btn-save-recording" 按钮后将该文件导出到我的应用程序的闪亮目录中。
我已尝试按照此处的建议将 blob 传递给 shiny:https://shiny.rstudio.com/articles/communicating-with-js.html
Shiny.setInputValue("videoObject", video.blob)
我还尝试将它作为表单的一部分传递给 shiny:
var formData = new FormData();
formData.append('video', video.blob);
Shiny.setInputValue("videoObject", formData)
但是,到目前为止,我既无法访问 Shiny 中的 videoObject,也无法将其保存到应用程序目录中。
我还尝试按照此处 https://ourcodeworld.com/articles/read/671/how-to-record-a-video-with-audio-in-the-browser-with-javascript-webrtc and here Local store video webRTC 的建议在 PHP 中编写解决方案。但是,执行 PHP 脚本 returns 出现“400 错误请求错误”。我以前从未使用过 PHP,所以很有可能我做错了什么,或者 PHP 一开始就无法在 Shiny 服务器上运行。
如有任何关于
的信息,我将不胜感激- 如何在 Shiny 上从 JavaScript 将 webm 视频保存到我的应用程序目录
- 如何将 webm 视频从 JavaScript 传递到 Shiny,以便我可以使用 opencv、imager 或 av 等库来处理它。
- 如果没有简单的方法来完成上述任务,我将不胜感激关于我应该启动什么类型的其他服务器的一些建议,这些服务器将能够接收从 JavaScript.[=31 发送的我的 webm 视频=]
我找到了答案:
在JavaScript
- 使用 URL.getDataURL() 函数(基于 https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL)将视频 blob 转换为 base 64 编码字符串。
代码:
recorder.getDataURL(function(dataURL) {
video.data = dataURL;
});
- 将该数据传递给 Shiny 在 JavaScript 中初始化的 Shiny.onInputChange 变量。
代码:
var formData = {id:123, data: video.data}
Shiny.onInputChange("videoobject", formData)
在 R / 闪亮
- 删除 data:/;base64, 添加的 JavaScript 前缀。
- 从 base_64 转换回二进制。
- 在服务器上存储二进制文件。
代码:
observeEvent(input$videoobject,{
data <- input$videoobject$data
writeBin(jsonlite::base64_dec(substr(data,24,nchar(data))), "www/test_video.webm")
})