我有一个关于 MediaPlayer 与表面视图相结合的错误:
我正在通过从 Internet 流式传输的方式在表面视图中播放视频,如下所示:
mPreview = (SurfaceView) findViewById(R.id.surface);
videoFL = (FrameLayout) findViewById(R.id.videoFL);
SurfaceHolder holder = mPreview.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
后来我尝试将我的第一个 MediaPlayer 附加到它:
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(videos.get(position));
mediaPlayer.prepareAsync();
mediaPlayer.setOnBufferingUpdateListener(this);
mediaPlayer.setOnCompletionListener(this);
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setOnVideoSizeChangedListener(this);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDisplay(holder);
在流式传输第一个视频时,我已经在缓冲第二个视频以节省我的用户时间。要将第二个已经准备好的 MediaPlayer 实例附加到我的 SurfaceView,我执行以下操作以释放旧的实例:
mediaPlayer.release();
mediaPlayer = null;
....
mediaPlayer2.setDisplay(holder);
在 ICS 和 Jelly Bean 上,此解决方案运行良好,但在 Gingerbread 上却无法按计划运行。视频正在播放但未显示(黑屏,仅在视频中某处显示图片),我通过以下方式识别:
mediaPlayer2.getCurrentPosition();
我总是在我的 SeekBar 上获得正确的位置。我在 HTC Wildfire S 上试过。
有没有人猜到为什么这个错误会发生在姜饼上?
带着敬意,
策曼