gpt4 book ai didi

android - Cordova 视频/音频无法从 cdvfile ://urls after update to 3. 3.0 播放

转载 作者:可可西里 更新时间:2023-11-01 03:08:30 25 4
gpt4 key购买 nike

我的 Cordova 应用程序从服务器下载音频文件,并使它们可以在设备离线时播放。直到昨天我升级到最新版本时一切正常。

最初,下载(通过文件传输插件)和播放(通过媒体插件)都不起作用。进一步研究我发现 fileSystem.root.fullPath 现在返回一个相对于应用程序本地 Web 根文件夹的路径,但它过去返回一个完全限定的路径。 Cordova 现在建议改用 fileSystem.root.toURL() ( http://cordova.apache.org/news/2014/02/10/plugins-release.html )。这确实解决了文件传输问题。

但是,使用新的 URL 方案不适用于音频文件。尝试播放文件时,我收到一条错误消息,提示 “无法使用资源 'cdvfile://localhost/persistent/path/to/file' 中的音频文件”

检查 Cordova 问题跟踪器,我发现有人也报告了视频文件的相同问题 (https://issues.apache.org/jira/browse/CB-6051)。

Cordova 似乎没有更新 CDVSound 插件来处理新的文件名格式,但如果我可以像以前一样访问完全限定路径,它可能仍然有效。我查看了新代码和文档,但没有找到执行此操作的方法。

有没有人设法从文件插件中获得完全限定的路径?

最佳答案

我使用 dev 分支进行文件和文件传输,使其适用于视频。他们向 Entry 类添加了一个名为 toNativeURL 的函数。您需要从 github 项目下载 zip 文件:

https://github.com/apache/cordova-plugin-file-transfer/tree/dev

https://github.com/apache/cordova-plugin-file/tree/dev

https://github.com/apache/cordova-plugin-media/tree/dev

然后将它们安装到您的项目中:

cordova plugin rm org.apache.cordova.file-transfer
cordova plugin rm org.apache.cordova.file
cordova plugin rm org.apache.cordova.media

cordova plugin add <path_to_unzipped_dev_branch_of_file_plugin>
cordova plugin add <path_to_unzipped_dev_branch_of_file-transfer_plugin>
cordova plugin add <path_to_unzipped_dev_branch_of_media_plugin>

这是我工作的一个例子:

<!DOCTYPE html>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<html>
<head>
<meta charset="utf-8" />
<meta name="format-detection" content="telephone=no" />
<!-- WARNING: for iOS 7, remove the width=device-width and height=device-height attributes. See https://issues.apache.org/jira/browse/CB-4323 -->
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />
<link rel="stylesheet" type="text/css" href="css/index.css" />
<title>Hello World</title>
</head>
<body>
<div id="main" class="app">
<h1>Apache Cordova</h1>
<div id="deviceready" class="blink">
<p class="event listening">Connecting to Device</p>
<p class="event received">Device is Ready</p>
</div>
<div id="messages">
Loading Video...
</div>
<video width="320px" height="240px" controls></video>
</div>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>
<script type="text/javascript">
app.initialize();

document.addEventListener("deviceready", onDeviceReady, false);

// device APIs are available
//
function onDeviceReady() {
console.log('Requesting file system');
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
}

function gotFS(fileSystem) {
fileSystem.root.getDirectory("vids", {create: true}, gotDir);
}

function gotDir(dirEntry) {
dirEntry.getFile("video.mp4", {create: true, exclusive: false}, gotFile);
}

function gotFile(fileEntry) {
var localPath = fileEntry.fullPath;
var localUrl = fileEntry.toURL();

console.log('Loaded local path: ' + localPath);
console.log('Loaded local url: ' + localUrl);

var fileTransfer = new FileTransfer();
var uri = encodeURI('http://<url_to_video>.mp4');
console.log('Downloading ' + uri + ' to ' + localPath);

fileTransfer.download(
uri,
localUrl,
function(entry) {
console.log('download complete (path): ' + entry.fullPath);
console.log('download complete (url): ' + entry.toURL());
console.log('download complete (native): ' + entry.toNativeURL());
document.getElementById('messages').innerHTML =
'Downloaded Video path: ' + entry.fullPath + '<br />'
+ 'Downloaded Video url: ' + entry.toURL() + '<br />'
+ 'Downloaded Video Native url: ' + entry.toNativeURL() + '<br />';
var videoNode = document.querySelector('video');
videoNode.src = entry.toNativeURL();
},
function(error) {
console.log('download error source ' + error.source);
console.log('download error target ' + error.target);
}
);
}

function fail(error) {
console.log('Error creating file [' + error.name + ']: ' + error.message);
}
</script>
</body>
</html>

如果它适用于视频,那么它肯定适用于音频。

关于android - Cordova 视频/音频无法从 cdvfile ://urls after update to 3. 3.0 播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21846046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com