是否可以从打包的应用播放本地视频文件?我已编写代码来选择文件(chrome.fileSystem.chooseEntry)并标识路径(chrome.fileSystem.getDisplayPath),但将其设置为我的视频标记的源代码会返回:
不允许加载本地资源:file:///
提前致谢。
答案 0 :(得分:4)
我的解决方案是通过此调用选择本地文件:
chrome.fileSystem.chooseEntry({'type': 'openFile'}, function(fileEntry) {
// ...
});
在内存中,我在沙箱持久区域中有一个目录:
fileSystem.root.getDirectory('videos', { create : true }, function(dirEntry) {
// ...
}, $scope.errorHandler);
并将本地文件复制到该目录:
fileEntry.copyTo(dirEntry, fileEntry.name, function(newFileEntry) {
video.src = newFileEntry.toURL();
});
效果很好而且非常干净,我在这里没有实现的功能,但重要的是编解码器检测,因为如果你尝试加载Chrome不支持的视频,你可能会认为有什么问题。代码,但它与编解码器/视频播放器有关。
以下是完整的代码:
window.requestFileSystem(window.PERSISTENT, 300*1024*1024, function(fileSystem) {
console.log('A request to access the file system have been made.');
$scope.fileSystem = fileSystem;
}, $scope.errorHandler);
$scope.loadVideo = function() {
chrome.fileSystem.chooseEntry({'type': 'openFile'}, function(fileEntry) {
$scope.fileSystem.root.getDirectory('videos', { create : true }, function(dirEntry) {
fileEntry.copyTo(dirEntry, fileEntry.name, function(newFileEntry) {
video.src = newFileEntry.toURL();
});
}, $scope.errorHandler);
});
};
答案 1 :(得分:2)
我发现有效的方法是从FileEntry创建一个对象网址,并使用src
作为<video>
标记。这是一个示例:
video_file.file(function(file) {
var video_url = webkitURL.createObjectURL(file);
$player.attr("src", video_url);
});
答案 2 :(得分:1)
我遇到了类似的问题并遇到了同样的问题,由于安全隐患,您无法加载file:///
网址,并且使用媒体库示例因为我的视频文件超过150MB而崩溃。
Chrome团队建议我查看https://github.com/GoogleChrome/apps-resource-loader并使用RAL.RemoteImage
使用的方法将文件下载到沙盒存储中,然后从那里使用它。
我使用ral.min.js
并实现了我自己的基于RemoteVideo
对象的RemoteImage
对象,将元素更改为video
对象而不是{{1}在加载之前使用海报而不是默认图像,这对我有用。