1

我的问题是有太多的 MediaPlayers 会导致 IOException preparefailed: status= 0x1 记录吗?

我的程序运行的方式是我为每个要播放的视频使用一个单独的媒体播放器实例。在运行结束时,我停止 videoPlayer,释放它,然后将其设置为 null;有时这没关系,但有时当我在视频之间移动太快时,我得到一个 IO 异常并且视频无法播放。我还有一个 mediaPlayer 在服务中播放一些背景音乐。

基本上,每次文件结束播放时,我的视频活动都会收到一个新呼叫。这可能是错误吗?我应该尝试用不同的文件重用同一个媒体播放器吗?

提前致谢

4

1 回答 1

1

我找到了自己的答案。我不知道这是否是一个好方法,但是:

if(videoFile != null)
        {
            Log.i("INITPLAYER", videoFile);
            afd = getAssets().openFd(videoFile);

            instructionVideoPlayer = new MediaPlayer();

            instructionVideoPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength());

            instructionVideoPlayer.setDisplay(holder);

            instructionVideoPlayer.prepare();

            instructionVideoPlayer.setOnCompletionListener(instructionVideoComplete);
            instructionVideoPlayer.setOnPreparedListener(this);
        }
        else
            Log.i("VideoPlayer", "noVideoFile");

    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        Log.i(this.toString(), "IOEXception");
        e.printStackTrace();

//Here is the fix:
        instructionVideoPlayer.release();
        instructionVideoPlayer = null;
        initPlayer();
// reinit after prepare failed. although this can bring in an infinte loop if video file does not exits
    } catch (Exception e)
    {
        Log.i("InitPlayer", e.getClass().toString());
        e.printStackTrace();
    }
于 2012-06-07T13:40:39.913 回答