Главная » Разработка для Android » Подготовка поверхности для воспроизведения видеоданных

0

Первым  делом при использовании Медиапроигрывателя с целью показа видео необходимо подготовить поверхность, на которой это видео будет отображаться. Для этого Медиапроигрывателю с помощью метода setDisplay нужно передать объект класса SurfaceHolder.

ПРИМЕЧАНИЕ

Если вы не передадите SurfaceHolder для объекта MediaPlayer, компо- нент с видео не будет отображен.

Чтобы добавить объект SurfaceHolder в разметку вашего пользователь- ского интерфейса, используйте элемент  SurfaceView,  как показано  в ли- стинге 11.4.

Листинг 11.4. Разметка с элементом SurfaceView

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"

android:layout_width="fill_parent" android:layout_height="fill_parent">

<SurfaceView android:id="@+id/surface" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center">

</SurfaceView>

</LinearLayout>

SurfaceView  — обертка вокруг класса SurfaceHolder, который  в свою очередь служит  оберткой  класса Surface, используемого для обновления изображения из фоновых потоков.

Более детально элемент SurfaceView рассмотрен в главе 15, а в листин- ге 11.5 показан каркас для инициализации SurfaceView внутри Активности, которая передается в объект MediaPlayer.

Обратите  внимание,  что при этом вы должны  реализовать интерфейс SurfaceHolder.Callback. Объект SurfaceHolder создается в асинхронном ре- жиме, поэтому прежде чем передавать его в MediaPlayer, нужно дождаться, когда сработает обработчик surfaceCreated.

Листинг 11.5. Инициализация и передача объекта SurfaceView в Медиапроигрыватель

public class MyActivity extends Activity implements SurfaceHolder. Callback

{

private MediaPlayer mediaPlayer;

@Override

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);

mediaPlayer = new MediaPlayer();

SurfaceView surface = (SurfaceView)findViewById(R.id.surface); SurfaceHolder holder = surface.getHolder(); holder.addCallback(this); holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); holder.setFixedSize(400, 300);

}

public void surfaceCreated(SurfaceHolder holder) {

try {

mediaPlayer.setDisplay(holder);

} catch (IllegalArgumentException e) { Log.d("MEDIA_PLAYER", e.getMessage());

} catch (IllegalStateException e) { Log.d("MEDIA_PLAYER", e.getMessage());

} catch (IOException e) {

Log.d("MEDIA_PLAYER", e.getMessage());

}

}

public void surfaceDestroyed(SurfaceHolder holder) {

mediaPlayer.release();

}

public void surfaceChanged(SurfaceHolder holder,

int format, int width, int height) { }

}

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

  • Комментарии