android mediaplayer在旋转surfaceview时不播放视频,只播放音频 编辑:我的问题还没有解决!
朋友们好。 我写了一个视频播放器,可以播放我录制的视频。但在显示时存在旋转90度的问题。我使用了mediaRecorder.setOrientationHint(int degree),但我想我的视频播放器在palyback过程中忽略了视频中的合成矩阵(根据android mediaplayer在旋转surfaceview时不播放视频,只播放音频 编辑:我的问题还没有解决!,android,video,rotation,surfaceview,Android,Video,Rotation,Surfaceview,朋友们好。 我写了一个视频播放器,可以播放我录制的视频。但在显示时存在旋转90度的问题。我使用了mediaRecorder.setOrientationHint(int degree),但我想我的视频播放器在palyback过程中忽略了视频中的合成矩阵(根据setOrientationHint文档),因为这种方法对旋转没有任何影响。最后,我决定直接在视频播放器中通过旋转画布矩阵编辑surfaceView。但是这种方式有一个问题,它不能在surface view中显示我的视频。只有我能听到声音而没
setOrientationHint
文档),因为这种方法对旋转没有任何影响。最后,我决定直接在视频播放器中通过旋转画布矩阵编辑surfaceView
。但是这种方式有一个问题,它不能在surface view中显示我的视频。只有我能听到声音而没有任何表现!我如何解决这个问题?
如果有其他方法可以在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);
}
.
.
.
}
您必须重新创建媒体播放器(
mPlayer
)
只需重新使用支架当媒体播放器的显示仍设置为SurfaceHolder的上一个实例时,通常会发生这种情况。视频正在播放,但帧被发送到不再显示在屏幕上的表面。