Играть местные видео-файл в Хром упакованных приложений


Можно ли воспроизвести локальный видеофайл из упакованного приложения? Я уже написал код для выбора файла (chrome.файловая система.chooseEntry) и определить путь (хром.файловая система.getDisplayPath), но установка его на источник тега my video возвращает:

Не разрешается загружать локальный ресурс: file:// /

Заранее благодарю.

3 2

3 ответа:

Мое решение состояло в том, чтобы выбрать локальный файл через этот вызов:

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);
  });
};

Я нашел, что работает-это создание url-адреса объекта из FileEntry и использование в качестве src для тега <video>. Вот пример:

video_file.file(function(file) {
        var video_url = webkitURL.createObjectURL(file);
        $player.attr("src", video_url);
});

У меня был похожий вопрос и столкнулся с теми же проблемами, вы не можете загрузить URL-адреса file:/// из-за последствий для безопасности, и использование примера media gallery было сбоем, потому что мои видеофайлы превышают 150 МБ.

Команда chrome предложила мне посмотреть на https://github.com/GoogleChrome/apps-resource-loader и используйте метод, который использует RAL.RemoteImage, чтобы загрузить файл в хранилище песочницы, а затем использовать его оттуда.

Я использую ral.min.js и реализовал свой собственный RemoteVideo объект что я основывался на объекте RemoteImage, меняя элемент на объект video вместо объекта img и используя плакат вместо изображения по умолчанию, прежде чем он будет загружен, и это сработало для меня.