在Chrome打包应用中播放本地视频文件

时间:2013-05-11 19:47:45

标签: google-chrome html5-video google-chrome-app

是否可以从打包的应用播放本地视频文件?我已编写代码来选择文件(chrome.fileSystem.chooseEntry)并标识路径(chrome.fileSystem.getDisplayPath),但将其设置为我的视频标记的源代码会返回:

不允许加载本地资源:file:///

提前致谢。

3 个答案:

答案 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}在加载之前使用海报而不是默认图像,这对我有用。