当然,这里SurfaceView和MediaPlayer使用都正确。
在实际使用中,进入界面时,有时有画面,有时没画面。查了一下代码,一直没有start(),相当于没有准备好。那么我直接start()行不行?还是没画面。
于是加个延时,检查控制器是否已经开始播放。如果已经开始播放返回;没有的话释放之,再重新开始播放动作。问题解决。
代码如下:
private void startPlay()
if (mRtsp == null || !isSurfaceReady)
{
    return;
}//如果已播放直接返回。if (mPlayer != null && mPlayer.isPlaying())
{
    return;
}
if (null != mPlayer)
{
    mPlayer.stop();
    mPlayer.release();
    mPlayer = null;
}
try
{
    mPlayer = new MediaPlayer();
    mPlayer.setDataSource(NVideoContext.getContext(), Uri.parse(mRtsp));
    mPlayer.setSurface(mSurfaceView.getHolder().getSurface());
    mPlayer.prepareAsync();
    mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener()
    {
        @Override
        public void onPrepared(MediaPlayer mp)
        {
            mPlayer.start();
        }
    }); //消息处理直接调用startPlay。前面有播放返回代码。mHandler.sendEmptyMessageDelayed(MESSAGE_PLAY_CHECK, 5000);}
catch (Exception e)
{
    e.printStackTrace();
}

 
                 
    