首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用node.js fs.readStream()在电子html5视频播放器中播放本地视频文件

使用node.js fs.readStream()在电子html5视频播放器中播放本地视频文件
EN

Stack Overflow用户
提问于 2019-07-12 23:01:54
回答 1查看 2.6K关注 0票数 1

我正在开发一个视频播放器应用程序,它使用node.js和电子从本地文件系统播放视频(.mp4) (因此我使用chromium的html5视频播放器)。

播放大于2 2GB的视频似乎是我目前方法的一个问题。

我过去常常使用fs.readFileSync读取本地视频文件,并将该Blob传递给视频播放器,如以下代码所示:

代码语言:javascript
复制
this.videoNode = document.querySelector('video');
const file: Buffer = fs.readFileSync(video.previewFilePath);
this.fileURL = URL.createObjectURL(new Blob([file]));
this.videoNode.src = this.fileURL;

这确实适用于小于2 2GB的视频文件。大于2 2GB的文件会触发以下错误:

代码语言:javascript
复制
ERROR RangeError [ERR_FS_FILE_TOO_LARGE]: File size (2164262704) is greater than possible Buffer: 2147483647 bytes
    at tryCreateBuffer (fs.js:328)
    at Object.readFileSync (fs.js:364)
    at Object.fs.readFileSync (electron/js2c/asar.js:597)

我认为解决方案是使用fs.readStream()向html5视频播放器传递一个ReadStream。不幸的是,我找不到任何关于如何将该流传递到视频播放器的文档。

EN

回答 1

Stack Overflow用户

发布于 2020-12-27 16:01:26

正如主题所说的那样,您正在使用电子,从上面的评论中可以清楚地看出,您正在避免使用服务器。看起来,如果你只是在创建一个离线视频播放器,那么你只是把事情搞复杂了。为什么要先创建一个缓冲区,然后再创建一个新的url?您可以通过简单地获取视频路径并将其作为视频对象的src属性来实现。你的代码应该是这样的-

代码语言:javascript
复制
var path="path/to/video.mp4"; //you can get it by simple input tag with type=file or using electron dialogs
this.videoNode = document.querySelector('video');//it should be a video element in your html
this.videoNode.src=path;
this.videoNode.oncanplay=()=>{
  //do something...
}

这将处理整个文件,并且您不需要禁用视频,因为videoNode是html文件中的webPreference元素。

你可以看看这个开源的媒体播放器项目,它是用电子制作的-

https://github.com/HemantKumar01/ElectronMediaPlayer

免责声明:我是上述项目的所有者,并邀请所有人参与其中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57009575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档