android mediaplayer不播放视频,只播放surfaceview时的音频

时间:2014-01-18 07:58:40

标签: android video rotation surfaceview

编辑:我的问题尚未解决!

Hello stackoverflow朋友。 我写了一个可播放录制视频的视频播放器。但是在展示时有旋转90度的问题。我使用的是mediaRecorder.setOrientationHint(int degree),但我想我的视频播放器在palyback期间忽略了视频中的合成矩阵(根据setOrientationHint文档),因为这种方法对旋转没有任何影响。最后,我通过旋转画布矩阵直接在我的视频播放器中编辑surfaceView。但这种方式有这个问题,不能在表面视图中显示我的视频。只有我能听到没有任何表现的声音!我该如何解决这个问题? 如果在surfaceView中有其他方式可以旋转我的视频,我想知道这些方法。我经常搜索旋转,但我无法取得任何成功。

这是我的代码中最重要的部分。

public class VideoPlayerActivity extends Activity  implements 
SurfaceHolder.Callback 
{

      private SurfaceView mPreview;
        private SurfaceHolder holder;
         private MediaPlayer mPlayer;

        //-------------------------------------------    

        @Override
        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.video_player);
                        InitializeUI();
        }



         //------------------------------------------
         private void InitializeUI()
         {
                mPreview = (SurfaceView) findViewById(R.id.surface_view);
                holder = mPreview.getHolder();
                       holder.addCallback(this);
                       holder.setType(SurfaceHolder.SURFACE_TYPE_NORMAL);
    }
         //------------------------------------------

private void playVideo(Integer Media) 
        {

            try {

     Canvas canvas=holder.lockCanvas();
    Matrix mat=canvas.getMatrix();
    mat.postRotate(90);
     canvas.setMatrix(mat);
                 holder.unlockCanvasAndPost(canvas);

                mPlayer.reset();    
    mPlayer.setDataSource(ArrayManager.array_for_playing.get(SDcard.icurrentIndex).getPath());


                 mPlayer.setDisplay(holder);

                mPlayer.prepare();
                mPlayer.start();


            } 
            catch (Exception e) 
            {
                Log.e("video player", "error: " + e.getMessage(), e);
            }
        }
  //------------------------------------------
        @Override
        public void surfaceCreated(SurfaceHolder holder) 
        {

           if(ArrayManager.array_for_playing != null)
            if(SDcard.icurrentIndex != -1)
              playVideo(SDcard.icurrentIndex);
        }
    .
    .
    .
}

1 个答案:

答案 0 :(得分:-1)

您必须重新创建媒体播放器(mPlayer)。

只需重复使用您的持有人