马赛
马赛
  • 发布:2015-01-07 09:55
  • 更新:2015-01-07 11:32
  • 阅读:2238

【咨询】iPhone读取音频文件问题

分类:HTML5+

用html5的download方法在iPhone手机下载文件,涉及权限问题吗,为什么在Android就好使,在ios下载后,读取就报找不到文件呢?
用的是html5的plus.downloader.createDownload进行下载,已经提示下载成功了,但是一读取就报找不到文件呢?

2015-01-07 09:55 负责人:无 分享
已邀请:
DCloud_IOS_XTY

DCloud_IOS_XTY

请贴下你的代码有可能两平台实现有差异

马赛

马赛 (作者)

感谢回复,是这样的,我是调用了系统提供播放控件,发现ios是读取相对路径可以成功播放,所以在下面做了处理,测试结果,在ios录制音频后,通过读取音频可以播放,但是从服务器上下载的文件后读取音频文件就报异常,无法找到音频文件,初步怀疑是不是权限有问题
function startPlay( url ) {
if(osName=='iOS'){
if(url.indexOf("_")==0){

    }else{  
         url = plus.io.convertAbsoluteFileSystem(url);  
        alert("convertAbsoluteFileSystem:"+url)  
    }  
}  
p = plus.audio.createPlayer( url );  
p.play( function () {  
    console.log("===========播放完成");  
    stopPlay();  
}, function ( e ) {  
    alert("播放音频文件\""+url+"\"失败:"+e.message );  
    console.log( "播放音频文件\""+url+"\"失败:"+e.message );  
} );  

}

  • DCloud_IOS_XTY

    如何是使用plus.audio接口下载task取到的路径不需要进行转化

    2015-01-07 12:31

  • 马赛 (作者)

    之前用的就是全路径,有这个问题我才转换的,转换后还是不行

    2015-01-07 13:29

  • DCloud_IOS_XTY

    task取到的路径不是全路径而是类似_downloads/这种路径,这个plus.audio接口是直接支持的

    2015-01-07 14:01

  • 马赛 (作者)

    我是这样设置的下载路径,var options = {method:"GET",filename:"_doc/audio/"+fname};我用task.filename直接取的这个也试过了,读取的相对路径,也不行,不知道我哪里设置的有问题

    2015-01-07 14:13

  • DCloud_IOS_XTY

    这样你把从下载开始到播放的代码摘出来发给我看看

    2015-01-07 14:49

  • 马赛 (作者)

    下载方法如下,完全参考官方写法,startPlay方法上面已经贴出来了

    function DownloadTask(fname){

    if ( dtask ) {

    console.log( "下载任务已创建!" );

    return;

    }

    var url = "http://xxxx?filename="+fname;

    var options = {method:"GET",filename:"_doc/audio/"+fname};

    dtask = plus.downloader.createDownload( url, options );

    dtask.addEventListener( "statechanged", function(task,status){

    switch(task.state) {

    case 1: // 开始

    console.log( "开始下载..." );

    break;

    case 2: // 已连接到服务器

    console.log( "链接到服务器..." );

    break;

    case 3: // 已接收到数据


            break;  
    case 4: // 下载完成
    var ds = document.getElementById(fname);
    console.log( "下载完成!"+task.filename );
    plus.io.resolveLocalFileSystemURL( task.filename, function( entry ) {
    // 可通过entry对象操作test.html文件
    entry.file( function(file){
    var fileReader = new plus.io.FileReader();
    console.log("文件下载路径"+file.fullPath);
    ds.innerHTML = "<img width=\"50px\" height=\"30px\" onclick=\"startPlay('"+task.filename+"')\"
    }
    } );
    }, function ( e ) {
    alert( "Resolve file URL failed: " + e.message );
    } );
    dtask = null;
    break;
    }
    } );
    console.log( "创建下载任务成功!" );
    if ( !dtask ) {
    console.log( "请先创建下载任务!" );
    return;
    }
    dtask.start();

    }

    2015-01-07 15:06

  • DCloud_IOS_XTY

    代码试了没有问题,是离线打包吗?另外下载的是什么音频文件是播放器不支持吗

    2015-01-07 18:46

  • 马赛 (作者)

    没打包,是开发模式,下载的音频文件是MP3格式的,是Android的amr格式转的mp3,之前iPhone的wav转mp3在Android上播放是没问题的,现在就是Android的amr格式转换成mp3之后在iPhone上就提示找不到文件,您可以模拟一下看是否有这种问题

    2015-01-08 09:02

EEP

EEP

代码展示好像没有高亮,应该很多这种插件

该问题目前已经被锁定, 无法添加新回复