【问题标题】:Can't play videos on android using cordova无法使用cordova在android上播放视频
【发布时间】:2021-04-04 19:19:38
【问题描述】:

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

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

这是我的下载代码:

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...) 并尝试公开和私有但也无法正常工作。

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

我使用: 科尔多瓦 10.0.0 科尔多瓦插件文件传输 1.7.1 科尔多瓦插件文件 6.0.2

并在装有 android 7.1.2 的 X96mini 盒子上运行该应用

【问题讨论】:

    标签: javascript android cordova filesystems html5-video


    【解决方案1】:

    经过大量测试,我发现这是一个盒子错误(该应用程序可以在许多其他具有不同版本的 android 设备上运行)。 Thnx 上帝,我找到了 this 插件,所以我使用了它,并且它确实可以很好地解决一些问题。

    【讨论】:

    • 这些解决方法是什么?你能分享吗?谢谢。
    猜你喜欢
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多