最近使用MediaPlayer播放網(wǎng)絡(luò)資源音頻時(shí),遇到一個(gè)問(wèn)題,
就是在使用紅米手機(jī)播放時(shí),會(huì)提示播放錯(cuò)誤,mediaPlayer.prepare();報(bào)了IO異常java.io.IOException: Prepare failed.: status=0x1,但是使用nexus 6p并沒(méi)有出現(xiàn),這也就表示只有部分的手機(jī)會(huì)出現(xiàn)這種問(wèn)題。
報(bào)錯(cuò)源碼為:
mediaPlayer.reset();
mediaPlayer.setDataSource(videoUrl);
mediaPlayer.prepare();// prepare之后自動(dòng)播放
當(dāng)我google之后得出的答案都是
File tempFile = new File(path);
FileInputStream fis = new FileInputStream(tempFile);
mediaPlayer.reset();
mediaPlayer.setDataSource(fis.getFD());
mediaPlayer.prepare();
mediaPlayer.start();
其實(shí)這個(gè)方案只適合播放本地音頻,并不能解決網(wǎng)絡(luò)音頻的問(wèn)題。
后來(lái)我嘗試了多種方案,發(fā)現(xiàn)了能播放的方法
mediaPlayer = MediaPlayer.create(context, Uri.parse(videoUrl));
mediaPlayer.start();
然后我想,是不是播放的方法不對(duì),嘗試了一下將prepare()替換成star(),然而并沒(méi)有用,還是會(huì)報(bào)錯(cuò)。
再次對(duì)比,是不是設(shè)置videoUrl的方法有問(wèn)題,不應(yīng)該直接傳Strring類(lèi)型的,而應(yīng)該轉(zhuǎn)成Uri,一試之后,果然可行,所以最終解決MediaPlayer播放網(wǎng)絡(luò)資源音頻報(bào)java.io.IOException: Prepare failed.: status=0x1的方法為:
mediaPlayer.reset();
mediaPlayer.setDataSource(context, Uri.parse(videoUrl));
mediaPlayer.prepare();// prepare之后自動(dòng)播放
希望對(duì)大家都有幫助,謝謝