cordovaiOSvideo标签本地文件源

我在我的基于Cordova的应用上在iOS上播放本地video时遇到问题。 在开始的时候,我想强调一下,只有在使用WKWebView的时候,这个问题才会发生,如果使用UiWebView ,video播放效果会很好。 这是我的情况:

– 用户来屏幕到哪个videourl传递

-Via FileTransfer我将它下载到手机并将其存储在所需的位置

– 使用JSvideo加载到<video>标签并播放。

基本上,我正在做的所有事情都是在回答这个SO 问题时所描述的。 UiWebView的问题是,如果相对path被设置为src,video出于某种原因无法加载(无论使用哪种组合),所以这个解决scheme对我来说很好,因为它基于这一行代码:

 entry.toURL() 

这将返回下载video的完整path,至less对于UiWebView来说是非常好的。

WkWebView的问题是entry.toURL()返回smth。 喜欢这个:

 file:///var/mobile/Containers/Data/Application/3A43AFB5-BEF6-4A0C-BBDB-FC7D2D98BEE9/Documents/videos/Dips.mp4 

而WKWebView不能和file://协议一起工作。 而且,WKWebView都不能用相对path:(

任何人都可以帮我解决这个问题吗?

今天我用了以下工具,但是只有在释放模式下部署到我的设备时才能正常工作。 在debugging模式下将应用程序部署到我的设备时,它将无法工作。

  • iOS 9.3.2
  • cordova4.0.0(iOS 3.8.0)
  • Telerik WKWebView Polyfill 0.6.9

video列表加载方法:

 var path = window.cordova.file.documentsDirectory, //iTunes File Sharing directory href = 'http://localhost:12344/Documents', //WKWebView default server url to documents list = []; function fsSuccess(dir) { var reader = dir.createReader(); reader.readEntries(function (entries) { for (var i = 0; i < entries.length; i++) { list.push({ name: entries[i].name, path: href + entries[i].fullPath }); } }); } function fsError(error) { console.log('error', error) } window.resolveLocalFileSystemURL(path, fsSuccess, fsError); 

video列表点击处理器:

 var video = $('#video')[0], source = $('#source'); function play(index) { source.attr('src', list[index].path); video.load(); video.play(); } 

video播放器标记:

 <video id="video" autoplay controls loop webkit-playsinline> <source id="source" type="video/mp4" /> </video> 

我正在debugging,直到我试图释放buid,它的工作,我的头在我的桌子上拉仁胡克。

使用cordova file opener插件的示例代码片段可以从设备上打开下载文件(不过在WKWebView中没有testing过)

 var fileTransfer = new FileTransfer(); var cdr; if (sessionStorage.platform.toLowerCase() == "android") { window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory, onFileSystemSuccess, onError); } else { // for iOS window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, onError); } function onError(e) { navigator.notification.alert("Error : Downloading Failed"); }; function onFileSystemSuccess(fileSystem) { var entry = ""; if (sessionStorage.platform.toLowerCase() == "android") { entry = fileSystem; } else { entry = fileSystem.root; } entry.getDirectory("Cordova", { create: true, exclusive: false }, onGetDirectorySuccess, onGetDirectoryFail); }; function onGetDirectorySuccess(dir) { cdr = dir; dir.getFile(filename, { create: true, exclusive: false }, gotFileEntry, errorHandler); }; function gotFileEntry(fileEntry) { // URL in which the pdf is available var documentUrl = "http://localhost:8080/testapp/test.pdf"; var uri = encodeURI(documentUrl); fileTransfer.download(uri, cdr.nativeURL + "test.pdf", function(entry) { // Logic to open file using file opener plugin openFile(); }, function(error) { navigator.notification.alert(ajaxErrorMsg); }, false ); }; function openFile() { cordova.plugins.fileOpener2.open( cdr.nativeURL + "test.pdf", "application/pdf", //mimetype { error: function(e) { navigator.notification.alert("Error Opening the File.Unsupported document format."); }, success: function() { // success callback handler } } ); };