【问题标题】:Android MediaPlayer - I/O error - File not foundAndroid MediaPlayer - I/O 错误 - 找不到文件
【发布时间】:2015-01-09 08:42:07
【问题描述】:

我在项目中创建了一个 res/raw 文件夹,其中放置了一个文件 t.mp4。我打算通过实现相关接口使用纹理视图通过 SurfaceTextureAvailable 侦听器播放视频文件。

我在 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% 确定这是因为应用程序找不到文件。

发生了什么?

干杯

【问题讨论】:

  • logcat 对异常有什么看法?
  • 01-09 11:23:16.240 20537-20554/com.edifyelectronics.tv.app E/MediaPlayer: 错误 (1, -2147483648) 01-09 11:23:16.243 20537-20537/ com.edifyelectronics.tv.app W/System.err: java.io.IOException: Prepare failed.: status=0x1
  • 我尝试使用 FileInputStream 对象更改 setDataSource。然后我得到一个 FileNotFound 错误

标签: android io android-mediaplayer


【解决方案1】:

您可以使用MediaPlayer.create() 代替new MediaPlayer()/setDataSource() 轻松为原始资源创建MediaPlayer:

mMediaPlayer = MediaPlayer.create(this, R.raw.t);

【讨论】:

  • 我尝试删除 mMediaPlayer = new MediaPlayer();然后在 try catch 块中,将 setDataSource 替换为 mMediaPlayer = MediaPlayer.create(this, R.raw.t);尝试运行,应用程序因 java.lang.NullPointerException 而崩溃:尝试在空对象引用上调用虚拟方法 'void android.media.MediaPlayer.prepare()'
  • 我也尝试过简单的 mMediaPlayer = mediaPLayer.create(this, R.raw.t); mMediaPLayer.start();我得到一个 IOException - create failed: java.io.IOException: Prepare failed.: status=0x1 at android.media.MediaPlayer._prepare(Native Method) at android.media.MediaPlayer.prepare(MediaPlayer.java:1125) at android.media.MediaPlayer.create(MediaPlayer.java:931) 在 android.media.MediaPlayer.create(MediaPlayer.java:902)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
  • 2018-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多