我遇到了onPrepared()
之后没有调用MediaPlayer.prepareAsync()
- 方法的问题。奇怪的是,它确实在第一次工作,只有在重新实现MediaPlayer后才失败。这是我的“精简”代码:
public void loadVideoStream(String videoUrl, MediaPlayer.OnPreparedListener opl, Context ctx) {
try {
this.stop(); //player.stop,reset,release,=null
player = new MediaPlayer();
player.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
Log.d(TAG, "onError: "+what + " " + extra);
return false;
}
});
player.setOnPreparedListener(opl);
player.setDataSource(ctx, Uri.parse(videoUrl));
if (this.surface != null) {
player.setSurface(this.surface);
player.prepareAsync();
this.surface = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
一切似乎进展顺利,MediaPlayer不会抛出任何错误/警告,但不会调用onPrepared-Statement(视频应该启动并且某些UI工作要完成)。我还确定,在调用prepareAsync()
之前已经创建了曲面,但没有成功。文件格式也应该没问题,因为如果我第一次使用它,它可以正常工作。
任何提示/想法都赞赏!