无法使用 cordova 在 android 上播放视频

Can't play videos on android using cordova

我已经四处寻找好几天了:(所以真的需要你的帮助。 我正在开发的是一个下载图像和视频并全屏显示的应用程序。 对于图像,一切都很好。

但是在播放视频时有时出现此图像并且视频无法播放。

这是我的下载代码:

download(URL, fileName, callback) {
        var folderName = "serverMediaDir";
        var uri = encodeURI(URL);
        window.requestFileSystem(
          LocalFileSystem.PERSISTENT,
          0,
          function (fileSystem) {
            var directoryEntry = fileSystem.root; // to get root path of directory
            directoryEntry.getDirectory(
              folderName,
              {
                create: true,
                exclusive: false
              },
              function (parent) {
                // Directory created successfuly
                var filename = fileSystem.root.toURL() + folderName + "/" + fileName;
                console.log("Directory created successfuly: " + filename);
                var fileTransfer = new FileTransfer();
                fileTransfer.download(
                  uri,
                  filename,
                  function (entry) {
                    // download success
                    var path = entry.toURL(); //**THIS IS WHAT I NEED**
                    console.log("Download Completed: " + entry.fullPath);
                    callback(null, filename, entry);
                  },
                  function (error) {
                    callback(error, null);
                  } // irrelevant download error
                );
              },
              function (error) {
                //Error while creating directory
                callback(error, null);
              }
            );
          }, function (error) {
            callback(error, null);
          } // irrelevant request fileSystem error
        );
      }

然后我将视频和图像的完整路径保存到一个数组中,我用它来显示它们。

我是这样玩的:

vid: function () {
        var self = this;
        //Accepts any number of ‘src‘ to a same video ('.mp4', '.ogg' or '.webm')
        var el = document.createElement("video");
       // var source = document.createElement("source");
        /*for (var i = 0; i < arguments.length; i++) {
          source.src = arguments[i];
         // source.type = "video/" + arguments[i].split(".")[arguments[i].split(".").length - 1];
          el.appendChild(source);
        }*/
        el.src = arguments[0];
        el.onplay = function () {
          clearInterval(window.sliding);
        };
        el.onended = function () {
          window.sliding = setInterval(self.rotateImages, self.mediaUnitDuration * 1000);
          self.rotateImages();
        };
        return el;
 },
 
 rotateMedias: function () {
        var self = this;
        if (self.newMedia) {
          self.galleryArray = [];
          if (self.mediaServer.length === 0) {
            self.galleryArray.push(self.img(require(window.display.toUpperCase() ==='H'? '~/assets/H.jpg':'~/assets/V.jpg')))
          }
          for (var i = 0; i < self.mediaServer.length; i++) {
            if (self.mediaServer[i].type.toLowerCase() === "video" && self.mediaServer[i].status) {
              var obj = {};
              obj = self.vid(self.mediaServer[i].path);
            } else if (self.mediaServer[i].type.toLowerCase() === "image" && self.mediaServer[i].status) {
              var obj = {};
              obj = self.img(self.mediaServer[i].path);
            }
            self.galleryArray.push(obj);
          }
          self.newMedia = false;
        }

        $("#slideShow").fadeOut("slow");
        setTimeout(function () {
          self.curImg = self.curImg < self.galleryArray.length - 1 ? self.curImg + 1 : 0;
          document.getElementById("slideShow").innerHTML = "";
          self.galleryArray[self.curImg].style.width = "100%";
          self.galleryArray[self.curImg].style.height = "100%";
          self.galleryArray[self.curImg].style.margin = "0px";
          document.getElementById("slideShow").appendChild(self.galleryArray[self.curImg]);

          if (self.galleryArray[self.curImg].tagName.toLowerCase() === "video") {
            self.galleryArray[self.curImg].play();
          }
          $("#slideShow").fadeIn("slow");
        }, 500);
      }

我尝试的解决方案是更改我存储文件的目录 (cordova.file.applicationDirectory|dataDirectory|externalApplicationStorageDirectory...) 并尝试 public 和 private 但不是也在工作。

我也尝试了协议 file:///cdvfile://localhost

我使用: 科尔多瓦 10.0.0 cordova-plugin-file-transfer 1.7.1 科尔多瓦插件文件 6.0.2

并使用 android 7.1.2

在 X96mini 盒子上运行应用程序

经过大量测试后,我发现这是一个 box bug(该应用程序可以在许多其他 android 不同版本的设备上运行)。 Thnx 上帝,我找到了 this 插件,所以我使用了它,它确实可以正常工作。