【发布时间】:2012-01-18 21:04:36
【问题描述】:
我在使用 androids MediaPlayer 流式传输 wav 音频文件时遇到问题。
wave 文件的 URL 已成功验证并在设备上单独下载。 那些下载的文件播放没有问题,但是当相同的文件流式传输到播放器时,它根本不会播放并出现错误。
01-18 09:25:00.963: E/MediaPlayer(8825): error (1, -4)
01-18 09:25:00.963: W/System.err(8825): java.io.IOException: Prepare failed.: status=0x1
01-18 09:25:00.963: W/System.err(8825): at android.media.MediaPlayer.prepare(Native Method)
01-18 09:25:00.963: W/System.err(8825): at com.movivation.wavetrial.AudioPlayer.playMedia(AudioPlayer.java:174)
01-18 09:25:00.963: W/System.err(8825): at com.movivation.wavetrial.AudioPlayer.onCreate(AudioPlayer.java:92)
01-18 09:25:00.963: W/System.err(8825): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-18 09:25:00.963: W/System.err(8825): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2633)
01-18 09:25:00.963: W/System.err(8825): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2685)
01-18 09:25:00.963: W/System.err(8825): at android.app.ActivityThread.access$2300(ActivityThread.java:126)
01-18 09:25:00.963: W/System.err(8825): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2038)
01-18 09:25:00.963: W/System.err(8825): at android.os.Handler.dispatchMessage(Handler.java:99)
01-18 09:25:00.963: W/System.err(8825): at android.os.Looper.loop(Looper.java:123)
01-18 09:25:00.963: W/System.err(8825): at android.app.ActivityThread.main(ActivityThread.java:4633)
01-18 09:25:00.963: W/System.err(8825): at java.lang.reflect.Method.invokeNative(Native Method)
01-18 09:25:00.973: W/System.err(8825): at java.lang.reflect.Method.invoke(Method.java:521)
01-18 09:25:00.973: W/System.err(8825): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
01-18 09:25:00.973: W/System.err(8825): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
01-18 09:25:00.973: W/System.err(8825): at dalvik.system.NativeStart.main(Native Method)
01-18 09:25:00.973: I/MediaPlayer(8825): Info (1,26)
我播放文件的代码:
private void playMedia(boolean isWebUrl) {
mPlayer = new MediaPlayer();
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
Log.d(tag, "Ending thread");
isPlaying = false;
if (pd != null) {
pd.dismiss();
}
}
});
mPlayer.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
Log.d(tag, "starting");
mPlayer.start();
mSeekbar.setProgress(0);
mSeekbar.setMax(mPlayer.getDuration());
Log.d(tag, "seek started");
new PlayAsync().execute();
}
});
mSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
if (fromUser) {
mPlayer.seekTo(progress);
mSeekbar.setProgress(progress);
}
}
});
try {
if (isWebUrl) {
Log.d(tag, "playing tmp file");
mPlayer.setDataSource(url);
} else {
File f = new File(fileurl);
FileInputStream fis = new FileInputStream(f);
mPlayer.setDataSource(fis.getFD());
}
Log.d(tag, "calling prepare");
mPlayer.prepare(); //originally i use prepareAsync()
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
我尝试播放的文件实际上是一个波形文件,我没有找到任何关于上述错误的具体说明。
任何关于波流或错误本身的指针都将受到高度赞赏。 谢谢。
【问题讨论】:
-
使用示例 sn-p 编辑的问题。虽然我已经使用 prepare() 方法来临时捕获异常,但实际上我使用的是 prepareasync() 方法。
-
您能在您的代码中突出显示这一点吗? “在 com.movivation.wavetrial.AudioPlayer.playMedia(AudioPlayer.java:174)”
-
它指向
mPlayer.prepare();