在Android中使用
问题描述:
一个字符串/字节播放音频
我一直在试图通过Android的使用MediaPlayer的字符串/字节播放音频,但能达到我使用的result.The代码在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[]这接受的答案适用于me.But有播放音频,而无需创建一个临时文件的任何其他方式?
答
要调用mediaPlayer.setDataSource(URL)方法。这里的网址(字符串)必须是一个有效的互联网网址。您正在尝试以String的形式传递数据。
其次,你有没有叫调用prepare()方法之前
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
方法。此方法是必须调用的方法,以使目标流类型生效。
你可以做一个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();
}
如果你有一个有效的互联网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();
}
您不需要在输入/输出流和所有的坑害。
然后,沿着这条代码尝试:
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,并使用这个临时文件。
好,我有一个变量(二者串字节[]),其值是audio.I的编码数据需要使用这个变量来播放音频。 – Jops