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

Posted

技术标签:

【中文标题】无法使用cordova在android上播放视频【英文标题】:Can't play videos on android using cordova 【发布时间】: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 盒子上运行该应用

【问题讨论】:

【参考方案1】:

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

【讨论】:

这些解决方法是什么?你能分享吗?谢谢。

以上是关于无法使用cordova在android上播放视频的主要内容,如果未能解决你的问题,请参考以下文章

无法在 iOS 上加载播放视频

在 iOs 和 Android 的 PhoneGap/Cordova-app 中播放视频

Unity VideoPlayer使用url方式,Android平台下无法播放http链接的视频(黑屏无反应无报错无log输出)...

Android:无法播放 mp4 视频

Cordova Local Notification 为 iOS 和 Android 播放本地声音

在某些 Android 版本上无法播放直播视频,未找到 HTML5 视频