Android MediaPlayer - I/O 错误 - 找不到文件
Android MediaPlayer - I/O error - File not found
我在项目中创建了一个 res/raw 文件夹,我在其中放置了一个文件 t.mp4。我打算通过实现相关接口,使用 SurfaceTextureAvailable 侦听器使用 textureview 播放视频文件。
我在 onSurfaceTextureAvailable 方法中创建了一个媒体播放器对象
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
Surface s = new Surface(surface);
Log.d("debug", "Surface Texture Available");
mMediaPlayer = new MediaPlayer();
try {
mMediaPlayer.setDataSource(this, Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.t));
Log.d("debug", "data source set");
mMediaPlayer.setSurface(s);
Log.d("debug", "Surface set");
mMediaPlayer.prepare();
Log.d("debug", "prepared");
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnVideoSizeChangedListener(this);
Log.d("debug", "listeners set");
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
} catch (IOException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("error", e.getMessage());
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("error", e.getMessage());
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("error", e.getMessage());
}
}
在我运行该应用程序的前几次它运行良好,但在处理我项目的另一个(不相关的)部分后,它突然停止运行。
在日志中,我不断收到 IOException,我 90% 确定这是因为应用程序找不到文件。
发生了什么事?
干杯
您可以使用 MediaPlayer.create() 代替 new MediaPlayer()
/setDataSource()
来轻松地为原始资源创建 MediaPlayer:
mMediaPlayer = MediaPlayer.create(this, R.raw.t);
我在项目中创建了一个 res/raw 文件夹,我在其中放置了一个文件 t.mp4。我打算通过实现相关接口,使用 SurfaceTextureAvailable 侦听器使用 textureview 播放视频文件。
我在 onSurfaceTextureAvailable 方法中创建了一个媒体播放器对象
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
Surface s = new Surface(surface);
Log.d("debug", "Surface Texture Available");
mMediaPlayer = new MediaPlayer();
try {
mMediaPlayer.setDataSource(this, Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.t));
Log.d("debug", "data source set");
mMediaPlayer.setSurface(s);
Log.d("debug", "Surface set");
mMediaPlayer.prepare();
Log.d("debug", "prepared");
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnVideoSizeChangedListener(this);
Log.d("debug", "listeners set");
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
} catch (IOException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("error", e.getMessage());
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("error", e.getMessage());
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("error", e.getMessage());
}
}
在我运行该应用程序的前几次它运行良好,但在处理我项目的另一个(不相关的)部分后,它突然停止运行。
在日志中,我不断收到 IOException,我 90% 确定这是因为应用程序找不到文件。
发生了什么事?
干杯
您可以使用 MediaPlayer.create() 代替 new MediaPlayer()
/setDataSource()
来轻松地为原始资源创建 MediaPlayer:
mMediaPlayer = MediaPlayer.create(this, R.raw.t);