我正在开发一个视频播放器应用程序,该应用程序使用node.js和electronic播放本地文件系统中的视频(.mp4)(因此,我使用的是chrome5的html5视频播放器)。
播放当前大于2GB的视频似乎是我目前的问题。
我曾经使用fs.readFileSync读取本地视频文件,并将该Blob传递给视频播放器,如以下代码所示:
Throwable.getCause()
这确实适用于小于2GB的视频文件。大于2GB的文件会触发以下错误:
this.videoNode = document.querySelector('video');
const file: Buffer = fs.readFileSync(video.previewFilePath);
this.fileURL = URL.createObjectURL(new Blob([file]));
this.videoNode.src = this.fileURL;
我认为解决方案是使用fs.readStream()将ReadStream传递给html5视频播放器。不幸的是,我找不到任何有关如何将此流传递到视频播放器的文档。
答案 0 :(得分:0)
正如主题所说,您正在使用电子,从上面的评论中可以明显看出您正在避免使用服务器。看起来,如果您只是创建一个离线视频播放器,那么您只会让事情变得复杂。你为什么要创建一个缓冲区,然后创建一个新的 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 文件中的视频元素,因此您无需禁用 webPreference。
你可以看看这个使用电子制作的开源媒体播放器项目
https://github.com/HemantKumar01/ElectronMediaPlayer
免责声明:我是上述项目的所有者,诚邀所有人参与