УДК 004.514 С.В. Новиков, В.А. Козлов, А.А. Стычук

advertisement
УДК 004.514
С.В. Новиков, В.А. Козлов, А.А. Стычук
S.V. NOVIKOV, V.A. KOZLOV, A.A. STYCHUK
РАЗРАБОТКА ПРОГРАММНОГО СРЕДСТВА ВОСПРОИЗВЕДЕНИЯ
ПОТОКОВОГО ВИДЕО С ПЕРСОНАЛЬНОГО КОМПЬЮТЕРА НА
УСТРОЙСТВАХ ПОД УПРАВЛЕНИЕМ ОС ANDROID
SOFTWARE DEVELOPMENT TOOLS STREAMING VIDEO FROM A PC TO
DEVICES RUNNING ANDROID
В данной статье рассматриваются принципы организации потокового видео. Предложена
модифицированная технология HTTP Live Streaming (HLS). Описаны сценарии работы серверной и
клиентской частей программного приложения.
Ключевые слова: видеофайл, потоковое видео, медиаконтейнер, Android.
In this article discusses the principles of video streaming. A modified technique HTTP Live Streaming
(HLS). Describe scenarios of server and client parts software application.
Keywords: video, streaming video, mediakonteyner, Android..
ВВЕДЕНИЕ
В настоящее время мобильные устройства переживают эпоху расцвета. Мобильные
телефоны и планшетные компьютеры все сильнее вытесняют персональные компьютеры.
Подавляющее число современных мобильных устройств, в частности смартфонов и
планшетных компьютеров на ОС Android, довольно часто используется для потребления
медиа-контента, например, просмотра видео различных форматов. Существуют
следующие способы просмотра видео на мобильном устройстве:
1 Просмотр видео, хранящегося непосредственно в памяти мобильного устройства;
2 Просмотр потокового видео через Интернет, с использованием сервисов
видеохостинга (Youtube, Rutube и др.);
3 Использование персонального компьютера как хранилища видеоматериалов,
который посредством технологии Wi-Fi передает поток с видео на мобильное устройство.
В рамках данной статьи будет рассмотрено программное средство, организующее
потоковый просмотр видео третьим способом.
ОСОБЕННОСТИ ХРАНЕНИЯ ВИДЕОРОЛИКОВ
Прежде, чем перейти к рассмотрению архитектурных особенностей программного
средства, следует рассмотреть понятие видеофайла. На ЭВМ видеоролики хранятся
посредством видеофайлов.
Видеофайл представляет собой медиаконтейнер, который хранит в себе
видеоданные, аудиоданные и субтитры. Для обозначения одного варианта видеоданных,
аудиоданных и субтитров будем использовать такие понятия как поток видео, аудиопоток
и поток субтитров. В общем случае, медиаконтейнер может хранить несколько потоков
видео, аудио и субтитров. Однако чаще всего медиаконтейнер содержит один поток видео
и несколько потоков аудио субтитров. Медиаконтейнер определяет способ хранения
данных внутри себя, но не алгоритм их кодирования. Однако, вид медиаконтейнера может
оказывать влияние на выбор аудио и видео кодеков. Субтитры могут храниться не только
внутри медиаконтейнера, но в виде отдельных файлов.
Программное средство имеет клиент-серверную архитектуру, в качестве сети для
передачи данных используются локальная сеть, построенная на основе технологии Wi-Fi.
Общая схема организации просмотра потокового видео изображена на рисунке 1.
ЭВМ
Исходный
видеофайл
Кодировщик
Сервер
Сеть
Мобильное устройство
Экран
Декодер
Клиент
Рисунок 1 – Общая схема организации просмотра потокового видео
К плюсам использования данной схемы можно отнести меньшую нагрузку на сеть
и на процессор мобильного устройства, так как исходный поток видео высокого
разрешения и битрейта преобразуется кодировщиком на серверной стороне в видео,
пригодное для потоковой передачи.
Для реализация данной схемы в рамках программного средства используется
модифицированная технология HTTP Live Streaming (HLS). Суть технологии заключается
в следующем. Исходный файл с видео разбивается на части небольшой длительности
(около 3 – 15 секунд), части записываются в отдельные файлы. Затем создается список
воспроизведения, в котором содержатся имена всех фрагментов, их порядок в исходном
файле, а также их длительности. Для просмотра видео клиент скачивает список
воспроизведения с web-сервера по протоколу HTTP, а затем запрашивает и воспроизводит
фрагменты в порядке их следования в списке воспроизведения. В случае если
пользователь совершает перемотку видео, то клиент на основе временной метки для
перемотки и длительности фрагментов, содержащейся в списке воспроизведения,
вычисляет имя файла с нужным фрагментом, совершает скачивание файла с сервера по
протоколу HTTP и воспроизводит его. Использование данной технологии в чистом виде
для организации потокового воспроизведения видео, хранящегося на персональном
компьютере (в отличие от серверной машины), нежелательно, так как она требует
предварительного разбиения и перекодировки видео, а затем хранения его частей. Чтобы
минимизировать накладные расходы на хранение оригинального файла с видео и
перекодированных частей, программное средство использует модифицированную
технологию HLS и производит генерирование списка воспроизведения, разбиение
исходного видеофайла на фрагменты, перекодировку в реальном времени.
СЕРВЕРНАЯ
И
КЛИЕНТСКАЯ
ЧАСТИ
РАЗРАБАТЫВАЕМОГО
ПРИЛОЖЕНИЯ
Технология HLS поддерживается ОС Android с версии 3.0. Существуют следующие
ограничения, накладываемые на файлы с фрагментами видео. Медиаконтейнер фрагмента
должен быть MPEG-2 TS. Видео должно быть закодировано кодеком H.264 AVC c
профилем Baseline. Звук должен быть закодирован кодеком AAC. Поддержка технологии
ОС Android позволяет создать клиентскую часть на языке Java без использования
собственных модулей, написанных на С. Таким образом, клиентское приложение может
исполняться на любой архитектуре процессора, поддерживаемой ОС Android.
Общая структура серверной части программного средства представлена на рисунке
2.
JSON-структура
Информация о потоках
Блок работы с
файловой
системой
Текущая папка
Название файла
Номер
фрагмента
Название фрагмента
Блок HTTPсервер
Идентификатор
субтитров
Фрагмент видео
Блок работы с
субтитрами
Фрагмент
видео
100
Id потока
LRU-кэш
80
Субтитры
60
Субтитры
Название списка
Список воспроизведения
Блок работы с
медиаданными
Блок генерации
списков
воспроизведения
Восток
Запад
Название файла40
Север
20
Длительность
0
1 кв
2 кв
3 кв
4 кв
Рисунок 2 – Общая структура серверной части программного средства
В соответствии с данной структурой сценарий работы серверной части
программного приложения имеет следующий вид.
1Удаленная навигация по файловой системе.
Блок HTTP-сервер получает от клиентской части get-запрос на получение списка
файлов и папок, с указанием текущей папки. Блок HTTP-сервер перенаправляет запрос
блоку работы с файловой системой. Блок работы с файловой системой производит поиск
файлов с видео и папок в указанной директории. Для каждого найденного файла с видео
данный блок запрашивает информацию о содержащихся в нем потоках с видео, звуком и
субтитрами у блока работы с медиаданными. Блок работы с медиаданными построен с
использованием библиотеки FFmpeg, поэтому он может работать с огромным
количеством медиаконтейнеров и кодеков. Также для каждого найденного видео блок
работы с файловой системой осуществляет поиск файла с внешними субтитрами. Затем
данный блок генерирует JSON-структуру с найденными видеофайлами, папками и
информацией о них. Блок возвращает данную структуру блоку HTTP-сервер, который
передает ее клиенту.
2 Передача субтитров.
Блок HTTP-сервер получает от клиентской части запрос на получение конкретного
потока субтитров. Данный блок перенаправляет запрос блоку работы с субтитрами. Если
данные субтитры находятся во внешнем файле, то блок работы с субтитрами производит
считывание информации из внешнего файла, иначе – производится запрос на извлечение
субтитров из исходного файла с видео к блоку работы с медиаданными. После получения
ответа от блока работы с медиаданными или прямого считывания из файла блок передает
субтитры блоку HTTP-сервер, который отправляет их клиентскому приложению.
2 Генерация списка воспроизведения.
Блок HTTP-сервер получает от клиентской части запрос на получение списка
воспроизведения. Данный блок перенаправляет запрос блоку генерации списков
воспроизведения. Блок генерации списков воспроизведения делает запрос на получение
продолжительности видео к блоку работы с медиаданными и на основе полученных
данных генерирует список воспроизведения в формате m3u8, который затем передается
клиенту блоком HTTP-сервер.
3 Получение фрагмента видео.
Блок HTTP-сервер получает от клиентской части запрос на получение фрагмента
видео. Затем он перенаправляет запрос блоку работы с медиаданными. Блок работы с
медиаданными делает поиск нужного фрагмента в LRU-кэше. Если данный фрагмент
имеется в LRU-кэше, то он передается блоку HTTP-сервер. В противном случае
производится вычисление по номеру фрагмента его временной метки в исходном файле.
Затем производится декодирование видео и звука. Для видео выполняется изменение
размера кадра и его формата, для звука изменение формата. Затем видео и звук
кодируются, помещаются в LRU-кэш и возвращаются блоку HTTP-сервер, который затем
передает их клиенту.
Укрупненную структуру клиентского приложения составляет блок навигации по
удаленной файловой системе, блок HTTP-клиент, блок медиапроигрыватель, блок работы
с субтитрами.
Блок навигации по удаленной файловой системе включает в себя компоненты
графического интерфейса для навигации по папкам и просмотра сведений о видеофайлах,
а также модуль синтаксического разбора JSON-структур и модуль генерации запросов к
серверу.
Блок медиапроигрыватель основан на компоненте Media Player ОС Android.
Благодаря этому возможно использование аппаратного ускорения декодирования видео
без привязки к конкретным аппаратным составляющим мобильного устройства.
Блок HTTP-клиент представлен пакетом Apache HTTP Client и классами,
обеспечивающими многопоточность.
Блок работы с субтитрами представлен модулями синтаксического разбора
исходных субтитров в форматах ASS и SRT и преобразования их во внутренний формат,
механизмов интеграции с блоком медиапроигрыватель и HTTP-клиент.
Обобщенный сценарий работы клиентского приложения выглядит следующим
образом. Блок навигации по удаленной файловой системе формирует запрос на получение
списка видеофайлов и папок, передает запрос блоку HTTP-клиент, который осуществляет
get-запрос к серверу. После получения от сервера ответа на запрос блоком HTTP-клиент в
виде JSON-структуры, структура передается блоку навигации по удаленной файловой
системе.
Затем синтаксический анализатор разбирает JSON-структуру и передает данные
модулю графического интерфейса для отображения. При выборе пользователем
видеофайла для просмотра с указанием конкретного варианта аудиопотока и субтитров
название видеофайла с идентификаторами потоков передаются блоку медиаплеер. Данный
блок передает идентификатор субтитров блоку работы с субтитрами.
Блок работы с субтитрами скачивает субтитры с сервера посредством обращения к
блоку HTTP-клиент. Скачанные субтитры разбираются синтаксическим анализатором и
преобразуются во внутренний формат. После этого блок медиаплеер делает запрос на
предоставление списка воспроизведения к серверу посредством HTTP-клиента.
После получения списка воспроизведения медиаплеер скачивает через HTTPклиент фрагмент видеофайла и начинает воспроизведение. После начала воспроизведения
блок работы с субтитрами начинает периодически получать от блока медиаплеер текущее
время воспроизведения. Для каждой полученной временной метки блок работы с
субтитрами формирует текст и передает его медиаплееру для отображения.
ЗАКЛЮЧЕНИЕ
В результате разработки структуры описанного программного средства стала
возможна реализация программного приложения, содержащего клиентскую и серверную
части для воспроизведения потокового видео с персонального компьютера на устройствах
под управлением ОС Android.
СПИСОК ЛИТЕРАТУРЫ
1 Develop [Электронный ресурс] / Android Developers. – Режим доступа:
http://developer.android.com/develop/index.html. – Загл. с экрана.
2 Потоковое видео в Android [Электронный ресурс] / Хабрахабр. – Режим доступа:
http://habrahabr.ru/post/148754. – Загл. с экрана.
3 FFmpeg Documentation [Электронный ресурс] / FFmpeg. – Режим доступа:
http://ffmpeg.org/doxygen/trunk/index.html. – Загл. с экрана.
Новиков Сергей Владимирович
ФГБОУ ВПО «Госуниверситет – УНПК», г. Орел
к.т.н., доцент
доцент кафедры «Информационные системы»
г. Орел, Наугорское шоссе, 40
(4862) 76-19-10
E-mail: serg111@list.ru
Козлов Валерий Александрович
ФГБОУ ВПО «Госуниверситет – УНПК», г. Орел
студент
г. Орел, Наугорское шоссе, 40
(4862) 76-19-10
Kva_Kudzu@Mail.ru
Стычук Алексей Александрович
ФГБОУ ВПО «Госуниверситет – УНПК», г. Орел
к.т.н., доцент
доцент кафедры «Информационные системы»
г. Орел, Наугорское шоссе, 40
(4862) 76-19-10
E-mail: stichuck@rambler.ru
Download