Картинки и текст — это основа, но иногда приложению нужно показать короткий ролик: инструкцию, трейлер или видео-приветствие. В Android для этого есть простой компонент — VideoView, который прячет внутри себя сложную работу с медиаплеером. Сегодня на занятии в Android Studio мы разберём, как добавить воспроизведение видео из ресурсов и из интернета. Писать будем на языке Kotlin, а весь урок построен так, чтобы даже новичок смог запустить свой первый ролик за несколько минут.
Что такое VideoView и когда его использовать
VideoView — это готовая обёртка над MediaPlayer и SurfaceView, которая умеет показывать видео по заданному пути. Она подходит для простых сценариев: проиграть видео из папки res/raw, с SD-карты или по URL. Для продвинутых плееров с плейлистами и кастомизацией интерфейса лучше использовать ExoPlayer, но для начала VideoView — идеальный инструмент, не требующий дополнительных библиотек.
Добавляем VideoView в разметку
Создайте новый проект или откройте существующий. В файле activity_main.xml разместите VideoView и кнопки управления: Play, Pause, Stop. Корневым контейнером может быть LinearLayout.
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<VideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="300dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center">
<Button
android:id="@+id/btnPlay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Play" />
<Button
android:id="@+id/btnPause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Pause" />
<Button
android:id="@+id/btnStop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Stop" />
</LinearLayout>
</LinearLayout>
Готовим видеофайл
Чтобы проиграть локальное видео, положите его в папку res/raw. Если такой папки ещё нет, создайте её: щёлкните правой кнопкой по res, выберите New → Android Resource Directory, в поле Resource type укажите raw. Скопируйте туда файл, например sample_video.mp4. Система будет обращаться к нему через идентификатор R.raw.sample_video.
Для видео из интернета понадобится разрешение в манифесте. Добавьте его, если планируете загружать ролики с удалённого сервера:
<uses-permission android:name="android.permission.INTERNET" />
Пишем код в Activity
В MainActivity.kt получим ссылки на VideoView и кнопки. Для локального видео используем URI, построенный из идентификатора ресурса. Для видео из интернета — Uri.parse(url). Кнопки будут вызывать методы start(), pause() и stopPlayback().
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val videoView = findViewById<VideoView>(R.id.videoView)
val btnPlay = findViewById<Button>(R.id.btnPlay)
val btnPause = findViewById<Button>(R.id.btnPause)
val btnStop = findViewById<Button>(R.id.btnStop)
val videoUri = Uri.parse("android.resource://$packageName/${R.raw.sample_video}")
videoView.setVideoURI(videoUri)
btnPlay.setOnClickListener { videoView.start() }
btnPause.setOnClickListener { videoView.pause() }
btnStop.setOnClickListener {
videoView.stopPlayback()
videoView.setVideoURI(videoUri) // подготовить заново
}
}
}
Метод stopPlayback() полностью сбрасывает плеер. Чтобы можно было запустить видео снова, мы заново устанавливаем URI. Без этого вызов start() не сработает.
Воспроизведение из интернета
Чтобы загрузить видео по URL, достаточно заменить URI. Добавьте разрешение на интернет в манифесте и измените строчку с setVideoURI:
val videoUrl = "https://www.example.com/video.mp4"
videoView.setVideoURI(Uri.parse(videoUrl))
Для потокового видео может потребоваться больше времени на буферизацию. В этом случае можно показать ProgressBar, который скроется, когда видео начнёт проигрываться. Для этого у VideoView есть метод setOnPreparedListener:
videoView.setOnPreparedListener { mediaPlayer ->
mediaPlayer.start()
progressBar.visibility = View.GONE
}
videoView.setOnErrorListener { mp, what, extra ->
Toast.makeText(this, "Ошибка загрузки видео", Toast.LENGTH_SHORT).show()
true
}
Добавляем MediaController
Чтобы пользователь мог перематывать видео и видеть прогресс, можно прикрепить стандартный MediaController. Он появляется при касании экрана и автоматически прячется через несколько секунд.
val mediaController = MediaController(this)
mediaController.setAnchorView(videoView)
videoView.setMediaController(mediaController)
Теперь при запуске видео будут видны кнопки перемотки, паузы и ползунок. Это значительно улучшает восприятие по сравнению с голым экраном.
Полезные советы
- Не кладите большие видео в res/raw. Файлы в этой папке увеличивают APK. Для крупных роликов используйте загрузку с сервера или храните их на SD-карте.
- Проверяйте формат. VideoView поддерживает MP4, 3GP, MKV. Если файл не воспроизводится, проверьте кодек — возможно, он не поддерживается стандартным Android-плеером.
- Освобождайте ресурсы. В методе
onPause()илиonStop()вызывайтеvideoView.stopPlayback(), чтобы плеер не продолжал работать в фоне.
Что мы освоили
Сегодняшний урок в Android Studio на языке Kotlin научил вас встраивать видео в приложение с помощью VideoView. Вы настроили плеер для локального файла и для URL, добавили кнопки управления и MediaController. Теперь вы можете показывать обучающие ролики, трейлеры или видео-визитки прямо внутри программы. Попробуйте заменить пример на своё видео — это займёт пару минут, а результат будет наглядным.