最近在做公司项目的时候,有一个录音的需求,需要实现录音完成后上传服务器,并在其他页面从服务器获取录音的url进行在线播放,本来一切运行正常,在手机上也能正常播放,结果在碰到一台华为手机后我的噩梦就开始了。下面是我的代码:
try{
mPlayer = new MediaPlayer();
mPlayer.setDataSource(url);
mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mPlayer.start();
}
mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer mp) {
if(mPlayer!=null){
mPlayer.release();
mPlayer=null;
}
}
});
mPlayer.prepareAsync();
}catch(IOException e){
}
在这台华为手机上每次一执行到mPlayer.prepareAsync()就会报错: java.io.IOException: Prepare failed.: status=0x1,在网上搜解决方案试验了都不行,而这个报错又是个通用的未知错误,也不太好定位错误原因,然后我就开始寻找原因,首先先将服务器上的音频文件下载到本地,然后用mediaPlayer进行播放,可以正常播放,于是排除了解码的原因,然后我就怀疑是URL的问题(我们的项目url地址是https的),然后我就自己搭建了一个http的后台,把录音文件放上之后,果然可以播放了。原来是HTTPS导致的。
不过为什么会这样我也不太清楚,希望能够帮到那些与我有同样问题的猿人们,也希望知道原因的大神可以留言告诉我一下,万分感谢。
网友评论