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);