我一直在尝试使用MediaPlayer在android中通过字符串/字节播放音频,但可以实现结果。我正在使用的代码是
`
String ret = "";
try {
InputStream inputStream = this.openFileInput(Name);
if ( inputStream != null ) {
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String receiveString = "";
StringBuilder stringBuilder = new StringBuilder();
while ( (receiveString = bufferedReader.readLine()) != null ) {
stringBuilder.append(receiveString);
}
inputStream.close();
ret = stringBuilder.toString();
String url = "data:audio/mp3;base64,"+ret;
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(url);
mediaPlayer.prepare();
mediaPlayer.start();
}
}
catch (FileNotFoundException e) {
Toast.makeText(this, "File not found", Toast.LENGTH_LONG).show();
} catch (IOException e) {
Toast.makeText(this,String.valueOf(e), Toast.LENGTH_LONG).show();
}
catch (Exception e)
{
Toast.makeText(this,String.valueOf(e),Toast.LENGTH_LONG).show();
}`
该文件是从服务器保存的歌曲的 Base64 编码。
我得到的异常是
java.io.ioexception prepare failed status=0x800000000
我可以使用MediaPlayer使用字符串/字节播放音频吗?如果没有,有什么办法可以使我发挥同样的作用。请帮忙。
[编辑]
Android - Playing mp3 from byte[]这个可接受的答案对我有用。但是还有其他方法可以在不创建临时文件的情况下播放音频吗?
最佳答案
您正在调用mediaPlayer.setDataSource(url)方法。此处的url(字符串)必须是有效的互联网url。您尝试在此处以String形式传递数据。
第二,你还没有打电话
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
调用prepare()方法之前的方法。为了使目标流类型生效,此方法是必须调用的方法。
您可以通过三种方式使MediaPlayer正常工作。在下面的示例中查看它们:
MediaPlayer mediaPlayer = new MediaPlayer();
File file = new File("");// if you have a file object representing your audio file, you can start from here.
Uri uri = Uri.fromFile(file);// if you have a valid uri representing your audio file (may be obtained from a content provider or any other means etc), you can start from here
try {
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(this,uri);
mediaPlayer.prepare(); // or mediaPlayer.prepareAsync();
mediaPlayer.start();
} catch (IOException e) {
e.printStackTrace();
}
如果您具有有效的Internet UrlString,则:
MediaPlayer mediaPlayer = new MediaPlayer();
String urlString = "http://...";// like this
try {
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(urlString);
mediaPlayer.prepare(); // or mediaPlayer.prepareAsync();
mediaPlayer.start();
} catch (IOException e) {
e.printStackTrace();
}
您将不需要陷入Input / Output流和所有流。
然后,尝试以下代码:
byte[] byteArray = // your byteArray
try {
File file = File.createTempFile("prefix","suffix");//creates temporary file
FileOutputStream fos = new FileOutputStream(file);
fos.write(byteArray);//your bytes written in that temporary file
} catch (IOException e) {
e.printStackTrace();
}
在这里,您可以初始化mediaPlayer并使用此临时文件。
关于android - 在Android中使用字符串/字节播放音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45385244/