Платформа Android предоставляет библиотеки, которые можно использовать для потоковой передачи мультимедийных файлов, таких как удаленные видео, для их воспроизведения в ваших приложениях. В этом руководстве мы будем транслировать видеофайл, отображая его с VideoView
компонента VideoView
вместе с объектом MediaController
чтобы позволить пользователю управлять воспроизведением.
Мы также кратко рассмотрим процесс представления видео с использованием класса MediaPlayer
. Если вы завершили серию по созданию музыкального плеера для Android , вы можете использовать то, что вы узнали из этого урока, для его дальнейшего совершенствования. Вы сможете пройти этот урок, если уже разработали хотя бы несколько приложений для Android.
Премиум вариант
Если вы хотите получить готовое решение, воспользуйтесь YoVideo , шаблоном приложения для Android для создания прекрасного мобильного видеоплеера для смартфона Android.
Пользователи могут просматривать видео, следить и делиться с друзьями на Facebook. Использование этого шаблона приложения позволит вам сэкономить деньги и время при создании приложения для обмена видео.
Или вы можете нанять разработчика Android для создания индивидуального решения для вас. В противном случае, читайте инструкции о том, как сделать это самостоятельно.
1. Создайте новое приложение
Шаг 1
Вы можете использовать код в этом руководстве для улучшения существующего приложения, над которым вы работаете, или вы можете создать новое приложение прямо сейчас в Eclipse или Android Studio. Создайте новый проект Android, назовите его по вашему выбору, настройте детали и присвойте ему начальный основной класс Activity
и макет.
Шаг 2
Давайте сначала настроим манифест проекта для потокового мультимедиа. Откройте файл манифеста вашего проекта и переключитесь на редактирование XML в вашей IDE. Для потоковой передачи мультимедиа вам необходим доступ в Интернет, поэтому добавьте следующее разрешение в элемент manifest
:
1
|
<uses-permission android:name=»android.permission.INTERNET» />
|
2. Добавить VideoView
Шаг 1
Платформа Android предоставляет класс VideoView
в котором вы можете воспроизводить видеофайлы. Давайте добавим один в основной файл макета:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
<RelativeLayout xmlns:android=»http://schemas.android.com/apk/res/android»
xmlns:tools=»http://schemas.android.com/tools»
android:layout_width=»match_parent»
android:layout_height=»match_parent»
android:paddingBottom=»@dimen/activity_vertical_margin»
android:paddingLeft=»@dimen/activity_horizontal_margin»
android:paddingRight=»@dimen/activity_horizontal_margin»
android:paddingTop=»@dimen/activity_vertical_margin»
android:background=»#000000″
tools:context=».MainActivity» >
<VideoView
android:id=»@+id/myVideo»
android:layout_width=»fill_parent»
android:layout_height=»fill_parent»
android:layout_centerInParent=»true» />
</RelativeLayout>
|
При необходимости измените родительский макет в соответствии с вашим собственным приложением. Мы даем экземпляру VideoView
атрибут id
чтобы мы могли обратиться к нему позже. Возможно, вам придется настроить другие свойства макета для вашего собственного дизайна.
Шаг 2
Теперь давайте VideoView
ссылку на экземпляр VideoView
в коде. Откройте основной класс Activity
вашего приложения и добавьте следующие дополнительные импорты:
1
2
3
|
import android.net.Uri;
import android.widget.MediaController;
import android.widget.VideoView;
|
Ваш класс Activity
уже должен содержать метод onCreate
в котором установлено представление содержимого:
1
2
3
4
5
|
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
|
После строки setContentView
давайте получим ссылку на экземпляр VideoView
следующим образом, используя id
мы установили в макете XML:
1
|
VideoView vidView = (VideoView)findViewById(R.id.myVideo);
|
3. Потоковое видео файла
Шаг 1
Теперь мы можем передавать потоковое видео в приложение. Подготовьте URI для конечной точки следующим образом:
1
2
|
String vidAddress = «https://archive.org/download/ksnn_compilation_master_the_internet/ksnn_compilation_master_the_internet_512kb.mp4»;
Uri vidUri = Uri.parse(vidAddress);
|
Вам, конечно, нужно будет использовать удаленный адрес для видеофайла, который вы хотите транслировать. Примером здесь является видеофайл общественного достояния, размещенный в интернет-архиве . Мы анализируем строку адреса как URI, чтобы мы могли передать ее объекту VideoView
:
1
|
vidView.setVideoURI(vidUri);
|
Теперь вы можете просто начать воспроизведение:
1
|
vidView.start();
|
Операционная система Android поддерживает различные форматы видео и мультимедиа, причем каждое устройство часто поддерживает дополнительные форматы.
Как видно из Руководства разработчика , поддерживаемые форматы видеофайлов включают 3GP, MP4, WEBM и MKV, в зависимости от используемого формата и уровня платформы, установленного пользователем.
Форматы аудио файлов, для которых вы можете ожидать встроенную поддержку, включают MP3, MID, OGG и WAV. Вы можете передавать потоковое мультимедиа на Android через RTSP, HTTP и HTTPS (с Android 3.1).
4. Добавить элементы управления воспроизведением
Шаг 1
Мы реализовали воспроизведение видео, но пользователь будет ожидать и привыкнет контролировать его. Опять же, платформа Android предоставляет ресурсы для обработки этого, используя знакомое взаимодействие через класс MediaController
.
В методе onCreate
вашего класса onCreate
перед строкой, в которой вы вызываете start
на VideoView
, создайте экземпляр класса:
1
|
MediaController vidControl = new MediaController(this);
|
Затем установите его для использования экземпляра VideoView
качестве своего якоря:
1
|
vidControl.setAnchorView(vidView);
|
И наконец, установите его в качестве медиа-контроллера для объекта VideoView
:
1
|
vidView.setMediaController(vidControl);
|
Теперь, когда вы запустите приложение, пользователь должен иметь возможность управлять воспроизведением потокового видео, включая кнопки быстрой перемотки вперед и назад, кнопку воспроизведения / паузы и панель управления поиском.
Элемент управления панели поиска сопровождается длиной медиафайла справа и текущей позицией воспроизведения слева. Помимо возможности перемещаться вдоль панели поиска для перехода к позиции в файле, статус потоковой передачи отображается с использованием того же типа отображения, к которому пользователь привык из сайтов и приложений, таких как YouTube.
Как вы увидите, когда вы запустите приложение, поведение по умолчанию — элементы управления исчезают через несколько секунд и снова появляются, когда пользователь касается экрана. Вы можете настроить поведение объекта MediaController
различными способами. Посмотрите серию о создании музыкального проигрывателя для Android, чтобы узнать, как это сделать. Вы также можете улучшить воспроизведение мультимедиа, внедрив различных слушателей для настройки поведения вашего приложения.
5. Использование MediaPlayer
Шаг 1
Прежде чем мы закончим, давайте рассмотрим альтернативный подход к потоковой передаче видео с использованием класса MediaPlayer
, поскольку мы использовали его в серии при создании музыкального проигрывателя . Вы можете передавать потоковое мультимедиа, включая видео, на объект MediaPlayer
используя вид поверхности. Например, вы можете использовать следующий макет:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
<RelativeLayout xmlns:android=»http://schemas.android.com/apk/res/android»
xmlns:tools=»http://schemas.android.com/tools»
android:layout_width=»match_parent»
android:layout_height=»match_parent»
android:background=»#000000″
android:paddingBottom=»@dimen/activity_vertical_margin»
android:paddingLeft=»@dimen/activity_horizontal_margin»
android:paddingRight=»@dimen/activity_horizontal_margin»
android:paddingTop=»@dimen/activity_vertical_margin»
tools:context=».MainActivity» >
<SurfaceView
android:id=»@+id/surfView»
android:layout_width=»fill_parent»
android:layout_height=»fill_parent» />
</RelativeLayout>
|
Мы будем ссылаться на SurfaceView
в реализации класса Activity
.
Шаг 2
В своем классе Activity
добавьте следующие интерфейсы:
1
|
public class MainActivity extends Activity implements SurfaceHolder.Callback, OnPreparedListener
|
Ваша IDE должна предложить вам добавить следующие не реализованные методы:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder arg0) {
//setup
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPrepared(MediaPlayer mp) {
//start playback
}
|
Мы добавим на поверхность surfaceCreated
и onPrepared
методы.
Шаг 3
Чтобы реализовать воспроизведение, добавьте следующие переменные экземпляра в класс:
1
2
3
4
|
private MediaPlayer mediaPlayer;
private SurfaceHolder vidHolder;
private SurfaceView vidSurface;
String vidAddress = «https://archive.org/download/ksnn_compilation_master_the_internet/ksnn_compilation_master_the_internet_512kb.mp4»;
|
В методе Activity
onCreate
вы можете начать создавать экземпляры этих переменных, используя объект SurfaceView
вы добавили в макет:
1
2
3
|
vidSurface = (SurfaceView) findViewById(R.id.surfView);
vidHolder = vidSurface.getHolder();
vidHolder.addCallback(this);
|
Шаг 4
В методе surfaceCreated
настройте ресурсы воспроизведения мультимедиа:
01
02
03
04
05
06
07
08
09
10
11
|
try {
mediaPlayer = new MediaPlayer();
mediaPlayer.setDisplay(vidHolder);
mediaPlayer.setDataSource(vidAddress);
mediaPlayer.prepare();
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
}
catch(Exception e){
e.printStackTrace();
}
|
Наконец, в методе onPrepared
запустите воспроизведение:
1
|
mediaPlayer.start();
|
Ваше видео должно теперь воспроизводиться в экземпляре MediaPlayer
при запуске приложения.
Вывод
В этом уроке мы изложили основы потокового видео на Android с использованием классов VideoView
и MediaPlayer
. Вы можете добавить множество улучшений к коду, который мы реализовали здесь, например, встроив поддержку видео или потокового мультимедиа в созданное нами приложение музыкального проигрывателя. Вы также можете проверить связанные ресурсы для Android, такие как YouTube Player Player API .