gpt4 book ai didi

javascript - 使用node.js fs.readStream()在electronic html5视频播放器中播放本地视频文件

转载 作者:行者123 更新时间:2023-12-03 12:28:23 25 4
gpt4 key购买 nike

我正在开发一个视频播放器应用程序,该应用程序使用node.js和electronic播放本地文件系统中的视频(.mp4)(因此,我使用的是chrome5的html5视频播放器)。

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

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

this.videoNode = document.querySelector('video');
const file: Buffer = fs.readFileSync(video.previewFilePath);
this.fileURL = URL.createObjectURL(new Blob([file]));
this.videoNode.src = this.fileURL;

这对于小于2GB的视频文件确实适用。大于2GB的文件会触发以下错误:
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()将ReadStream传递给html5视频播放器。不幸的是,我找不到任何有关如何将此流传递到视频播放器的文档。

最佳答案

正如主题所述,您正在使用 Electron ,从以上评论可以明显看出,您正在避开服务器。看来,如果您只是创建一个脱机视频播放器,那么您会使事情变得复杂。为什么要创建一个缓冲区然后创建一个新的URL?您可以通过简单地获取视频路径并将其用作视频对象的src属性来实现此目的。
您的代码应如下所示-

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文件中的video元素,因此您无需禁用webPreference。
您可以看一下使用electronic-
https://github.com/HemantKumar01/ElectronMediaPlayer
免责声明:我是上述项目的所有者,并邀请每个人都为该项目做出贡献

关于javascript - 使用node.js fs.readStream()在electronic html5视频播放器中播放本地视频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57009575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com