Смекни!
smekni.com

Потоковое видео и открытые системы (стр. 2 из 3)

FFmpeg — набор свободных библиотек с открытым исходным кодом, которые позволяют записывать, конвертировать и передавать цифровое аудио и видео в различных форматах. Он включает libavcodec — библиотеку кодирования и декодирования аудио и видео и libavformat — библиотеку мультиплексирования и демультиплексирования в медиаконтейнер. Название происходит от названия экспертной группы MPEG и FF, означающего fast forward.

FFmpeg разработан под ОС на основе Linux, однако может быть скомпилирован под многие другие операционные системы. Разработчики не выпускают релизов и рекомендуют использовать последнюю версию из Subversion. Распространяется под лицензиями GNU LGPL или GNU GPL.

Серверы на основе FFmpegчасто организуют на вебхостинге, создавая различные видео порталы. Но зачастую данную библиотеку используют лишь как конвертер для медиафайлов при загрузке их на сервер.

VideoLAN- многофункциональный комплекс, портированный практически под все операционные системы, поддерживающий множество протоколов, форматов и контейнеров, который можно использовать и как локальный аудио/видеоплеер, и как сервер трансляции (рис. 1).

VideoLAN-этонекоммерческийпроект,бесплатнуюверсиюкоторого(вместесисходнымитекстамииготовымибинарнымисборками)всегдаможноскачатьсофициальногоcервераhttp://www.videolan.org/.

Клиентская и серверные части исправно работают под Linux, Windows, MacOSX, BeOS, xBSD, Solaris, FamiliarLinux, Yopy/Linupyи QNX, однако их функциональность различна и в зависимости от выбранной платформы варьируется в очень широких пределах (рис. 2).

Рисунок 2. Возможности программы VideoLAN на каждой из поддерживаемых ею платформ.


Поддерживаются следующие входные форматы данных: MPEG-1, MPEG-2, MPEG-4/DivX(считываемые с локального жесткого диска или CD/DVD); "настоящие" DVDи VCD; спутниковые карты, работающие по стандарту (DVB-S); потоковое видео, "упакованное" в MPEG-1, MPEG-2 и MPEG-4 (то есть, VideoLANможет работать не только как сетевой транслятор, но и какретрансляторчужого контента с возможностью сохранения последнего на жесткий диск).

В настоящий момент реализованы два основных протокола трансляции:Unicast("узконаправленное" вещание с доставкой контента только одному целевому узлу) иMulticast(групповая трансляция с доставкой одного и того же контента множеству узлов). Также (формально) имеется возможность широковещательной рассылки контента всем узлам локальной сети (для этого достаточно указать в качестве целевого IP-адреса 255.255.255.255), но с высокой степенью вероятности она будет задавлена брандмауэрами и маршрузитаторами, так что без их радикальной перестройки сеанс вещания не состоится даже в рамках локальной сети.

Еще имеется ограниченная поддержка видео-по-требованию (Video-on-Demandили, сокращенно, VoD) с возможностью выбора контента по HTTPили TELNETинтерфейсам, однако эта возможность обычно используется исключительно администраторами для удаленного управления сервером трансляции.

Контейнеры, в которые помещается транслируемый поток, зависят от типа трансляции, допустимые комбинации которых перечислены в таблице на рис. 5. Естественно, все это хозяйство работает как с IPv4, так и с IPv6.


Рисунок 5. Допустимые комбинации протоколов трансляции с контейнерами, в которые упаковывается транслируемый медиа-поток.


2. Практическаячасть

Рассмотрим подробнее организацию потоковой трансляцию видео на основе сервера VideoLan установленного на систему Ubuntu 10.10.

2.1 Установка сервера

Для установки сервера, воспользуемся стандартным менеджером пакетов Synapticи установим требуемые пакеты согласно инструкции установки на систему Ubuntu 10.10. Так же возможна установка, используя терминал. Что пригодится для удаленной установки.

Для нормальной работы сервера VideoLAN обязательным условием является установка и проигрывателя с библиотеками. Поэтому сначала устанавливаем медиапроигрыватель, который при установке автоматически загрузит связанные пакеты.

Для того чтобы появилась возможность потокового вещания заменяем установленные библиотеки libavcodec на libavcodec-extra.

Размер загружаемых пакетов довольно скромен по сегодняшним меркам и составляет около 6 мегабайт.

После загрузки и установки VideoLAN можно сразу приступать к организации потокового вещания.

2.2 Организация потокового вещания по протоколу UDPUnicast

Самое простое - это потоковое вещание обычного AVI/MPEGфайла на соседний компьютер. В меню программы выбираем пункт Медиа - Потоковое вещание или же воспользовавшись горячими клавишами можно нажать <CTRL-S> (см. рис. 6) и через "Обзор" выбираем один или несколько файлов (не обязательно одного и того же типа).

Для подключения субтитров (если мы хотим их подключать) взводим одноименную галочку и указываем путь к файлу с субтитрами, положение и цвет которых определяется кнопкой "Расширенные настройки". VideoLANподдерживает множество субтитров различных типов (включая .srtи .sub), что позволяет нам, в частности, накладывать рекламу на видеопоток или различные сведения чисто информационного характера. После всех установок связанных с выбором входного видео и субтитров можно нажимать на кнопку «Поток». В VideoLANвещание можно осуществлять сразу в нескольких «направлениях», но нам достаточно выбрать протокол UDP. В поле адрес введем адрес компьютера на который будет осуществляться вещание и порт (по-умолчанию 1234). Также на этом этапе можно включить перекодирование входного потока, что в частности пригодится для вещания по протоколу HTTP. В данном случае, использование протокола UDP Unicast подразумевает в качестве среды передачи данных локальную сеть, что обуславливает высокую скорость передачи данных. Поэтому в перекодировании нет особого смысла.

Время жизни пакетов (TTL) зависит от количества узлов, через которые проходит транслируемый контент, и чтобы он не ушел чересчур далеко, это значение можно установить равному трем или даже одному. О строке "MRL выходного потока" можно не заботиться, программа сформирует ее за нас автоматически. После нажатия кнопки «Поток» автоматически начнется вещание на указанный в параметрах адрес.

Проверим трансляцию, запустив любой проигрыватель, поддерживающий потоковую передачу, на компьютере с адресом, указанным в параметрах, и укажем номер udpпорта. Запустим VCL проигрыватель на операционной системе windows7 и увидим осуществляемую трансляцию.

При этом нам вовсе не обязательно знать адрес сервера, достаточно лишь указать порт на который ведется трансляция.


2.3 Организация потокового вещания по протоколу HTTP

Главным недостатком unicast-трансляции является невозможность вещания на произвольные узлы локальной/глобальной сети. Сервер должен иметь список IP-узлов для рассылки пакетов. Получателям знать же IP-адрес транслятора ни к чему. Им достаточно "помнить" назначенный UDP-порт, чтобы ловить трафик. В обычной жизни все наоборот. Передатчик ничего не знает о приемнике (приемниках), а каждый из приемников в любой момент времени может настроиться на волну любого из многочисленных передатчиков и отключиться, если передача ему неинтересна.

Специально для реализации подобного способа общения, VideoLAN поддерживает трансляцию через Web по TCP/IP-протоколу. Возвращаясь к серверной стороне, меняем протокол с UDPна HTTP, в поле адрес можно ничего не указывать, если транслироваться будет только один видео-поток.

Также рекомендуется увеличить и значение TTL, особенно если мы собираемся вещать в Интернет на далекие расстояния.

Обратим внимание, что на этот раз трансляция осуществляется через webи важно выбрать один из доступных контейнеров, для более лучшего сжатия потока и снижения трафика. Если все клиенты используют в качестве приемника программу VideoLAN, то особой разницы нет и лучше оставить контейнер по умолчанию, если же планируется транслировать аудио/видеопоток на компьютеры, где кроме Windows и штатного медиаплеера ничего нет, лучше выбрать ASF, однако в таком случае следует позаботиться о совместимости с кодеками, поставляемыми вместе с Windows и в графе "профиль" выбрать что-то очень хорошо известное и проверенное временем (например, DIV3, WM1, WM2), аналогичным путем поступить и со звуком, в противном случае слушателям придется рыскать в поисках нужных кодеков перед началом воспроизведения контента.

Бегущий ползунок линейки прогресса подтверждает, что вещание началось, даже если к нам еще никто не подключен.

Помимо VLCплейера попробуем открыть поток также и в стандартном проигрывателе Windows.

2.4 Создание web-страницы транслирующей медиапоток с сервера

Так как в случае трансляции видео через web, вовсе не обязательно знать адреса клиентских машин, то для упрощения доступа к транслируемому потоку логично сделать webинтерфейс. Создадим пустую html-страницу и внедрим в неё код плеера. Для web трансляции код страницы может выглядеть следующим образом:

<html>

<head><title>Тест</title></head>

<body>

<h2>Тестовое потоковое вещание. КурсоваяАИС. <h2>

<embed type="application/x-vlc-plugin"

name="video"

autoplay="yes" loop="yes" width="400" height="300"

target="http://192.168.1.4:8080"/>

<br />

</body>

</html>

Где свойство объекта target будет содержать адрес транслируемого потока.


2.5 Удаленное управление сервером VideoLAN

Для удаленного управления медиасервером установим в системе OpenSSHсервер.