Я в тупике.
Я пытаюсь воспроизвести видео с помощью Media Player, но пока воспроизводится звук, все, что я вижу, - это черное окно.
Я видел другие сообщения об этой проблеме, но мне не приходилось искать решения. Я попытался последовать их предложениям.
Медиаплеер подготавливается перед воспроизведением. Держатель поверхности был создан и настроен на отображение медиаплеера перед воспроизведением.
Проверено на Samsung Galaxy Tab и Samsung Galaxy S.
Я компилирую с использованием API уровня 7.
Само видео можно воспроизводить в видеоприложении устройства с SD-карты, поэтому оно должно быть совместимым.
Вид поверхности отличается по размеру от видео. Так что это может быть проблемой. Мне нужно что-то с этим делать, или растяжка выполняется автоматически?
Вот что у меня есть при инициализации:
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(width, height);
lp.leftMargin = x;
lp.topMargin = y;
mSurfaceView = new SurfaceView(mActivity);
mSurfaceView.requestFocus();
mSurfaceView.setZOrderOnTop(true);
mSurfaceView.getHolder().addCallback(player);
mSurfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mLayout.addView(mSurfaceView, lp);
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(assetDescriptor.getFileDescriptor(), assetDescriptor.getStartOffset(), assetDescriptor.getLength());
mMediaPlayer.setOnErrorListener(player);
mMediaPlayer.setOnPreparedListener(player);
mMediaPlayer.prepare();
и вот мои обратные вызовы:
public void onPrepared(MediaPlayer mp)
{
mMediaPlayer.start();
}
public void surfaceCreated (SurfaceHolder holder)
{
mMediaPlayer.setDisplay(holder);
}
Что расстраивает, так это то, что некоторая версия кода работала должным образом некоторое время назад, но теперь это не так.